diff --git a/diylc/diylc-core/src/main/java/org/diylc/presenter/ComponentProcessor.java b/diylc/diylc-core/src/main/java/org/diylc/presenter/ComponentProcessor.java index d5a081af..6f151d60 100644 --- a/diylc/diylc-core/src/main/java/org/diylc/presenter/ComponentProcessor.java +++ b/diylc/diylc-core/src/main/java/org/diylc/presenter/ComponentProcessor.java @@ -26,12 +26,8 @@ import java.awt.Image; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.lang.reflect.Modifier; +import java.util.*; import javax.swing.Icon; import javax.swing.ImageIcon; import org.apache.log4j.Logger; @@ -47,6 +43,11 @@ import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; import org.diylc.core.annotations.KeywordPolicy; import org.diylc.lang.LangUtil; +import org.reflections.Reflections; +import org.reflections.util.ConfigurationBuilder; +import org.reflections.util.FilterBuilder; + +import static org.reflections.scanners.Scanners.TypesAnnotated; /** * Utility class with component processing methods. @@ -63,6 +64,7 @@ public class ComponentProcessor { private Map propertyValidatorCache; private Map componentTypeMap; private Map componentTransformerMap; + private Map> componentTypes; public static ComponentProcessor getInstance() { if (instance == null) { @@ -218,6 +220,50 @@ public class ComponentProcessor { return result; } + public Map> getComponentTypes() { + if (componentTypes == null) { + LOG.info("Loading component types."); + componentTypes = new HashMap>(); + Reflections reflections = new Reflections( + new ConfigurationBuilder() + .forPackage("org.diylc") + .filterInputsBy(new FilterBuilder().includePackage("org.diylc.components")) + .setScanners(TypesAnnotated)); + Set> componentTypeClasses = null; + try { + componentTypeClasses = reflections.getTypesAnnotatedWith(ComponentDescriptor.class, false); + + for (Class clazz : componentTypeClasses) { + if (!Modifier.isAbstract(clazz.getModifiers()) && IDIYComponent.class.isAssignableFrom(clazz)) { + ComponentType componentType = + ComponentProcessor.getInstance().extractComponentTypeFrom((Class>) clazz); + if (componentType == null) + continue; + + // just to store in the cache + ComponentProcessor.getInstance().extractProperties(clazz); + + List nestedList; + if (componentTypes.containsKey(componentType.getCategory())) { + nestedList = componentTypes.get(componentType.getCategory()); + } else { + nestedList = new ArrayList(); + componentTypes.put(componentType.getCategory(), nestedList); + } + nestedList.add(componentType); + } + } + + for (Map.Entry> e : componentTypes.entrySet()) { + LOG.debug(e.getKey() + ": " + e.getValue()); + } + } catch (Exception e) { + LOG.error("Error loading component types", e); + } + } + return componentTypes; + } + /** * Returns properties that have the same value for all the selected components. * diff --git a/diylc/diylc-core/src/main/java/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/main/java/org/diylc/presenter/Presenter.java index a57686b7..aca59d0b 100644 --- a/diylc/diylc-core/src/main/java/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/main/java/org/diylc/presenter/Presenter.java @@ -136,6 +136,9 @@ public class Presenter implements IPlugInPort, IConfigListener { private static final String APPLY_ERROR = LangUtil.translate("Could not apply changes. Check the log for details."); private static final Logger LOG = Logger.getLogger(Presenter.class); + + public static final Double[] ZOOM_LEVELS = + {0.25d, 0.3333d, 0.5d, 0.6667d, 0.75d, 1d, 1.25d, 1.5d, 2d, 2.5d, 3d}; public static VersionNumber CURRENT_VERSION = null; private static List RECENT_VERSIONS = null; @@ -149,7 +152,6 @@ public class Presenter implements IPlugInPort, IConfigListener { private static final int MAX_RECENT_FILES = 20; private Project currentProject; - private Map> componentTypes; // Maps component class names to ComponentType objects. private List plugIns; @@ -242,7 +244,7 @@ public class Presenter implements IPlugInPort, IConfigListener { @Override public java.lang.Double[] getAvailableZoomLevels() { - return new java.lang.Double[] {0.25d, 0.3333d, 0.5d, 0.6667d, 0.75d, 1d, 1.25d, 1.5d, 2d, 2.5d, 3d}; + return ZOOM_LEVELS; } @Override @@ -424,47 +426,7 @@ public class Presenter implements IPlugInPort, IConfigListener { @SuppressWarnings("unchecked") @Override public Map> getComponentTypes() { - if (componentTypes == null) { - LOG.info("Loading component types."); - componentTypes = new HashMap>(); - Reflections reflections = new Reflections( - new ConfigurationBuilder() - .forPackage("org.diylc") - .filterInputsBy(new FilterBuilder().includePackage("org.diylc.components")) - .setScanners(TypesAnnotated)); - Set> componentTypeClasses = null; - try { - componentTypeClasses = reflections.getTypesAnnotatedWith(ComponentDescriptor.class, false); - - for (Class clazz : componentTypeClasses) { - if (!Modifier.isAbstract(clazz.getModifiers()) && IDIYComponent.class.isAssignableFrom(clazz)) { - ComponentType componentType = - ComponentProcessor.getInstance().extractComponentTypeFrom((Class>) clazz); - if (componentType == null) - continue; - - // just to store in the cache - ComponentProcessor.getInstance().extractProperties(clazz); - - List nestedList; - if (componentTypes.containsKey(componentType.getCategory())) { - nestedList = componentTypes.get(componentType.getCategory()); - } else { - nestedList = new ArrayList(); - componentTypes.put(componentType.getCategory(), nestedList); - } - nestedList.add(componentType); - } - } - - for (Map.Entry> e : componentTypes.entrySet()) { - LOG.debug(e.getKey() + ": " + e.getValue()); - } - } catch (Exception e) { - LOG.error("Error loading component types", e); - } - } - return componentTypes; + return ComponentProcessor.getInstance().getComponentTypes(); } @SuppressWarnings({"unchecked"})