123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- package com.vaadin.tests.server;
-
- import java.io.File;
- import java.lang.reflect.Modifier;
- import java.net.URISyntaxException;
- import java.util.Arrays;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Set;
- import java.util.stream.Collectors;
-
- import org.jsoup.nodes.Document;
- import org.jsoup.nodes.Element;
- import org.junit.Assert;
- import org.junit.Test;
-
- import com.vaadin.navigator.Navigator;
- import com.vaadin.ui.Component;
- import com.vaadin.ui.DragAndDropWrapper;
- import com.vaadin.ui.components.colorpicker.ColorPickerGradient;
- import com.vaadin.ui.components.colorpicker.ColorPickerGrid;
- import com.vaadin.ui.components.colorpicker.ColorPickerHistory;
- import com.vaadin.ui.components.colorpicker.ColorPickerPopup;
- import com.vaadin.ui.components.colorpicker.ColorPickerPreview;
- import com.vaadin.ui.components.colorpicker.ColorPickerSelect;
- import com.vaadin.ui.declarative.Design;
- import com.vaadin.ui.declarative.DesignContext;
-
- /**
- * Utility class for outputting the declarative syntax of Vaadin components.
- */
- public class ComponentDesignWriterUtility {
-
- private static final Set<String> WHITE_LIST_FQNS = new HashSet<>();
- private static final Document document = new Document("");
- private static final DesignContext designContext = new DesignContext(
- document);
-
- static {
- WHITE_LIST_FQNS.add(DragAndDropWrapper.class.getName());
- WHITE_LIST_FQNS.add(Navigator.EmptyView.class.getName());
-
- WHITE_LIST_FQNS.add(ColorPickerGradient.class.getName());
- WHITE_LIST_FQNS.add(ColorPickerPopup.class.getName());
- WHITE_LIST_FQNS.add(ColorPickerPreview.class.getName());
- WHITE_LIST_FQNS.add(ColorPickerGrid.class.getName());
- WHITE_LIST_FQNS.add(ColorPickerSelect.class.getName());
- WHITE_LIST_FQNS.add(ColorPickerHistory.class.getName());
-
- WHITE_LIST_FQNS
- .add(com.vaadin.v7.ui.components.colorpicker.ColorPickerGradient.class
- .getName());
- WHITE_LIST_FQNS
- .add(com.vaadin.v7.ui.components.colorpicker.ColorPickerPopup.class
- .getName());
- WHITE_LIST_FQNS
- .add(com.vaadin.v7.ui.components.colorpicker.ColorPickerPreview.class
- .getName());
- WHITE_LIST_FQNS
- .add(com.vaadin.v7.ui.components.colorpicker.ColorPickerGrid.class
- .getName());
- WHITE_LIST_FQNS
- .add(com.vaadin.v7.ui.components.colorpicker.ColorPickerSelect.class
- .getName());
- WHITE_LIST_FQNS
- .add(com.vaadin.v7.ui.components.colorpicker.ColorPickerHistory.class
- .getName());
-
- // ==================================================================
- // Classes that cannot be loaded
- // ==================================================================
- WHITE_LIST_FQNS.add(
- "com.vaadin.server.communication.PushAtmosphereHandler$AtmosphereResourceListener");
- WHITE_LIST_FQNS
- .add("com.vaadin.server.communication.PushAtmosphereHandler");
- WHITE_LIST_FQNS
- .add("com.vaadin.server.communication.PushRequestHandler$1");
- WHITE_LIST_FQNS
- .add("com.vaadin.server.communication.PushRequestHandler$2");
- WHITE_LIST_FQNS.add("com.vaadin.server.LegacyVaadinPortlet");
- WHITE_LIST_FQNS.add("com.vaadin.server.RestrictedRenderResponse");
- WHITE_LIST_FQNS
- .add("com.vaadin.server.VaadinPortlet$VaadinGateInRequest");
- WHITE_LIST_FQNS.add(
- "com.vaadin.server.VaadinPortlet$VaadinHttpAndPortletRequest");
- WHITE_LIST_FQNS
- .add("com.vaadin.server.VaadinPortlet$VaadinLiferayRequest");
- WHITE_LIST_FQNS.add(
- "com.vaadin.server.VaadinPortlet$VaadinWebLogicPortalRequest");
- WHITE_LIST_FQNS.add(
- "com.vaadin.server.VaadinPortlet$VaadinWebSpherePortalRequest");
- WHITE_LIST_FQNS.add("com.vaadin.server.VaadinPortlet");
- WHITE_LIST_FQNS.add("com.vaadin.server.VaadinPortletRequest");
-
- designContext.setShouldWriteDefaultValues(true);
- }
-
- @SafeVarargs
- public static List<String> getDeclarativeSyntax(
- Class<? extends Component>... components) {
- return getDeclarativeSyntax(Arrays.asList(components));
- }
-
- public static List<String> getDeclarativeSyntax(
- List<Class<? extends Component>> components) {
- List<String> declarativeStrings = components.stream()
- .map(ComponentDesignWriterUtility::getDeclarativeSyntax)
- .collect(Collectors.toList());
-
- return declarativeStrings;
- }
-
- @Test
- public void vaadin8ComponentsElementStartsWithVaadinPrefix()
- throws URISyntaxException {
- Assert.assertTrue(getVaadin8Components().stream()
- .map(ComponentDesignWriterUtility::getDeclarativeSyntax)
- .allMatch(element -> element.startsWith("<vaadin-")));
- }
-
- @Test
- public void vaadin7ComponentsElementStartsWithVaadinPrefix()
- throws URISyntaxException {
- Assert.assertTrue(getVaadin7Components().stream()
- .map(ComponentDesignWriterUtility::getDeclarativeSyntax)
- .allMatch(element -> element.startsWith("<vaadin7-")));
- }
-
- private static String getDeclarativeSyntax(
- Class<? extends Component> componentClass) {
- try {
- Component component = componentClass.newInstance();
- Element element = document.createElement(Design.getComponentMapper()
- .componentToTag(component, designContext));
- component.writeDesign(element, designContext);
- return element.toString();
- } catch (Exception e) {
- throw new RuntimeException(
- "Could not write the declarative syntax for component "
- + componentClass.getName(),
- e);
- }
- }
-
- public static void main(String[] args) throws URISyntaxException {
- System.out.println("Vaadin 8 components:");
- printFullDeclarativeSyntax(getVaadin8Components());
-
- System.out.println("Vaadin 7 components:");
- printFullDeclarativeSyntax(getVaadin7Components());
-
- System.out.println("\nClases that are explicitely excluded from "
- + "the design support introspection:");
- WHITE_LIST_FQNS.forEach(System.out::println);
- }
-
- private static void printFullDeclarativeSyntax(
- List<Class<? extends Component>> components) {
- components.stream().forEach(component -> System.out
- .println(getDeclarativeSyntax(component)));
- }
-
- private static List<Class<? extends Component>> getVaadin8Components()
- throws URISyntaxException {
- List<Class<? extends Component>> vaadin8Components = getVaadinComponentsFromClasspath(
- "/server/target/classes");
- if (vaadin8Components.isEmpty()) {
- throw new RuntimeException(
- "No vaadin 8 components found on your classpath.");
- }
- return vaadin8Components;
- }
-
- private static List<Class<? extends Component>> getVaadin7Components()
- throws URISyntaxException {
- List<Class<? extends Component>> vaadin7Components = getVaadinComponentsFromClasspath(
- "compatibility-server");
- if (vaadin7Components.isEmpty()) {
- throw new RuntimeException(
- "No vaadin 7 components found on your classpath.");
- }
- return vaadin7Components;
- }
-
- @SuppressWarnings("unchecked")
- private static List<Class<? extends Component>> getVaadinComponentsFromClasspath(
- String classpathFilter) throws URISyntaxException {
- File testRoot = new File(
- ComponentDesignWriterUtility.class.getResource("/").toURI());
- List<Class<? extends Component>> classes = new ClasspathHelper(
- WHITE_LIST_FQNS::contains).getVaadinClassesFromClasspath(
- entry -> entry.contains(classpathFilter)
- && !testRoot.equals(new File(entry)),
- cls -> Component.class.isAssignableFrom(cls)
- && !cls.isInterface()
- && !Modifier.isAbstract(cls.getModifiers()))
- .map(cls -> (Class<? extends Component>) cls)
- .collect(Collectors.toList());
- return classes;
- }
-
- }
|