Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Elder2013-05-23 16:01:28 +0000
committerGerrit Code Review @ Eclipse.org2013-07-25 14:55:06 +0000
commit2ca28faf3fff2ebc3bf650b826119a9295436b57 (patch)
tree65bcb2390d2d7acdd943fbcaadb31785eb5aed20
parent4f36d3eb105be48c85372643f833fce9a62c76f6 (diff)
downloadeclipse.platform.ui-2ca28faf3fff2ebc3bf650b826119a9295436b57.tar.gz
eclipse.platform.ui-2ca28faf3fff2ebc3bf650b826119a9295436b57.tar.xz
eclipse.platform.ui-2ca28faf3fff2ebc3bf650b826119a9295436b57.zip
Bug 409279: Follow EMF best practices for model loading/saving
Adopt recommended EMF load/save options for better performance. Change reduces model load time by approximately 60%. Bug: 413645 Change-Id: Icb084c825114936d148abbf42f56ad70151bfb5c
-rw-r--r--bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/E4XMIResourceFactory.java43
1 files changed, 41 insertions, 2 deletions
diff --git a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/E4XMIResourceFactory.java b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/E4XMIResourceFactory.java
index d2b2ab0fa86..e46a5df2a86 100644
--- a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/E4XMIResourceFactory.java
+++ b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/E4XMIResourceFactory.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
+ * Copyright (c) 2009, 2013 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -11,14 +11,53 @@
package org.eclipse.e4.ui.internal.workbench;
+import java.util.List;
+import java.util.Map;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.XMLParserPool;
+import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMLParserPoolImpl;
+/**
+ * Resource factory for {@link E4XMIResource}.
+ */
public class E4XMIResourceFactory extends XMIResourceFactoryImpl {
+ /**
+ * List used for EMF {@link XMLResource#OPTION_USE_CACHED_LOOKUP_TABLE} option value. Packaged
+ * in a ThreadLocal per EMF recommendation for thread safety.
+ */
+ private final ThreadLocal<List<Object>> lookupTable = new ThreadLocal<List<Object>>();
+ /**
+ * Parser pool object for {@link XMLResource#OPTION_USE_PARSER_POOL} option. Also needed for
+ * setting {@link XMLResource#OPTION_USE_DEPRECATED_METHODS} for false.
+ */
+ private final XMLParserPool parserPool = new XMLParserPoolImpl();
+ /**
+ * Map used for {@link XMLResource#OPTION_USE_XML_NAME_TO_FEATURE_MAP}. Per EMF documentation,
+ * the map is hosted within a ThreadLocale for thread safety.
+ */
+ private final ThreadLocal<Map<Object, Object>> nameToFeatureMap = new ThreadLocal<Map<Object, Object>>();
+
@Override
public Resource createResource(URI uri) {
- return new E4XMIResource(uri);
+ final E4XMIResource resource = new E4XMIResource(uri);
+
+ // configure default save/load options, as suggested by
+ // EMF: Eclipse Modeling Framework, Second Edition
+ // Section 15.5.1
+ final Map<Object, Object> saveOptions = resource.getDefaultSaveOptions();
+ saveOptions.put(XMLResource.OPTION_CONFIGURATION_CACHE, Boolean.TRUE);
+ saveOptions.put(XMLResource.OPTION_USE_CACHED_LOOKUP_TABLE, lookupTable.get());
+
+ final Map<Object, Object> loadOptions = resource.getDefaultLoadOptions();
+ loadOptions.put(XMLResource.OPTION_DEFER_ATTACHMENT, Boolean.TRUE);
+ loadOptions.put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION, Boolean.TRUE);
+ loadOptions.put(XMLResource.OPTION_USE_PARSER_POOL, parserPool);
+ loadOptions.put(XMLResource.OPTION_USE_XML_NAME_TO_FEATURE_MAP, nameToFeatureMap.get());
+ loadOptions.put(XMLResource.OPTION_USE_DEPRECATED_METHODS, Boolean.FALSE);
+ return resource;
}
}

Back to the top