use of com.vaadin.flow.server.DependencyFilter in project flow by vaadin.
the class DefaultTemplateParserTest method defaultParser_useDependencyFilters_returnBundle.
@Test
public void defaultParser_useDependencyFilters_returnBundle() {
AtomicInteger calls = new AtomicInteger();
DependencyFilter filter = (list, context) -> {
list.clear();
list.add(new Dependency(Type.HTML_IMPORT, "/bundle.html", LoadMode.EAGER));
calls.incrementAndGet();
return list;
};
Mockito.when(service.getDependencyFilters()).thenReturn(Collections.singletonList(filter));
TemplateParser parser = DefaultTemplateParser.getInstance();
Element element = parser.getTemplateContent(ImportsInspectTemplate.class, "foo").getTemplateElement();
Assert.assertTrue(element.getElementById("foo") != null);
element = parser.getTemplateContent(RootImportsInspectTemplate.class, "foo").getTemplateElement();
Assert.assertTrue(element.getElementById("foo") != null);
element = parser.getTemplateContent(OtherImportsInspectTemplate.class, "bar").getTemplateElement();
Assert.assertTrue(element.getElementById("bar") != null);
Assert.assertEquals("The DependencyFilter should be called exactly 3 times", 3, calls.get());
}
use of com.vaadin.flow.server.DependencyFilter in project flow by vaadin.
the class NpmTemplateParser method getTemplateContent.
@Override
public TemplateData getTemplateContent(Class<? extends PolymerTemplate<?>> clazz, String tag, VaadinService service) {
List<Dependency> dependencies = AnnotationReader.getAnnotationsFor(clazz, JsModule.class).stream().map(jsModule -> new Dependency(Dependency.Type.JS_MODULE, jsModule.value(), // load mode doesn't
LoadMode.EAGER)).collect(Collectors.toList());
for (DependencyFilter filter : service.getDependencyFilters()) {
dependencies = filter.filter(new ArrayList<>(dependencies), service);
}
Pair<Dependency, String> chosenDep = null;
for (Dependency dependency : dependencies) {
if (dependency.getType() != Dependency.Type.JS_MODULE) {
continue;
}
String url = dependency.getUrl();
String source = getSourcesFromTemplate(service, tag, url);
if (source == null) {
continue;
}
if (chosenDep == null) {
chosenDep = new Pair<>(dependency, source);
}
if (dependencyHasTagName(dependency, tag)) {
chosenDep = new Pair<>(dependency, source);
break;
}
}
if (chosenDep != null) {
Element templateElement = BundleParser.parseTemplateElement(chosenDep.getFirst().getUrl(), chosenDep.getSecond());
if (!JsoupUtils.getDomModule(templateElement, null).isPresent()) {
// Template needs to be wrapped in an element with id, to look
// like a P2 template
Element parent = new Element(tag);
parent.attr("id", tag);
templateElement.appendTo(parent);
}
return new TemplateData(chosenDep.getFirst().getUrl(), templateElement);
}
throw new IllegalStateException(String.format("Couldn't find the " + "definition of the element with tag '%s' " + "in any template file declared using '@%s' annotations. " + "In a Spring Boot project, please ensure that the template's " + "groupId is added to the vaadin.whitelisted-packages " + "property. Otherwise, please Check the availability of the " + "template files in your WAR file or provide alternative " + "implementation of the method getTemplateContent() which " + "should return an element representing the content of the " + "template file", tag, JsModule.class.getSimpleName()));
}
use of com.vaadin.flow.server.DependencyFilter in project flow by vaadin.
the class UidlWriter method populateDependencies.
private static void populateDependencies(JsonObject response, DependencyList dependencyList, ResolveContext context) {
Collection<Dependency> pendingSendToClient = dependencyList.getPendingSendToClient();
for (DependencyFilter filter : context.getService().getDependencyFilters()) {
pendingSendToClient = filter.filter(new ArrayList<>(pendingSendToClient), context.getService());
}
if (!pendingSendToClient.isEmpty()) {
groupDependenciesByLoadMode(pendingSendToClient, context).forEach((loadMode, dependencies) -> response.put(loadMode.name(), dependencies));
}
dependencyList.clearPendingSendToClient();
}
Aggregations