diff --git a/diylc/diylc-core/src/org/diylc/common/IVariantProcessor.java b/diylc/diylc-core/src/org/diylc/common/IVariantProcessor.java index 21aa4a4c..48eac4c6 100644 --- a/diylc/diylc-core/src/org/diylc/common/IVariantProcessor.java +++ b/diylc/diylc-core/src/org/diylc/common/IVariantProcessor.java @@ -29,7 +29,8 @@ import org.diylc.core.Template; public interface IVariantProcessor { public static final String TEMPLATES_KEY = "templates"; - public static final String DEFAULT_TEMPLATES_KEY = "defaultTemplates"; + public static final String DEFAULT_TEMPLATES_KEY = "defaultTemplates"; + public static final String DEFAULT_TEMPLATES_IMPORTED_KEY = "defaultTemplatesImported"; void saveSelectedComponentAsVariant(String variantName); diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index 997ae65a..145255f7 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -128,26 +128,6 @@ public class Presenter implements IPlugInPort { } public static final String DEFAULTS_KEY_PREFIX = "default."; - private static Map> defaultVariantMap = null; - static { - try { - URL resource = Presenter.class.getResource("variants.xml"); - if (resource != null) { - BufferedInputStream in = new BufferedInputStream(resource.openStream()); - XStream xStream = new XStream(new DomDriver()); - @SuppressWarnings("unchecked") - Map> map = (Map>) xStream.fromXML(in); - defaultVariantMap = new TreeMap>(String.CASE_INSENSITIVE_ORDER); - defaultVariantMap.putAll(map); - in.close(); - LOG.info(String.format("Loaded default variants for %d components", - defaultVariantMap == null ? 0 : defaultVariantMap.size())); - } - } catch (Exception e) { - LOG.error("Could not load default variants", e); - } - } - public static final List> EMPTY_SELECTION = Collections.emptyList(); public static final int ICON_SIZE = 32; @@ -210,6 +190,7 @@ public class Presenter implements IPlugInPort { // lockedLayers = EnumSet.noneOf(ComponentLayer.class); // visibleLayers = EnumSet.allOf(ComponentLayer.class); upgradeVariants(); + importDefaultVariants(); } public void installPlugin(IPlugIn plugIn) { @@ -2413,8 +2394,7 @@ public class Presenter implements IPlugInPort { variants.add(template); if (System.getProperty("org.diylc.WriteStaticVariants", "false").equalsIgnoreCase("true")) { - if (defaultVariantMap == null) - defaultVariantMap = new HashMap>(); + Map> defaultVariantMap = new HashMap>(); // unify default and user-variants for (Map.Entry> entry : variantMap.entrySet()) { if (defaultVariantMap.containsKey(entry.getKey())) { @@ -2438,6 +2418,45 @@ public class Presenter implements IPlugInPort { ConfigurationManager.getInstance().writeValue(TEMPLATES_KEY, variantMap); } } + + @SuppressWarnings("unchecked") + private void importDefaultVariants() { + // import default templates from variants.xml file only if we didn't do it already + if (!ConfigurationManager.getInstance().readBoolean(DEFAULT_TEMPLATES_IMPORTED_KEY, false)) { + try { + URL resource = Presenter.class.getResource("variants.xml"); + if (resource != null) { + BufferedInputStream in = new BufferedInputStream(resource.openStream()); + XStream xStream = new XStream(new DomDriver()); + Map> defaults = (Map>) xStream.fromXML(in); + in.close(); + + Map> variantMap = + (Map>) ConfigurationManager.getInstance().readObject(TEMPLATES_KEY, null); + if (variantMap == null) + variantMap = new HashMap>(); + + // merge default variants with user's + for (Map.Entry> entry : defaults.entrySet()) { + List