From c18b60c8fbadc78fa47cc236e08573dd54965b60 Mon Sep 17 00:00:00 2001
From: GGu
Date: Mon, 11 Dec 2017 16:53:57 +0800
Subject: [PATCH] feat(TUP-18903): add product details (#1295) (#1318)
---
.../META-INF/MANIFEST.MF | 4 +-
.../build.properties | 4 +-
.../org.talend.commons.runtime/plugin.xml | 6 +
.../schema/emfResourcesProvider.exsd | 197 +++++++++
.../extension/ExtensionRegistryReader.java | 222 ++++++++++
.../commons/runtime/model/emf/EmfHelper.java | 4 +-
.../provider/EmfResourcesFactoryReader.java | 219 ++++++++++
.../model/emf/provider/OptionProvider.java | 32 ++
.../model/emf/provider/ResourceHandler.java | 40 ++
.../model/emf/provider/ResourceOption.java | 59 +++
.../org.talend.core.repository/plugin.xml | 15 +
.../model/AbstractEMFRepositoryFactory.java | 11 +-
.../model/ProductValuesResourceHandler.java | 70 +++
.../model/ProxyRepositoryFactory.java | 12 +-
.../model/ResourceHandlerOptionProvider.java | 92 ++++
.../listeners/AbstractJobDeleteListener.java | 6 +-
.../repository/utils/XmiResourceManager.java | 13 +
.../META-INF/MANIFEST.MF | 1 +
.../AbstractHadoopConnectionCreator.java | 3 -
.../model/repository/IRepositoryObject.java | 8 +
.../model/repository/RepositoryObject.java | 14 +-
.../repository/RepositoryViewObject.java | 54 ++-
.../repository/item/ItemProductKeys.java | 46 ++
.../item/ItemProductValuesHelper.java | 241 +++++++++++
.../core/runtime/util/ItemDateParser.java | 69 +++
.../talend/core/service/IRemoteService.java | 13 +-
.../org/talend/core/utils/RegistryReader.java | 195 +--------
.../codegen/AbstractRoutineSynchronizer.java | 49 ++-
.../check/AbsMigrationCheckHandler.java | 6 +-
.../runprocess/ProcessorUtilities.java | 6 +-
.../ui/wizard/AbstractNamedWizardPage.java | 33 +-
.../ui/wizard/PropertiesWizardPage.java | 21 +-
.../migrationtool/MigrationToolService.java | 28 ++
.../core/model/properties/Property.java | 197 +++++----
.../DynamicContentProvider.java | 2 +-
.../wizard/imports/ImportItemsWizardPage.java | 13 +-
.../handlers/ImportExportHandlersManager.java | 16 +-
.../handlers/model/ImportItem.java | 46 +-
.../model/LocalRepositoryFactory.java | 52 ++-
.../item/ItemProductValuesHelperTest.java | 408 ++++++++++++++++++
40 files changed, 2082 insertions(+), 445 deletions(-)
create mode 100644 main/plugins/org.talend.commons.runtime/plugin.xml
create mode 100644 main/plugins/org.talend.commons.runtime/schema/emfResourcesProvider.exsd
create mode 100644 main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/extension/ExtensionRegistryReader.java
create mode 100644 main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/EmfResourcesFactoryReader.java
create mode 100644 main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/OptionProvider.java
create mode 100644 main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/ResourceHandler.java
create mode 100644 main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/ResourceOption.java
create mode 100644 main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/ProductValuesResourceHandler.java
create mode 100644 main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/ResourceHandlerOptionProvider.java
create mode 100644 main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/runtime/repository/item/ItemProductKeys.java
create mode 100644 main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/runtime/repository/item/ItemProductValuesHelper.java
create mode 100644 main/plugins/org.talend.core.runtime/src/main/java/org/talend/core/runtime/util/ItemDateParser.java
create mode 100644 test/plugins/org.talend.core.runtime.test/src/org/talend/core/runtime/repository/item/ItemProductValuesHelperTest.java
diff --git a/main/plugins/org.talend.commons.runtime/META-INF/MANIFEST.MF b/main/plugins/org.talend.commons.runtime/META-INF/MANIFEST.MF
index 4ca6cc0d27..d1fd311a88 100644
--- a/main/plugins/org.talend.commons.runtime/META-INF/MANIFEST.MF
+++ b/main/plugins/org.talend.commons.runtime/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Common Runtime Plug-in
-Bundle-SymbolicName: org.talend.commons.runtime
+Bundle-SymbolicName: org.talend.commons.runtime;singleton:=true
Bundle-Version: 7.0.1.qualifier
Require-Bundle: org.apache.log4j;visibility:=reexport,
org.apache.commons.beanutils,
@@ -18,9 +18,11 @@ Export-Package: org.talend.commons,
org.talend.commons.i18n,
org.talend.commons.i18n.internal,
org.talend.commons.runtime.debug,
+ org.talend.commons.runtime.extension,
org.talend.commons.runtime.helper,
org.talend.commons.runtime.model.components,
org.talend.commons.runtime.model.emf,
+ org.talend.commons.runtime.model.emf.provider,
org.talend.commons.runtime.model.expressionbuilder,
org.talend.commons.runtime.model.repository,
org.talend.commons.runtime.service,
diff --git a/main/plugins/org.talend.commons.runtime/build.properties b/main/plugins/org.talend.commons.runtime/build.properties
index 43959b9f98..626db71ad5 100644
--- a/main/plugins/org.talend.commons.runtime/build.properties
+++ b/main/plugins/org.talend.commons.runtime/build.properties
@@ -7,6 +7,8 @@ bin.includes = META-INF/,\
fakejdbc_driver.jar,\
modes/,\
talend.properties,\
- dist/
+ dist/,\
+ plugin.xml,\
+ schema/
jars.compile.order = .,\
dist/org.talend.commons.runtime.jar
diff --git a/main/plugins/org.talend.commons.runtime/plugin.xml b/main/plugins/org.talend.commons.runtime/plugin.xml
new file mode 100644
index 0000000000..9935cb50e3
--- /dev/null
+++ b/main/plugins/org.talend.commons.runtime/plugin.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/main/plugins/org.talend.commons.runtime/schema/emfResourcesProvider.exsd b/main/plugins/org.talend.commons.runtime/schema/emfResourcesProvider.exsd
new file mode 100644
index 0000000000..4380d36743
--- /dev/null
+++ b/main/plugins/org.talend.commons.runtime/schema/emfResourcesProvider.exsd
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+
+ [Enter description of this extension point.]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ the override id
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ the override id
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ resource handler for preLoad, preSave, postLoad, postSave.
+
+
+
+
+
+
+ the override id
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [Enter the first release in which this extension point appears.]
+
+
+
+
+
+
+
+
+ [Enter extension point usage example here.]
+
+
+
+
+
+
+
+
+ [Enter API information here.]
+
+
+
+
+
+
+
+
+ [Enter information about supplied implementation of this extension point.]
+
+
+
+
+
diff --git a/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/extension/ExtensionRegistryReader.java b/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/extension/ExtensionRegistryReader.java
new file mode 100644
index 0000000000..feaab67d8d
--- /dev/null
+++ b/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/extension/ExtensionRegistryReader.java
@@ -0,0 +1,222 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2017 Talend Inc. - www.talend.com
+//
+// This source code is available under agreement available at
+// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
+//
+// You should have received a copy of the agreement
+// along with this program; if not, write to Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.commons.runtime.extension;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.Platform;
+
+/**
+ * Template implementation of a registry reader that creates objects representing registry contents. Typically, an
+ * extension contains one element, but this reader handles multiple elements per extension.
+ *
+ * To start reading the extensions from the registry for an extension point, call the method readRegistry.
+ *
+ * To read children of an IConfigurationElement, call the method readElementChildren from your
+ * implementation of the method readElement, as it will not be done by default.
+ *
+ */
+public abstract class ExtensionRegistryReader {
+
+ private static Logger log = Logger.getLogger(ExtensionRegistryReader.class);
+
+ protected static final String TAG_DESCRIPTION = "description"; //$NON-NLS-1$
+
+ private boolean isInitialized;
+
+ private final String extensionPointId;
+
+ private final String pluginId;
+
+ private final IExtensionRegistry registry;
+
+ /**
+ * DOC sgandon class global comment. Detailled comment
+ *
+ * $Id: talend.epf 55206 2011-02-15 17:32:14Z mhirt $
+ *
+ */
+ public abstract class RegistrySafeRunnable implements ISafeRunnable {
+
+ @Override
+ public void handleException(Throwable exception) {
+ log.error("error reading extention registry", exception); //$NON-NLS-1$
+
+ }
+ }
+
+ /**
+ * The constructor.
+ */
+ protected ExtensionRegistryReader(String aPluginId, String anExtensionPoint) {
+ this.registry = Platform.getExtensionRegistry();
+ this.pluginId = aPluginId;
+ this.extensionPointId = anExtensionPoint;
+ }
+
+ /**
+ * This method extracts description as a subelement of the given element.
+ *
+ * @return description string if defined, or empty string if not.
+ */
+ protected String getDescription(IConfigurationElement config) {
+ IConfigurationElement[] children = config.getChildren(TAG_DESCRIPTION);
+ if (children.length >= 1) {
+ return children[0].getValue();
+ }
+ return "";//$NON-NLS-1$
+ }
+
+ /**
+ * Logs the error in the workbench log using the provided text and the information in the configuration element.
+ */
+ protected static void logError(IConfigurationElement element, String text) {
+ IExtension extension = element.getDeclaringExtension();
+ StringBuffer buf = new StringBuffer();
+ buf.append("Plugin " + extension.getNamespaceIdentifier() + ", extension " + extension.getExtensionPointUniqueIdentifier());//$NON-NLS-2$//$NON-NLS-1$
+ buf.append("\n" + text);//$NON-NLS-1$
+ logError(0, buf.toString(), null);
+ }
+
+ /*
+ * Record an error against this plugin's log.
+ *
+ * @param aCode
+ *
+ * @param aMessage
+ *
+ * @param anException
+ */
+ public static void logError(int aCode, String aMessage, Throwable anException) {
+ // Bundle bundle = FrameworkUtil.getBundle(RegistryReader.class);
+ log.log(Level.toLevel(aCode), aMessage, anException);
+ }
+
+ /**
+ * Logs a very common registry error when a required attribute is missing.
+ */
+ protected static void logMissingAttribute(IConfigurationElement element, String attributeName) {
+ logError(element, "Required attribute '" + attributeName + "' not defined");//$NON-NLS-2$//$NON-NLS-1$
+ }
+
+ /**
+ * Logs a very common registry error when a required child is missing.
+ */
+ protected static void logMissingElement(IConfigurationElement element, String elementName) {
+ logError(element, "Required sub element '" + elementName + "' not defined");//$NON-NLS-2$//$NON-NLS-1$
+ }
+
+ /**
+ * Logs a registry error when the configuration element is unknown.
+ */
+ protected static void logUnknownElement(IConfigurationElement element) {
+ logError(element, "Unknown extension tag found: " + element.getName());//$NON-NLS-1$
+ }
+
+ /**
+ * Apply a reproducable order to the list of extensions provided, such that the order will not change as extensions
+ * are added or removed.
+ */
+ protected IExtension[] orderExtensions(IExtension[] extensions) {
+ // By default, the order is based on plugin id sorted
+ // in ascending order. The order for a plugin providing
+ // more than one extension for an extension point is
+ // dependent in the order listed in the XML file.
+ IExtension[] sortedExtension = new IExtension[extensions.length];
+ System.arraycopy(extensions, 0, sortedExtension, 0, extensions.length);
+ Comparator comparer = new Comparator() {
+
+ @Override
+ public int compare(IExtension arg0, IExtension arg1) {
+ String s1 = arg0.getNamespaceIdentifier();
+ String s2 = arg1.getNamespaceIdentifier();
+ return s1.compareToIgnoreCase(s2);
+ }
+ };
+ Collections.sort(Arrays.asList(sortedExtension), comparer);
+ return sortedExtension;
+ }
+
+ /**
+ * Implement this method to read element's attributes. If children should also be read, then implementor is
+ * responsible for calling readElementChildren. Implementor is also responsible for logging missing
+ * attributes.
+ *
+ * @return true if element was recognized, false if not.
+ */
+ protected abstract boolean readElement(IConfigurationElement element);
+
+ /**
+ * Read the element's children. This is called by the subclass' readElement method when it wants to read the
+ * children of the element.
+ */
+ protected void readElementChildren(IConfigurationElement element) {
+ readElements(element.getChildren());
+ }
+
+ /**
+ * Read each element one at a time by calling the subclass implementation of readElement.
+ *
+ * Logs an error if the element was not recognized.
+ */
+ protected void readElements(IConfigurationElement[] elements) {
+ for (int i = 0; i < elements.length; i++) {
+ if (!readElement(elements[i])) {
+ logUnknownElement(elements[i]);
+ }
+ }
+ }
+
+ /**
+ * Read one extension by looping through its configuration elements.
+ */
+ protected void readExtension(IExtension extension) {
+ readElements(extension.getConfigurationElements());
+ }
+
+ /**
+ * Start the registry reading process using the supplied plugin ID and extension point.
+ */
+ public void readRegistry() {
+ if (isInitialized) {
+ return;
+ }
+ synchronized (this) {
+ if (!isInitialized) {
+ IExtensionPoint point = registry.getExtensionPoint(pluginId, extensionPointId);
+ if (point == null) {
+ point = registry.getExtensionPoint(extensionPointId);
+ if (point == null) {
+ return;
+ }
+ }
+ IExtension[] extensions = point.getExtensions();
+ extensions = orderExtensions(extensions);
+ for (IExtension extension : extensions) {
+ readExtension(extension);
+ }
+ isInitialized = true;
+ }
+
+ }
+ }
+}
diff --git a/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/EmfHelper.java b/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/EmfHelper.java
index fefa3df155..b955f37d22 100644
--- a/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/EmfHelper.java
+++ b/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/EmfHelper.java
@@ -16,7 +16,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -40,6 +39,7 @@ import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.eclipse.emf.ecore.xmi.impl.XMLResourceFactoryImpl;
import org.talend.commons.exception.PersistenceException;
+import org.talend.commons.runtime.model.emf.provider.EmfResourcesFactoryReader;
/***/
public class EmfHelper {
@@ -206,8 +206,8 @@ public class EmfHelper {
if (resource.getURI() == null) {
return;
}
+ Map options = EmfResourcesFactoryReader.INSTANCE.getSaveOptions(resource);
- HashMap options = new HashMap(2);
options.put(XMLResource.OPTION_ENCODING, "UTF-8"); //$NON-NLS-1$
options.put(XMLResource.OPTION_ESCAPE_USING_CDATA, Boolean.TRUE);
try {
diff --git a/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/EmfResourcesFactoryReader.java b/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/EmfResourcesFactoryReader.java
new file mode 100644
index 0000000000..19ea456d30
--- /dev/null
+++ b/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/EmfResourcesFactoryReader.java
@@ -0,0 +1,219 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2017 Talend Inc. - www.talend.com
+//
+// This source code is available under agreement available at
+// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
+//
+// You should have received a copy of the agreement
+// along with this program; if not, write to Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.commons.runtime.model.emf.provider;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.SafeRunner;
+import org.talend.commons.CommonsPlugin;
+import org.talend.commons.runtime.extension.ExtensionRegistryReader;
+
+/**
+ * DOC ggu class global comment. Detailled comment
+ */
+public class EmfResourcesFactoryReader extends ExtensionRegistryReader {
+
+ public static final EmfResourcesFactoryReader INSTANCE = new EmfResourcesFactoryReader();
+
+ /*
+ * id==> bean
+ */
+ private Map saveOptionsBeans = new HashMap();
+
+ private Map loadOptionsBeans = new HashMap();
+
+ private Map resourceHandlerBeans = new HashMap();
+
+ /*
+ * id ==> provider
+ */
+ private Map saveOptionsProviders = new HashMap();
+
+ private Map loadOptionsProviders = new HashMap();
+
+ private Map resourceHandlers = new HashMap();
+
+ class ExtensionBean {
+
+ String id, description, overrideId;
+ }
+
+ class OptionProviderBean extends ExtensionBean {
+
+ OptionProvider provider;
+ }
+
+ class ResourceHandlerBean extends ExtensionBean {
+
+ ResourceHandler handler;
+ }
+
+ private EmfResourcesFactoryReader() {
+ super(CommonsPlugin.PLUGIN_ID, "emfResourcesProvider"); //$NON-NLS-1$
+ init();
+ }
+
+ void init() {
+ readRegistry();
+
+ cleanOverrideIdsForOption(saveOptionsProviders, saveOptionsBeans);
+ cleanOverrideIdsForOption(loadOptionsProviders, loadOptionsBeans);
+ cleanOverrideIdsForHandler(resourceHandlers, resourceHandlerBeans);
+ }
+
+ private void cleanOverrideIdsForOption(Map optionProviders,
+ Map extensionMap) {
+ Map withoutOverrideMap = cleanOverrideIds(extensionMap);
+ for (Map.Entry entry : withoutOverrideMap.entrySet()) {
+ ExtensionBean value = entry.getValue();
+ if (value instanceof OptionProviderBean) {
+ final OptionProvider optionProvider = ((OptionProviderBean) value).provider;
+ optionProviders.put(entry.getKey(), optionProvider);
+ }
+ }
+ }
+
+ private void cleanOverrideIdsForHandler(Map handlers,
+ Map extensionMap) {
+ Map withoutOverrideMap = cleanOverrideIds(extensionMap);
+ for (Map.Entry entry : withoutOverrideMap.entrySet()) {
+ ExtensionBean value = entry.getValue();
+ if (value instanceof ResourceHandlerBean) {
+ final ResourceHandler optionProvider = ((ResourceHandlerBean) value).handler;
+ handlers.put(entry.getKey(), optionProvider);
+ }
+ }
+ }
+
+ private Map cleanOverrideIds(Map extensionMap) {
+ Set ids = new HashSet();
+ Map withoutOverrideMap = new HashMap<>(extensionMap);
+
+ for (Map.Entry e : withoutOverrideMap.entrySet()) {
+ final String overrideId = e.getValue().overrideId;
+ if (overrideId != null) {
+ ids.add(overrideId);
+ }
+ }
+
+ // remove override ids
+ final Iterator removediterator = withoutOverrideMap.keySet().iterator();
+ while (removediterator.hasNext()) {
+ if (ids.contains(removediterator.next())) {
+ removediterator.remove();
+ }
+ }
+
+ return withoutOverrideMap;
+ }
+
+ public Map getSaveOptions(Object resource) {
+ Map saveOptions = new HashMap();
+ for (Map.Entry entry : saveOptionsProviders.entrySet()) {
+ final OptionProvider provider = entry.getValue();
+ if (provider.checkSave(resource)) {
+ saveOptions.put(provider.getName(), provider.getValue());
+ }
+ }
+ return saveOptions;
+ }
+
+ public Map getLoadOptions(Object resource) {
+ Map loadOptions = new HashMap();
+ for (Map.Entry entry : loadOptionsProviders.entrySet()) {
+ final OptionProvider provider = entry.getValue();
+ if (provider.checkLoad(resource)) {
+ loadOptions.put(provider.getName(), provider.getValue());
+ }
+ }
+ return loadOptions;
+ }
+
+ public Map getSaveOptionsProviders() {
+ return saveOptionsProviders;
+ }
+
+ public boolean existedSaveOption(ResourceOption option) {
+ return getSaveOptionsProviders().containsKey(option.getName());
+ }
+
+ public Map getLoadOptionsProviders() {
+ return loadOptionsProviders;
+ }
+
+ public ResourceHandler[] getResourceHandlers() {
+ return resourceHandlers.values().toArray(new ResourceHandler[resourceHandlers.size()]);
+ }
+
+ @Override
+ protected boolean readElement(final IConfigurationElement element) {
+ if ("saveOption".equals(element.getName())) { //$NON-NLS-1$
+ SafeRunner.run(new RegistrySafeRunnable() {
+
+ @Override
+ public void run() throws Exception {
+ createProvider(saveOptionsBeans, element);
+ }
+ });
+ }
+ if ("loadOption".equals(element.getName())) { //$NON-NLS-1$
+ SafeRunner.run(new RegistrySafeRunnable() {
+
+ @Override
+ public void run() throws Exception {
+ createProvider(loadOptionsBeans, element);
+ }
+ });
+ }
+ if ("resourceHandler".equals(element.getName())) { //$NON-NLS-1$
+ SafeRunner.run(new RegistrySafeRunnable() {
+
+ @Override
+ public void run() throws Exception {
+ String id = element.getAttribute("id"); //$NON-NLS-1$
+ String description = element.getAttribute("description"); //$NON-NLS-1$
+ String overrideId = element.getAttribute("override"); //$NON-NLS-1$
+ ResourceHandler handler = (ResourceHandler) element.createExecutableExtension("handler");//$NON-NLS-1$
+ ResourceHandlerBean bean = new ResourceHandlerBean();
+ bean.id = id;
+ bean.description = description;
+ bean.overrideId = overrideId;
+ bean.handler = handler;
+ resourceHandlerBeans.put(id, bean);
+
+ }
+ });
+ }
+ return false;
+ }
+
+ private void createProvider(Map map, IConfigurationElement element) throws CoreException {
+ String id = element.getAttribute("id"); //$NON-NLS-1$
+ String description = element.getAttribute("description"); //$NON-NLS-1$
+ String overrideId = element.getAttribute("override"); //$NON-NLS-1$
+ OptionProvider provider = (OptionProvider) element.createExecutableExtension("provider");//$NON-NLS-1$
+ OptionProviderBean bean = new OptionProviderBean();
+ bean.id = id;
+ bean.description = description;
+ bean.overrideId = overrideId;
+ bean.provider = provider;
+ map.put(id, bean);
+ }
+
+}
diff --git a/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/OptionProvider.java b/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/OptionProvider.java
new file mode 100644
index 0000000000..9899518127
--- /dev/null
+++ b/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/OptionProvider.java
@@ -0,0 +1,32 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2017 Talend Inc. - www.talend.com
+//
+// This source code is available under agreement available at
+// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
+//
+// You should have received a copy of the agreement
+// along with this program; if not, write to Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.commons.runtime.model.emf.provider;
+
+/**
+ * DOC ggu class global comment. Detailled comment
+ */
+public abstract class OptionProvider {
+
+ public abstract String getName();
+
+ public abstract Object getValue();
+
+ public boolean checkSave(Object resource) {
+ return true; // nothing to check by default
+ }
+
+ public boolean checkLoad(Object resource) {
+ return true; // nothing to check by default
+ }
+
+}
diff --git a/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/ResourceHandler.java b/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/ResourceHandler.java
new file mode 100644
index 0000000000..26957a7948
--- /dev/null
+++ b/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/ResourceHandler.java
@@ -0,0 +1,40 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2017 Talend Inc. - www.talend.com
+//
+// This source code is available under agreement available at
+// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
+//
+// You should have received a copy of the agreement
+// along with this program; if not, write to Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.commons.runtime.model.emf.provider;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Map;
+
+/**
+ * DOC ggu class global comment. Detailled comment
+ */
+public abstract class ResourceHandler {
+
+ public void preLoad(Object resource, InputStream inputStream, Map, ?> options) {
+ // nothing to do by default
+ }
+
+ public void postLoad(Object resource, InputStream inputStream, Map, ?> options) {
+ // nothing to do by default
+ }
+
+ public void preSave(Object resource, OutputStream outputStream, Map, ?> options) {
+ // nothing to do by default
+ }
+
+ public void postSave(Object resource, OutputStream outputStream, Map, ?> options) {
+ // nothing to do by default
+ }
+
+}
diff --git a/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/ResourceOption.java b/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/ResourceOption.java
new file mode 100644
index 0000000000..62939410fb
--- /dev/null
+++ b/main/plugins/org.talend.commons.runtime/src/org/talend/commons/runtime/model/emf/provider/ResourceOption.java
@@ -0,0 +1,59 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2017 Talend Inc. - www.talend.com
+//
+// This source code is available under agreement available at
+// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
+//
+// You should have received a copy of the agreement
+// along with this program; if not, write to Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.commons.runtime.model.emf.provider;
+
+/**
+ * DOC ggu class global comment. Detailled comment
+ */
+public enum ResourceOption {
+
+ CREATATION,
+ MIGRATION,
+ ITEM_IMPORTATION,
+ DEMO_IMPORTATION, ;
+
+ private final OptionProvider provider;
+
+ private ResourceOption() {
+ this(Boolean.TRUE);
+ }
+
+ private ResourceOption(final Object value) {
+ this.provider = new OptionProvider() {
+
+ @Override
+ public String getName() {
+ return getName0();
+ }
+
+ @Override
+ public Object getValue() {
+ return value;
+ }
+
+ };
+ }
+
+ public OptionProvider getProvider() {
+ return provider;
+ }
+
+ public String getName() {
+ return getName0();
+ }
+
+ private String getName0() {
+ return ("option_" + name()).toLowerCase();
+ }
+
+}
diff --git a/main/plugins/org.talend.core.repository/plugin.xml b/main/plugins/org.talend.core.repository/plugin.xml
index 457bcc57f0..89cdb5c830 100644
--- a/main/plugins/org.talend.core.repository/plugin.xml
+++ b/main/plugins/org.talend.core.repository/plugin.xml
@@ -699,6 +699,21 @@
+
+
+
+
+
+
+
+
diff --git a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/AbstractEMFRepositoryFactory.java b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/AbstractEMFRepositoryFactory.java
index 2161df4be2..384f0be990 100644
--- a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/AbstractEMFRepositoryFactory.java
+++ b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/AbstractEMFRepositoryFactory.java
@@ -274,8 +274,8 @@ public abstract class AbstractEMFRepositoryFactory extends AbstractRepositoryFac
}
for (IRepositoryViewObject current : list) {
- if ((name.equalsIgnoreCase(current.getProperty().getLabel()) || name.equalsIgnoreCase(current.getProperty().getDisplayName()))
- && item.getProperty().getId() != current.getProperty().getId()) {
+ if ((name.equalsIgnoreCase(current.getProperty().getLabel()) || name.equalsIgnoreCase(current.getProperty()
+ .getDisplayName())) && item.getProperty().getId() != current.getProperty().getId()) {
// To check SQLPattern in same path. see bug 0005038: unable to add a SQLPattern into repository.
if (!isAllowMultipleName || current.getProperty().getItem().getState().getPath().equals(path)) {
return false;
@@ -729,6 +729,7 @@ public abstract class AbstractEMFRepositoryFactory extends AbstractRepositoryFac
if (!version.equals(project.getEmfProject().getProductVersion())) {
project.getEmfProject().setProductVersion(version);
project.getEmfProject().getFolders().clear();
+ saveProject(project);
}
}
// saveProject();
@@ -896,7 +897,7 @@ public abstract class AbstractEMFRepositoryFactory extends AbstractRepositoryFac
getAllVersions(project, property, allVersion);
for (IRepositoryViewObject repositoryObject : allVersion) {
Property uptodateProperty = repositoryObject.getProperty();
- if (uptodateProperty!=null&&uptodateProperty.getVersion().equals(property.getVersion())) {
+ if (uptodateProperty != null && uptodateProperty.getVersion().equals(property.getVersion())) {
return uptodateProperty;
}
}
@@ -1031,8 +1032,8 @@ public abstract class AbstractEMFRepositoryFactory extends AbstractRepositoryFac
@Override
public void afterLogon(IProgressMonitor monitor) {
if (GlobalServiceRegister.getDefault().isServiceRegistered(IRunProcessService.class)) {
- IRunProcessService runProcessService = (IRunProcessService) GlobalServiceRegister.getDefault()
- .getService(IRunProcessService.class);
+ IRunProcessService runProcessService = (IRunProcessService) GlobalServiceRegister.getDefault().getService(
+ IRunProcessService.class);
try {
runProcessService.getTalendProcessJavaProject().cleanMavenFiles(monitor);
TimeMeasure.step("logOnProject", "clean Maven files"); //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/ProductValuesResourceHandler.java b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/ProductValuesResourceHandler.java
new file mode 100644
index 0000000000..c933d5f638
--- /dev/null
+++ b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/ProductValuesResourceHandler.java
@@ -0,0 +1,70 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2017 Talend Inc. - www.talend.com
+//
+// This source code is available under agreement available at
+// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
+//
+// You should have received a copy of the agreement
+// along with this program; if not, write to Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.core.repository.model;
+
+import java.io.OutputStream;
+import java.util.Date;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.talend.commons.runtime.model.emf.provider.ResourceHandler;
+import org.talend.commons.runtime.model.emf.provider.ResourceOption;
+import org.talend.core.model.properties.PropertiesPackage;
+import org.talend.core.model.properties.Property;
+import org.talend.core.runtime.repository.item.ItemProductValuesHelper;
+
+/**
+ * DOC ggu class global comment. Detailled comment
+ */
+public class ProductValuesResourceHandler extends ResourceHandler {
+
+ @Override
+ public void preSave(Object resource, OutputStream outputStream, Map, ?> options) {
+ if (resource instanceof XMLResource) {
+ final Property prop = (Property) EcoreUtil.getObjectByType(((XMLResource) resource).getContents(),
+ PropertiesPackage.eINSTANCE.getProperty());
+ if (prop != null) {
+ /*
+ * need ignore, when:
+ *
+ * 1) import, will do create also, and created and modified keys will be set in migration task. and set
+ * the import date in ItemProductValuesHelper. Else, if existed already nothing to do.
+ *
+ * 2) migrate in 2 cases, when import, will do point 1. when logon, just do migration task
+ */
+
+ if (!options.containsKey(ResourceOption.ITEM_IMPORTATION.getName())
+ && !options.containsKey(ResourceOption.DEMO_IMPORTATION.getName())
+ && !options.containsKey(ResourceOption.MIGRATION.getName())) {
+
+ Date saveDate = new Date();
+ if (options.containsKey(ResourceOption.CREATATION.getName())) {
+ ItemProductValuesHelper.setValuesWhenCreate(prop, saveDate);
+ }
+
+ // if no any keys, do migration too.
+ // currently, especially when copy/paste items, if no migration task to do
+ ItemProductValuesHelper.setValuesWhenMigrate(prop);
+
+ // generally, work for modification in studio
+ ItemProductValuesHelper.setValuesWhenModify(prop, saveDate);
+ }
+
+ // always remove the date when save
+ prop.setCreationDate(null);
+ prop.setModificationDate(null);
+ }
+ }
+ }
+}
diff --git a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/ProxyRepositoryFactory.java b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/ProxyRepositoryFactory.java
index de20419378..0b1e0bd727 100644
--- a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/ProxyRepositoryFactory.java
+++ b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/ProxyRepositoryFactory.java
@@ -121,7 +121,9 @@ import org.talend.core.repository.utils.RepositoryPathProvider;
import org.talend.core.repository.utils.XmiResourceManager;
import org.talend.core.runtime.CoreRuntimePlugin;
import org.talend.core.runtime.process.ITalendProcessJavaProject;
+import org.talend.core.runtime.repository.item.ItemProductKeys;
import org.talend.core.runtime.services.IMavenUIService;
+import org.talend.core.runtime.util.ItemDateParser;
import org.talend.core.runtime.util.JavaHomeUtil;
import org.talend.core.service.ICoreUIService;
import org.talend.cwm.helper.SubItemHelper;
@@ -135,7 +137,6 @@ import org.talend.repository.documentation.ERepositoryActionName;
import org.talend.repository.model.IProxyRepositoryFactory;
import org.talend.repository.model.RepositoryConstants;
import org.talend.utils.io.FilesUtils;
-
import orgomg.cwm.objectmodel.core.ModelElement;
/**
@@ -781,7 +782,9 @@ public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
IRepositoryViewObject object = new RepositoryObject(objToDelete.getProperty());
boolean isExtendPoint = false;
- fireRepositoryPropertyChange(ERepositoryActionName.DELETE_FOREVER.getName(), null, object);
+ if (isFullLogonFinished()) {
+ fireRepositoryPropertyChange(ERepositoryActionName.DELETE_FOREVER.getName(), null, object);
+ }
ERepositoryObjectType repositoryObjectType = object.getRepositoryObjectType();
ICoreService coreService = getCoreService();
@@ -816,7 +819,7 @@ public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
}
}
- if (repositoryObjectType == ERepositoryObjectType.PROCESS) {
+ if (repositoryObjectType == ERepositoryObjectType.PROCESS && isFullLogonFinished()) {
if (GlobalServiceRegister.getDefault().isServiceRegistered(IESBService.class)) {
IESBService service = (IESBService) GlobalServiceRegister.getDefault().getService(IESBService.class);
if (service != null) {
@@ -1044,7 +1047,6 @@ public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
return this.repositoryFactoryFromProvider.getAllVersion(project, id, avoidSaveProject);
}
-
@Override
public List getAllVersion(Project project, String id, String folderPath, ERepositoryObjectType type)
throws PersistenceException {
@@ -1515,7 +1517,7 @@ public final class ProxyRepositoryFactory implements IProxyRepositoryFactory {
if (getStatus(obj) == ERepositoryStatus.LOCK_BY_USER || obj instanceof JobletDocumentationItem
|| obj instanceof JobDocumentationItem) {
Date commitDate = obj.getState().getCommitDate();
- Date modificationDate = obj.getProperty().getModificationDate();
+ Date modificationDate = ItemDateParser.parseAdditionalDate(obj.getProperty(), ItemProductKeys.DATE.getModifiedKey());
if (modificationDate == null || commitDate == null || modificationDate.before(commitDate)) {
boolean unlocked = this.repositoryFactoryFromProvider.unlock(obj);
if (unlocked) {
diff --git a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/ResourceHandlerOptionProvider.java b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/ResourceHandlerOptionProvider.java
new file mode 100644
index 0000000000..4bff551e35
--- /dev/null
+++ b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/ResourceHandlerOptionProvider.java
@@ -0,0 +1,92 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2017 Talend Inc. - www.talend.com
+//
+// This source code is available under agreement available at
+// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
+//
+// You should have received a copy of the agreement
+// along with this program; if not, write to Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.core.repository.model;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.talend.commons.runtime.model.emf.provider.EmfResourcesFactoryReader;
+import org.talend.commons.runtime.model.emf.provider.OptionProvider;
+import org.talend.commons.runtime.model.emf.provider.ResourceHandler;
+
+/**
+ * DOC ggu class global comment. Detailled comment
+ */
+public class ResourceHandlerOptionProvider extends OptionProvider {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.runtime.model.emf.provider.EOptionProvider#getName()
+ */
+ @Override
+ public String getName() {
+ return XMLResource.OPTION_RESOURCE_HANDLER;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.talend.commons.runtime.model.emf.provider.EOptionProvider#getValue()
+ */
+ @Override
+ public Object getValue() {
+ return new XMLResource.ResourceHandler() {
+
+ ResourceHandler[] handlers;
+
+ ResourceHandler[] getResourceHandlers() {
+ if (handlers == null) {
+ synchronized (ResourceHandlerOptionProvider.class) {
+ if (handlers == null) {
+ handlers = EmfResourcesFactoryReader.INSTANCE.getResourceHandlers();
+ }
+ }
+ }
+ return handlers;
+ }
+
+ @Override
+ public void preLoad(XMLResource resource, InputStream inputStream, Map, ?> options) {
+ for (ResourceHandler handler : getResourceHandlers()) {
+ handler.preLoad(resource, inputStream, options);
+ }
+ }
+
+ @Override
+ public void postLoad(XMLResource resource, InputStream inputStream, Map, ?> options) {
+ for (ResourceHandler handler : getResourceHandlers()) {
+ handler.postLoad(resource, inputStream, options);
+ }
+ }
+
+ @Override
+ public void preSave(XMLResource resource, OutputStream outputStream, Map, ?> options) {
+ for (ResourceHandler handler : getResourceHandlers()) {
+ handler.preSave(resource, outputStream, options);
+ }
+ }
+
+ @Override
+ public void postSave(XMLResource resource, OutputStream outputStream, Map, ?> options) {
+ for (ResourceHandler handler : getResourceHandlers()) {
+ handler.postSave(resource, outputStream, options);
+ }
+
+ }
+
+ };
+ }
+}
diff --git a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/listeners/AbstractJobDeleteListener.java b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/listeners/AbstractJobDeleteListener.java
index caa1f0a436..283b191953 100644
--- a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/listeners/AbstractJobDeleteListener.java
+++ b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/model/listeners/AbstractJobDeleteListener.java
@@ -55,7 +55,7 @@ public abstract class AbstractJobDeleteListener implements PropertyChangeListene
protected Project getProject(IRepositoryObject repositoryObject) {
String projectLabel = repositoryObject.getProjectLabel();
Project currentProject = ProjectManager.getInstance().getCurrentProject();
- if (currentProject.getTechnicalLabel().equalsIgnoreCase(projectLabel)) {
+ if (currentProject != null && currentProject.getTechnicalLabel().equalsIgnoreCase(projectLabel)) {
return currentProject;
}
{
@@ -65,8 +65,8 @@ public abstract class AbstractJobDeleteListener implements PropertyChangeListene
*/
// Project project = ProjectManager.getInstance().getProjectFromProjectLabel(projectLabel);
}
- org.talend.core.model.properties.Project emfProject = ProjectManager.getInstance()
- .getProject(repositoryObject.getProperty());
+ org.talend.core.model.properties.Project emfProject = ProjectManager.getInstance().getProject(
+ repositoryObject.getProperty());
Project project = new Project(emfProject);
return project;
}
diff --git a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/XmiResourceManager.java b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/XmiResourceManager.java
index caabf48381..16dcc4b18f 100644
--- a/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/XmiResourceManager.java
+++ b/main/plugins/org.talend.core.repository/src/main/java/org/talend/core/repository/utils/XmiResourceManager.java
@@ -47,6 +47,7 @@ import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.emf.ecore.xmi.impl.XMLParserPoolImpl;
import org.talend.commons.exception.PersistenceException;
import org.talend.commons.runtime.model.emf.EmfHelper;
+import org.talend.commons.runtime.model.emf.provider.EmfResourcesFactoryReader;
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
import org.talend.commons.utils.workbench.resources.ResourceUtils;
import org.talend.core.GlobalServiceRegister;
@@ -148,6 +149,16 @@ public class XmiResourceManager {
}
public Property loadProperty(IResource iResource) {
+ final Map
*
@@ -43,13 +42,12 @@ import org.eclipse.emf.ecore.EObject;
public interface Property extends EObject {
/**
- * Returns the value of the 'Id' attribute.
- *
+ * Returns the value of the 'Id' attribute.
*
- * If the meaning of the 'Id' attribute isn't clear, there really should be more of a description
- * here...
+ * If the meaning of the 'Id' attribute isn't clear, there really should be more of a description here...
*
*
+ *
* @return the value of the 'Id' attribute.
* @see #setId(String)
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_Id()
@@ -69,13 +67,13 @@ public interface Property extends EObject {
void setId(String value);
/**
- * Returns the value of the 'Label' attribute.
- *
+ * Returns the value of the 'Label' attribute.
*
* If the meaning of the 'Label' attribute isn't clear, there really should be more of a description
* here...
*
*
+ *
* @return the value of the 'Label' attribute.
* @see #setLabel(String)
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_Label()
@@ -85,8 +83,9 @@ public interface Property extends EObject {
String getLabel();
/**
- * Sets the value of the '{@link org.talend.core.model.properties.Property#getLabel Label}' attribute.
- *
+ * Sets the value of the '{@link org.talend.core.model.properties.Property#getLabel Label}' attribute.
+ *
* @param value the new value of the 'Label' attribute.
* @see #getLabel()
* @generated
@@ -94,13 +93,13 @@ public interface Property extends EObject {
void setLabel(String value);
/**
- * Returns the value of the 'Purpose' attribute.
- *
+ * Returns the value of the 'Purpose' attribute.
*
* If the meaning of the 'Purpose' attribute isn't clear, there really should be more of a description
* here...
*
*
+ *
* @return the value of the 'Purpose' attribute.
* @see #setPurpose(String)
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_Purpose()
@@ -112,6 +111,7 @@ public interface Property extends EObject {
/**
* Sets the value of the '{@link org.talend.core.model.properties.Property#getPurpose Purpose}' attribute.
*
+ *
* @param value the new value of the 'Purpose' attribute.
* @see #getPurpose()
* @generated
@@ -119,13 +119,13 @@ public interface Property extends EObject {
void setPurpose(String value);
/**
- * Returns the value of the 'Description' attribute.
- *
+ * Returns the value of the 'Description' attribute.
*
- * If the meaning of the 'Description' attribute isn't clear, there really should be more of a
- * description here...
+ * If the meaning of the 'Description' attribute isn't clear, there really should be more of a description
+ * here...
*
*
+ *
* @return the value of the 'Description' attribute.
* @see #setDescription(String)
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_Description()
@@ -135,8 +135,9 @@ public interface Property extends EObject {
String getDescription();
/**
- * Sets the value of the '{@link org.talend.core.model.properties.Property#getDescription Description}' attribute.
- *
+ * Sets the value of the '{@link org.talend.core.model.properties.Property#getDescription Description}'
+ * attribute.
+ *
* @param value the new value of the 'Description' attribute.
* @see #getDescription()
* @generated
@@ -144,63 +145,69 @@ public interface Property extends EObject {
void setDescription(String value);
/**
- * Returns the value of the 'Creation Date' attribute.
- *
+ * Returns the value of the 'Creation Date' attribute.
*
* If the meaning of the 'Creation Date' attribute isn't clear, there really should be more of a
* description here...
*
*
+ *
* @return the value of the 'Creation Date' attribute.
* @see #setCreationDate(Date)
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_CreationDate()
* @model unique="false" required="true"
- * @generated
+ * @generated NOT won't be used any more
*/
+ @Deprecated
Date getCreationDate();
/**
- * Sets the value of the '{@link org.talend.core.model.properties.Property#getCreationDate Creation Date}' attribute.
- *
+ * Sets the value of the '{@link org.talend.core.model.properties.Property#getCreationDate Creation Date}'
+ * attribute.
+ *
* @param value the new value of the 'Creation Date' attribute.
* @see #getCreationDate()
- * @generated
+ * @generated NOT won't be used any more
*/
+ @Deprecated
void setCreationDate(Date value);
/**
- * Returns the value of the 'Modification Date' attribute.
- *
+ * Returns the value of the 'Modification Date' attribute.
*
* If the meaning of the 'Modification Date' attribute isn't clear, there really should be more of a
* description here...
*
*
+ *
* @return the value of the 'Modification Date' attribute.
* @see #setModificationDate(Date)
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_ModificationDate()
* @model unique="false"
- * @generated
+ * @generated NOT won't be used any more
*/
+ @Deprecated
Date getModificationDate();
/**
- * Sets the value of the '{@link org.talend.core.model.properties.Property#getModificationDate Modification Date}' attribute.
- *
+ * Sets the value of the '{@link org.talend.core.model.properties.Property#getModificationDate
+ * Modification Date}' attribute.
+ *
* @param value the new value of the 'Modification Date' attribute.
* @see #getModificationDate()
- * @generated
+ * @generated NOT won't be used any more
*/
+ @Deprecated
void setModificationDate(Date value);
/**
- * Returns the value of the 'Author' reference.
- *
+ * Returns the value of the 'Author' reference.
*
* If the meaning of the 'Author' attribute isn't clear, there really should be more of a description
* here...
*
*
+ *
* @return the value of the 'Author' reference.
* @see #setAuthor(User)
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_Author()
@@ -212,6 +219,7 @@ public interface Property extends EObject {
/**
* Sets the value of the '{@link org.talend.core.model.properties.Property#getAuthor Author}' reference.
*
+ *
* @param value the new value of the 'Author' reference.
* @see #getAuthor()
* @generated
@@ -219,14 +227,14 @@ public interface Property extends EObject {
void setAuthor(User value);
/**
- * Returns the value of the 'Informations' containment reference list.
- * The list contents are of type {@link org.talend.core.model.properties.Information}.
- *
+ * Returns the value of the 'Informations' containment reference list. The list contents are of type
+ * {@link org.talend.core.model.properties.Information}.
*
- * If the meaning of the 'Informations' containment reference list isn't clear,
- * there really should be more of a description here...
+ * If the meaning of the 'Informations' containment reference list isn't clear, there really should be more
+ * of a description here...
*
*
+ *
* @return the value of the 'Informations' containment reference list.
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_Informations()
* @model type="org.talend.core.model.properties.Information" containment="true"
@@ -235,14 +243,14 @@ public interface Property extends EObject {
EList getInformations();
/**
- * Returns the value of the 'Max Information Level' attribute.
- * The literals are from the enumeration {@link org.talend.core.model.properties.InformationLevel}.
- *
+ * Returns the value of the 'Max Information Level' attribute. The literals are from the enumeration
+ * {@link org.talend.core.model.properties.InformationLevel}.
*
- * If the meaning of the 'Max Information Level' attribute isn't clear,
- * there really should be more of a description here...
+ * If the meaning of the 'Max Information Level' attribute isn't clear, there really should be more of a
+ * description here...
*
*
+ *
* @return the value of the 'Max Information Level' attribute.
* @see org.talend.core.model.properties.InformationLevel
* @see #setMaxInformationLevel(InformationLevel)
@@ -253,9 +261,9 @@ public interface Property extends EObject {
InformationLevel getMaxInformationLevel();
/**
- * Sets the value of the '{@link org.talend.core.model.properties.Property#getMaxInformationLevel Max Information Level}' attribute.
- *
- *
+ * Sets the value of the '{@link org.talend.core.model.properties.Property#getMaxInformationLevel
+ * Max Information Level}' attribute.
+ *
* @param value the new value of the 'Max Information Level' attribute.
* @see org.talend.core.model.properties.InformationLevel
* @see #getMaxInformationLevel()
@@ -264,14 +272,14 @@ public interface Property extends EObject {
void setMaxInformationLevel(InformationLevel value);
/**
- * Returns the value of the 'Old Status Code' attribute.
- * The default value is "".
- *
+ * Returns the value of the 'Old Status Code' attribute. The default value is "".
*
- * If the meaning of the 'Old Status Code' attribute isn't clear,
- * there really should be more of a description here...
+ * If the meaning of the 'Old Status Code' attribute isn't clear, there really should be more of a
+ * description here...
*
*
+ *
* @return the value of the 'Old Status Code' attribute.
* @see #setOldStatusCode(String)
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_OldStatusCode()
@@ -281,9 +289,9 @@ public interface Property extends EObject {
String getOldStatusCode();
/**
- * Sets the value of the '{@link org.talend.core.model.properties.Property#getOldStatusCode Old Status Code}' attribute.
- *
- *
+ * Sets the value of the '{@link org.talend.core.model.properties.Property#getOldStatusCode
+ * Old Status Code}' attribute.
+ *
* @param value the new value of the 'Old Status Code' attribute.
* @see #getOldStatusCode()
* @generated
@@ -291,30 +299,30 @@ public interface Property extends EObject {
void setOldStatusCode(String value);
/**
- * Returns the value of the 'Additional Properties' map.
- * The key is of type {@link java.lang.String},
- * and the value is of type {@link java.lang.String},
- *
+ * Returns the value of the 'Additional Properties' map. The key is of type {@link java.lang.String}
+ * , and the value is of type {@link java.lang.String},
*
- * If the meaning of the 'Additional Properties' map isn't clear,
- * there really should be more of a description here...
+ * If the meaning of the 'Additional Properties' map isn't clear, there really should be more of a
+ * description here...
*
*
+ *
* @return the value of the 'Additional Properties' map.
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_AdditionalProperties()
- * @model mapType="org.talend.core.model.properties.AdditionalInfoMap" keyType="java.lang.String" valueType="java.lang.String"
+ * @model mapType="org.talend.core.model.properties.AdditionalInfoMap" keyType="java.lang.String"
+ * valueType="java.lang.String"
* @generated
*/
EMap getAdditionalProperties();
/**
- * Returns the value of the 'Display Name' attribute.
- *
+ * Returns the value of the 'Display Name' attribute.
*
- * If the meaning of the 'Display Name' attribute isn't clear,
- * there really should be more of a description here...
+ * If the meaning of the 'Display Name' attribute isn't clear, there really should be more of a description
+ * here...
*
*
+ *
* @return the value of the 'Display Name' attribute.
* @see #setDisplayName(String)
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_DisplayName()
@@ -324,9 +332,9 @@ public interface Property extends EObject {
String getDisplayName();
/**
- * Sets the value of the '{@link org.talend.core.model.properties.Property#getDisplayName Display Name}' attribute.
- *
- *
+ * Sets the value of the '{@link org.talend.core.model.properties.Property#getDisplayName Display Name}'
+ * attribute.
+ *
* @param value the new value of the 'Display Name' attribute.
* @see #getDisplayName()
* @generated
@@ -334,13 +342,13 @@ public interface Property extends EObject {
void setDisplayName(String value);
/**
- * Returns the value of the 'Version' attribute.
- *
+ * Returns the value of the 'Version' attribute.
*
* If the meaning of the 'Version' attribute isn't clear, there really should be more of a description
* here...
*
*
+ *
* @return the value of the 'Version' attribute.
* @see #setVersion(String)
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_Version()
@@ -352,6 +360,7 @@ public interface Property extends EObject {
/**
* Sets the value of the '{@link org.talend.core.model.properties.Property#getVersion Version}' attribute.
*
+ *
* @param value the new value of the 'Version' attribute.
* @see #getVersion()
* @generated
@@ -359,13 +368,13 @@ public interface Property extends EObject {
void setVersion(String value);
/**
- * Returns the value of the 'Status Code' attribute.
- *
+ * Returns the value of the 'Status Code' attribute.
*
- * If the meaning of the 'Status Code' attribute isn't clear, there really should be more of a
- * description here...
+ * If the meaning of the 'Status Code' attribute isn't clear, there really should be more of a description
+ * here...
*
*
+ *
* @return the value of the 'Status Code' attribute.
* @see #setStatusCode(String)
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_StatusCode()
@@ -375,8 +384,9 @@ public interface Property extends EObject {
String getStatusCode();
/**
- * Sets the value of the '{@link org.talend.core.model.properties.Property#getStatusCode Status Code}' attribute.
- *
+ * Sets the value of the '{@link org.talend.core.model.properties.Property#getStatusCode Status Code}'
+ * attribute.
+ *
* @param value the new value of the 'Status Code' attribute.
* @see #getStatusCode()
* @generated
@@ -384,14 +394,13 @@ public interface Property extends EObject {
void setStatusCode(String value);
/**
- * Returns the value of the 'Item' reference.
- * It is bidirectional and its opposite is '{@link org.talend.core.model.properties.Item#getProperty Property}'.
- *
+ * Returns the value of the 'Item' reference. It is bidirectional and its opposite is '
+ * {@link org.talend.core.model.properties.Item#getProperty Property}'.
*
- * If the meaning of the 'Item' reference isn't clear, there really should be more of a description
- * here...
+ * If the meaning of the 'Item' reference isn't clear, there really should be more of a description here...
*
*
+ *
* @return the value of the 'Item' reference.
* @see #setItem(Item)
* @see org.talend.core.model.properties.PropertiesPackage#getProperty_Item()
diff --git a/main/plugins/org.talend.rcp/src/main/java/org/talend/rcp/intro/contentProvider/DynamicContentProvider.java b/main/plugins/org.talend.rcp/src/main/java/org/talend/rcp/intro/contentProvider/DynamicContentProvider.java
index d48602a8dd..94f1c573b1 100644
--- a/main/plugins/org.talend.rcp/src/main/java/org/talend/rcp/intro/contentProvider/DynamicContentProvider.java
+++ b/main/plugins/org.talend.rcp/src/main/java/org/talend/rcp/intro/contentProvider/DynamicContentProvider.java
@@ -297,7 +297,7 @@ public class DynamicContentProvider extends IntroProvider {
if (modificationDate2 == null) {
modificationDate2 = data[j - 1].getCreationDate();
}
- if (modificationDate.after(modificationDate2)) {
+ if (modificationDate != null && modificationDate2 != null && modificationDate.after(modificationDate2)) {
IRepositoryViewObject temp = data[j - 1];
data[j - 1] = data[j];
data[j] = temp;
diff --git a/main/plugins/org.talend.repository.items.importexport.ui/src/main/java/org/talend/repository/items/importexport/ui/wizard/imports/ImportItemsWizardPage.java b/main/plugins/org.talend.repository.items.importexport.ui/src/main/java/org/talend/repository/items/importexport/ui/wizard/imports/ImportItemsWizardPage.java
index 6aa8e9b5ed..a36d160dc8 100644
--- a/main/plugins/org.talend.repository.items.importexport.ui/src/main/java/org/talend/repository/items/importexport/ui/wizard/imports/ImportItemsWizardPage.java
+++ b/main/plugins/org.talend.repository.items.importexport.ui/src/main/java/org/talend/repository/items/importexport/ui/wizard/imports/ImportItemsWizardPage.java
@@ -67,6 +67,8 @@ import org.eclipse.ui.internal.wizards.datatransfer.TarException;
import org.talend.commons.exception.ExceptionHandler;
import org.talend.commons.exception.LoginException;
import org.talend.commons.exception.PersistenceException;
+import org.talend.commons.runtime.model.emf.provider.EmfResourcesFactoryReader;
+import org.talend.commons.runtime.model.emf.provider.ResourceOption;
import org.talend.commons.runtime.model.repository.ERepositoryStatus;
import org.talend.core.GlobalServiceRegister;
import org.talend.core.PluginChecker;
@@ -1000,9 +1002,16 @@ public class ImportItemsWizardPage extends WizardPage {
}
}
}
- importManager.importItemRecords(monitor, resManager, checkedItemRecords, overwrite,
- nodesBuilder.getAllImportItemRecords(), destinationPath);
+ final ResourceOption importOption = ResourceOption.ITEM_IMPORTATION;
+ try {
+ EmfResourcesFactoryReader.INSTANCE.getSaveOptionsProviders().put(importOption.getName(),
+ importOption.getProvider());
+ importManager.importItemRecords(monitor, resManager, checkedItemRecords, overwrite,
+ nodesBuilder.getAllImportItemRecords(), destinationPath);
+ } finally {
+ EmfResourcesFactoryReader.INSTANCE.getSaveOptionsProviders().remove(importOption.getName());
+ }
Display.getDefault().syncExec(new Runnable() {
@Override
diff --git a/main/plugins/org.talend.repository.items.importexport/src/main/java/org/talend/repository/items/importexport/handlers/ImportExportHandlersManager.java b/main/plugins/org.talend.repository.items.importexport/src/main/java/org/talend/repository/items/importexport/handlers/ImportExportHandlersManager.java
index 51fe940e29..3eee7b69b8 100644
--- a/main/plugins/org.talend.repository.items.importexport/src/main/java/org/talend/repository/items/importexport/handlers/ImportExportHandlersManager.java
+++ b/main/plugins/org.talend.repository.items.importexport/src/main/java/org/talend/repository/items/importexport/handlers/ImportExportHandlersManager.java
@@ -34,6 +34,7 @@ import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
@@ -480,9 +481,18 @@ public class ImportExportHandlersManager {
@Override
public void run(final IProgressMonitor monitor) throws CoreException {
- // pre import
- preImport(monitor, resManager, checkedItemRecords.toArray(new ImportItem[0]), allImportItemRecords);
-
+ try {
+ // pre import
+ preImport(monitor, resManager, checkedItemRecords.toArray(new ImportItem[0]),
+ allImportItemRecords);
+ } catch (IllegalArgumentException e) {
+ if (e.getCause() instanceof OperationCanceledException) {
+ throw e; // if invalid project, with cancel
+ }
+ }
+ if (monitor.isCanceled()) {
+ return;
+ }
final IProxyRepositoryFactory factory = CoreRuntimePlugin.getInstance().getProxyRepositoryFactory();
// bug 10520
diff --git a/main/plugins/org.talend.repository.items.importexport/src/main/java/org/talend/repository/items/importexport/handlers/model/ImportItem.java b/main/plugins/org.talend.repository.items.importexport/src/main/java/org/talend/repository/items/importexport/handlers/model/ImportItem.java
index 508add4f1c..2689750944 100644
--- a/main/plugins/org.talend.repository.items.importexport/src/main/java/org/talend/repository/items/importexport/handlers/model/ImportItem.java
+++ b/main/plugins/org.talend.repository.items.importexport/src/main/java/org/talend/repository/items/importexport/handlers/model/ImportItem.java
@@ -88,6 +88,8 @@ public class ImportItem {
private boolean isSystemItem = false;
+ private boolean ignore = false;
+
public ImportItem(IPath path) {
this.path = path;
}
@@ -138,6 +140,14 @@ public class ImportItem {
return path;
}
+ public boolean isIgnore() {
+ return ignore;
+ }
+
+ public void setIgnore(boolean ignore) {
+ this.ignore = ignore;
+ }
+
public void addError(String message) {
errors.add(message);
}
@@ -148,7 +158,7 @@ public class ImportItem {
public boolean isValid() {
// TODO mhelleboid split validation in two steps to be able to filter a valid item and avoid adding an error
- return errors.isEmpty();
+ return errors.isEmpty() && !isIgnore();
}
/**
@@ -190,27 +200,27 @@ public class ImportItem {
* DOC hcw ImportItem class global comment. Detailled comment
*/
public enum State {
- /**
- * only name existed
- */
- NAME_EXISTED,
+ /**
+ * only name existed
+ */
+ NAME_EXISTED,
- /**
- * only id existed
- */
- ID_EXISTED,
+ /**
+ * only id existed
+ */
+ ID_EXISTED,
- NON_EXISTED,
+ NON_EXISTED,
- /**
- * only one existed item with same name and same id
- */
- NAME_AND_ID_EXISTED,
+ /**
+ * only one existed item with same name and same id
+ */
+ NAME_AND_ID_EXISTED,
- /**
- * one existed item with same name, while another existed item with same id
- */
- NAME_AND_ID_EXISTED_BOTH
+ /**
+ * one existed item with same name, while another existed item with same id
+ */
+ NAME_AND_ID_EXISTED_BOTH
}
public State getState() {
diff --git a/main/plugins/org.talend.repository.localprovider/src/main/java/org/talend/repository/localprovider/model/LocalRepositoryFactory.java b/main/plugins/org.talend.repository.localprovider/src/main/java/org/talend/repository/localprovider/model/LocalRepositoryFactory.java
index 7cac507935..c77dd4afdd 100644
--- a/main/plugins/org.talend.repository.localprovider/src/main/java/org/talend/repository/localprovider/model/LocalRepositoryFactory.java
+++ b/main/plugins/org.talend.repository.localprovider/src/main/java/org/talend/repository/localprovider/model/LocalRepositoryFactory.java
@@ -76,6 +76,8 @@ import org.talend.commons.exception.ExceptionHandler;
import org.talend.commons.exception.LoginException;
import org.talend.commons.exception.PersistenceException;
import org.talend.commons.exception.ResourceNotFoundException;
+import org.talend.commons.runtime.model.emf.provider.EmfResourcesFactoryReader;
+import org.talend.commons.runtime.model.emf.provider.ResourceOption;
import org.talend.commons.runtime.model.repository.ERepositoryStatus;
import org.talend.commons.ui.runtime.image.ImageUtils;
import org.talend.commons.utils.VersionUtils;
@@ -166,7 +168,6 @@ import org.talend.repository.localprovider.exceptions.IncorrectFileException;
import org.talend.repository.localprovider.i18n.Messages;
import org.talend.repository.model.IProxyRepositoryFactory;
import org.talend.repository.model.RepositoryConstants;
-
import orgomg.cwm.foundation.businessinformation.BusinessinformationPackage;
/**
@@ -1107,8 +1108,8 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
}
/**
- * @see org.talend.core.model.repository.factories.IRepositoryFactory#readProject(java.lang.String, java.lang.String,
- * java.lang.String)
+ * @see org.talend.core.model.repository.factories.IRepositoryFactory#readProject(java.lang.String,
+ * java.lang.String, java.lang.String)
*/
@Override
public Project[] readProject() throws PersistenceException {
@@ -1651,7 +1652,8 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
}
@Override
- public void deleteObjectPhysical(Project project, IRepositoryViewObject objToDelete, boolean isDeleteOnRemote) throws PersistenceException {
+ public void deleteObjectPhysical(Project project, IRepositoryViewObject objToDelete, boolean isDeleteOnRemote)
+ throws PersistenceException {
deleteObjectPhysical(project, objToDelete, null, isDeleteOnRemote);
}
@@ -1680,7 +1682,8 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
|| currentVersion.getRepositoryObjectType() == ERepositoryObjectType.JOBLET
|| currentVersion.getRepositoryObjectType() == ERepositoryObjectType.SPARK_JOBLET
|| currentVersion.getRepositoryObjectType() == ERepositoryObjectType.SPARK_STREAMING_JOBLET) {
- if (coreSerivce.isAlreadyBuilt(project)) {
+ Project currentProject = ProjectManager.getInstance().getCurrentProject();
+ if (coreSerivce.isAlreadyBuilt(project) && currentProject != null) {
if (currentVersion.getProperty() != null) {
coreSerivce.removeItemRelations(currentVersion.getProperty().getItem());
}
@@ -2348,7 +2351,6 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
xmiResourceManager.getAffectedResources(resourceSet, item.getProperty());
computePropertyMaxInformationLevel(item.getProperty());
- item.getProperty().setModificationDate(new Date());
Resource itemResource = null;
Resource screenshotResource = null;
EClass eClass = item.eClass();
@@ -2569,7 +2571,7 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
xmlResource.setID(connectionItem.getConnection(), EcoreUtil.generateUUID());
}
}
-
+
return newItem;
} catch (IOException e) {
// e.printStackTrace();
@@ -2593,7 +2595,7 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
newRefItem.setContent(byarray);
}
}
-
+
private void copyIcon(Item originalItem, Item newItem) throws PersistenceException {
if (!(newItem instanceof JobletProcessItem)) {
return;
@@ -2673,6 +2675,17 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
@Override
public void create(Project project, Item item, IPath path, boolean... isImportItem) throws PersistenceException {
+ final ResourceOption creatation = ResourceOption.CREATATION;
+ final String optionName = creatation.getName();
+ EmfResourcesFactoryReader.INSTANCE.getSaveOptionsProviders().put(optionName, creatation.getProvider());
+ try {
+ delegateCreate(project, item, path, isImportItem);
+ } finally {
+ EmfResourcesFactoryReader.INSTANCE.getSaveOptionsProviders().remove(optionName);
+ }
+ }
+
+ private void delegateCreate(Project project, Item item, IPath path, boolean... isImportItem) throws PersistenceException {
computePropertyMaxInformationLevel(item.getProperty());
if (item.getProperty().getVersion() == null) {
@@ -2682,14 +2695,6 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
item.getProperty().setAuthor(getRepositoryContext().getUser());
}
- if (item.getProperty().getCreationDate() == null) {
- item.getProperty().setCreationDate(new Date());
- }
-
- if (item.getProperty().getModificationDate() == null) {
- item.getProperty().setModificationDate(item.getProperty().getCreationDate());
- }
-
ItemState itemState = PropertiesFactory.eINSTANCE.createItemState();
if (item.getState() != null) {
itemState.setDeleted(item.getState().isDeleted());
@@ -2896,6 +2901,7 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
if (isImportItem.length == 0 || !isImportItem[0]) {
saveProject(project);
}
+
}
private List getReferenceFilesResources(Item item, Resource propertyResource, boolean needLoad) {
@@ -3158,9 +3164,9 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
if (!doesLoggedUserExist() && project.isMainProject()) {
createUser(project);
}
-
+
initProjectRepository(project, null);
-
+
IProject project2 = ResourceUtils.getProject(project);
createFolders(project2, project.getEmfProject());
synchronizeRoutines(project2);
@@ -3240,8 +3246,8 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
@Override
public List getReferencedProjects(Project project) {
- String parentBranch = getRepositoryContext().getFields()
- .get(IProxyRepositoryFactory.BRANCH_SELECTION + "_" + getRepositoryContext().getProject().getTechnicalLabel());
+ String parentBranch = getRepositoryContext().getFields().get(
+ IProxyRepositoryFactory.BRANCH_SELECTION + "_" + getRepositoryContext().getProject().getTechnicalLabel());
List refProjectList = new ArrayList();
for (ProjectReference refProject : project.getProjectReferenceList()) {
if (ProjectManager.validReferenceProject(parentBranch, refProject)) {
@@ -3471,7 +3477,7 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
}
@Override
- public void executeMigrations(Project mainProject, boolean beforeLogon, SubMonitor monitorWrap) throws PersistenceException{
+ public void executeMigrations(Project mainProject, boolean beforeLogon, SubMonitor monitorWrap) throws PersistenceException {
IMigrationToolService service = (IMigrationToolService) GlobalServiceRegister.getDefault().getService(
IMigrationToolService.class);
service.executeMigrationTasksForLogon(mainProject, beforeLogon, monitorWrap);
@@ -3520,8 +3526,8 @@ public class LocalRepositoryFactory extends AbstractEMFRepositoryFactory impleme
// nothing to do
}
-
- public void initProjectRepository(Project project,String branchForMainProject) throws PersistenceException {
+
+ public void initProjectRepository(Project project, String branchForMainProject) throws PersistenceException {
}
protected void notifyProjectReload(org.talend.core.model.properties.Project project) {
diff --git a/test/plugins/org.talend.core.runtime.test/src/org/talend/core/runtime/repository/item/ItemProductValuesHelperTest.java b/test/plugins/org.talend.core.runtime.test/src/org/talend/core/runtime/repository/item/ItemProductValuesHelperTest.java
new file mode 100644
index 0000000000..a353928b51
--- /dev/null
+++ b/test/plugins/org.talend.core.runtime.test/src/org/talend/core/runtime/repository/item/ItemProductValuesHelperTest.java
@@ -0,0 +1,408 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2017 Talend Inc. - www.talend.com
+//
+// This source code is available under agreement available at
+// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
+//
+// You should have received a copy of the agreement
+// along with this program; if not, write to Talend SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talend.core.runtime.repository.item;
+
+import static org.hamcrest.CoreMatchers.anything;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.Date;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.EMap;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.talend.commons.utils.VersionUtils;
+import org.talend.core.GlobalServiceRegister;
+import org.talend.core.model.properties.Project;
+import org.talend.core.model.properties.PropertiesFactory;
+import org.talend.core.model.properties.Property;
+import org.talend.core.ui.branding.IBrandingService;
+import org.talend.repository.ProjectManager;
+
+/**
+ * DOC ggu class global comment. Detailled comment
+ */
+@SuppressWarnings({ "rawtypes", "unchecked" })
+public class ItemProductValuesHelperTest {
+
+ static IBrandingService brandingService = null;
+
+ @BeforeClass
+ public static void setup() {
+ brandingService = (IBrandingService) GlobalServiceRegister.getDefault().getService(IBrandingService.class);
+ assertNotNull(brandingService);
+ }
+
+ @Test
+ public void test_existed_null() {
+ assertFalse(ItemProductValuesHelper.existed(null));
+ }
+
+ @Test
+ public void test_existed_empty() {
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+ assertFalse(ItemProductValuesHelper.existed(prop));
+ }
+
+ @Test
+ public void test_existed_others() {
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+ EMap additionalProp = prop.getAdditionalProperties();
+
+ additionalProp.put("ABC", "XYZ");
+
+ assertFalse(ItemProductValuesHelper.existed(prop));
+ }
+
+ @Test
+ public void test_existed_modifiedKey() {
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+ EMap additionalProp = prop.getAdditionalProperties();
+
+ additionalProp.put(ItemProductKeys.FULLNAME.getModifiedKey(), "TOS");
+
+ assertTrue("Don't exist modified or created product full name", ItemProductValuesHelper.existed(prop));
+ }
+
+ @Test
+ public void test_existed_createdKey() {
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+ EMap additionalProp = prop.getAdditionalProperties();
+
+ additionalProp.put(ItemProductKeys.FULLNAME.getCreatedKey(), "TOS");
+
+ assertTrue("Don't exist modified or created product full name", ItemProductValuesHelper.existed(prop));
+ }
+
+ @Test
+ public void test_existed_importKey() {
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+ EMap additionalProp = prop.getAdditionalProperties();
+
+ additionalProp.put(ItemProductKeys.FULLNAME.getImportKey(), "TOS");
+
+ assertFalse("Only import product full name is invalid", ItemProductValuesHelper.existed(prop));
+ }
+
+ @Test
+ public void test_existed_all() {
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+ EMap additionalProp = prop.getAdditionalProperties();
+
+ additionalProp.put(ItemProductKeys.FULLNAME.getModifiedKey(), "TP");
+ additionalProp.put(ItemProductKeys.FULLNAME.getCreatedKey(), "TOP");
+ additionalProp.put(ItemProductKeys.FULLNAME.getImportKey(), "TP");
+
+ assertTrue("Don't exist modified or created product full name", ItemProductValuesHelper.existed(prop));
+ }
+
+ @Test
+ public void test_setValuesWhenCreate() {
+ doTestSetValuesWhenCreate(new Date());
+ }
+
+ @Test
+ public void test_setValuesWhenCreate_nullDate() {
+ doTestSetValuesWhenCreate(null);
+ }
+
+ private void doTestSetValuesWhenCreate(Date date) {
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+ EMap additionalProp = prop.getAdditionalProperties();
+ boolean set = ItemProductValuesHelper.setValuesWhenCreate(prop, date);
+ assertTrue(set);
+
+ assertThat(additionalProp.get(ItemProductKeys.FULLNAME.getCreatedKey()), equalTo(brandingService.getFullProductName()));
+ assertThat(additionalProp.get(ItemProductKeys.VERSION.getCreatedKey()), equalTo(VersionUtils.getDisplayVersion()));
+ assertThat(additionalProp.get(ItemProductKeys.DATE.getCreatedKey()), anything());
+
+ }
+
+ @Test
+ public void test_setValuesWhenModify() {
+ doTestSetValuesWhenModify(new Date());
+ }
+
+ @Test
+ public void test_setValuesWhenModify_nullDate() {
+ doTestSetValuesWhenModify(null);
+ }
+
+ private void doTestSetValuesWhenModify(Date date) {
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+ boolean set = ItemProductValuesHelper.setValuesWhenModify(prop, date);
+ assertTrue(set);
+
+ EMap additionalProp = prop.getAdditionalProperties();
+ assertThat(additionalProp.get(ItemProductKeys.FULLNAME.getModifiedKey()), equalTo(brandingService.getFullProductName()));
+ assertThat(additionalProp.get(ItemProductKeys.VERSION.getModifiedKey()), equalTo(VersionUtils.getDisplayVersion()));
+ assertThat(additionalProp.get(ItemProductKeys.DATE.getModifiedKey()), anything());
+ }
+
+ @Test
+ public void test_setValuesWhenMigrate_exist() {
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+ prop.getAdditionalProperties().put(ItemProductKeys.FULLNAME.getModifiedKey(), "xxxx");
+
+ boolean set = ItemProductValuesHelper.setValuesWhenMigrate(prop, null);
+ assertFalse(set);
+ }
+
+ @Test
+ public void test_setValuesWhenMigrate_nullDate() {
+ String productFullname = "Talend Open Studio for Big Data";
+ String productVersion = "6.5.1.20171110_1941";
+ Project project = PropertiesFactory.eINSTANCE.createProject();
+ project.setProductVersion("Talend Open Studio for Big Data-6.5.1.20171110_1941");
+
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+ boolean set = ItemProductValuesHelper.setValuesWhenMigrate(prop, project);
+ assertTrue(set);
+ EMap additionalProp = prop.getAdditionalProperties();
+
+ assertThat(additionalProp.get(ItemProductKeys.FULLNAME.getCreatedKey()), equalTo(productFullname));
+ assertThat(additionalProp.get(ItemProductKeys.VERSION.getCreatedKey()), equalTo(productVersion));
+ assertThat(additionalProp.get(ItemProductKeys.DATE.getCreatedKey()), anything());
+ assertThat(prop.getCreationDate(), nullValue());
+
+ assertThat(additionalProp.get(ItemProductKeys.FULLNAME.getModifiedKey()), equalTo(productFullname));
+ assertThat(additionalProp.get(ItemProductKeys.VERSION.getModifiedKey()), equalTo(productVersion));
+ assertThat(additionalProp.get(ItemProductKeys.DATE.getModifiedKey()), anything());
+ assertThat(prop.getModificationDate(), nullValue());
+ }
+
+ @Test
+ public void test_setValuesWhenMigrate_nullProject() {
+ org.talend.core.model.general.Project currentProject = ProjectManager.getInstance().getCurrentProject();
+ assertNotNull(currentProject);
+ Project project = currentProject.getEmfProject();
+ Map productValues = ItemProductValuesHelper.parseProduct(project.getProductVersion());
+ assertFalse(productValues.isEmpty());
+ String productFullname = productValues.keySet().iterator().next();
+ String productVersion = productValues.get(productFullname);
+
+ //
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+ boolean set = ItemProductValuesHelper.setValuesWhenMigrate(prop, null);
+ assertTrue(set);
+
+ EMap additionalProp = prop.getAdditionalProperties();
+ assertThat(additionalProp.get(ItemProductKeys.FULLNAME.getCreatedKey()), equalTo(productFullname));
+ assertThat(additionalProp.get(ItemProductKeys.VERSION.getCreatedKey()), equalTo(productVersion));
+ assertThat(additionalProp.get(ItemProductKeys.DATE.getCreatedKey()), anything());
+ assertThat(prop.getCreationDate(), nullValue());
+
+ assertThat(additionalProp.get(ItemProductKeys.FULLNAME.getModifiedKey()), equalTo(productFullname));
+ assertThat(additionalProp.get(ItemProductKeys.VERSION.getModifiedKey()), equalTo(productVersion));
+ assertThat(additionalProp.get(ItemProductKeys.DATE.getModifiedKey()), anything());
+ assertThat(prop.getModificationDate(), nullValue());
+
+ }
+
+ @Test
+ public void test_setValuesWhenMigrate() {
+ String productFullname = "Talend Open Studio for Big Data";
+ String productVersion = "6.5.1.20171110_1941";
+ Project project = PropertiesFactory.eINSTANCE.createProject();
+ project.setProductVersion("Talend Open Studio for Big Data-6.5.1.20171110_1941");
+
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+
+ Date createdDate = new Date();
+ try {
+ Thread.sleep(100);// make sure the date is different
+ } catch (InterruptedException e) {
+ //
+ }
+ Date modifiedDate = new Date();
+
+ prop.setCreationDate(createdDate);
+ prop.setModificationDate(modifiedDate);
+
+ boolean set = ItemProductValuesHelper.setValuesWhenMigrate(prop, project);
+ assertTrue(set);
+
+ EMap additionalProp = prop.getAdditionalProperties();
+ assertThat(additionalProp.get(ItemProductKeys.FULLNAME.getCreatedKey()), equalTo(productFullname));
+ assertThat(additionalProp.get(ItemProductKeys.VERSION.getCreatedKey()), equalTo(productVersion));
+ assertThat(additionalProp.get(ItemProductKeys.DATE.getCreatedKey()),
+ equalTo(ItemProductValuesHelper.DATEFORMAT.format(createdDate)));
+ assertThat(prop.getCreationDate(), nullValue());
+
+ assertThat(additionalProp.get(ItemProductKeys.FULLNAME.getModifiedKey()), equalTo(productFullname));
+ assertThat(additionalProp.get(ItemProductKeys.VERSION.getModifiedKey()), equalTo(productVersion));
+ assertThat(additionalProp.get(ItemProductKeys.DATE.getModifiedKey()),
+ equalTo(ItemProductValuesHelper.DATEFORMAT.format(modifiedDate)));
+ assertThat(prop.getModificationDate(), nullValue());
+ }
+
+ @Test
+ public void test_setValuesWhenImport_null() {
+ boolean set = ItemProductValuesHelper.setValuesWhenImport(null, null);
+ assertFalse(set);
+
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+ set = ItemProductValuesHelper.setValuesWhenImport(prop, null);
+ assertFalse(set);
+
+ Project project = PropertiesFactory.eINSTANCE.createProject();
+ set = ItemProductValuesHelper.setValuesWhenImport(null, project);
+ assertFalse(set);
+ }
+
+ @Test
+ public void test_setValuesWhenImport_empty() {
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+
+ Project project = PropertiesFactory.eINSTANCE.createProject();
+ project.setProductVersion("");
+
+ boolean set = ItemProductValuesHelper.setValuesWhenImport(prop, project);
+ assertFalse(set);
+ }
+
+ // @Test
+ public void test_setValuesWhenImport_tosdq() {
+ // not productversion for TOS DQ
+ fail("There is no product version value");
+ // doTest_SetValuesForImport("","","");
+ }
+
+ @Test
+ public void test_setValuesWhenImport_withMigrating() {
+ String productFullname = "Talend Open Studio for Big Data";
+ String productVersion = "6.5.1.20171110_1941";
+ Project project = PropertiesFactory.eINSTANCE.createProject();
+ project.setProductVersion("Talend Open Studio for Big Data-6.5.1.20171110_1941");
+
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+ boolean set = ItemProductValuesHelper.setValuesWhenImport(prop, project);
+ assertTrue(set);
+
+ EMap additionalProp = prop.getAdditionalProperties();
+ assertThat(additionalProp.get(ItemProductKeys.FULLNAME.getImportKey()), equalTo(productFullname));
+ assertThat(additionalProp.get(ItemProductKeys.VERSION.getImportKey()), equalTo(productVersion));
+ assertThat(additionalProp.get(ItemProductKeys.DATE.getImportKey()), anything());
+ assertThat(prop.getCreationDate(), nullValue());
+
+ assertThat(additionalProp.get(ItemProductKeys.FULLNAME.getCreatedKey()), equalTo(productFullname));
+ assertThat(additionalProp.get(ItemProductKeys.VERSION.getCreatedKey()), equalTo(productVersion));
+ assertThat(additionalProp.get(ItemProductKeys.DATE.getCreatedKey()), anything());
+ assertThat(prop.getCreationDate(), nullValue());
+
+ assertThat(additionalProp.get(ItemProductKeys.FULLNAME.getModifiedKey()), equalTo(productFullname));
+ assertThat(additionalProp.get(ItemProductKeys.VERSION.getModifiedKey()), equalTo(productVersion));
+ assertThat(additionalProp.get(ItemProductKeys.DATE.getModifiedKey()), anything());
+ assertThat(prop.getModificationDate(), nullValue());
+ }
+
+ @Test
+ public void test_setValuesWhenImport_withoutMigrating() {
+ String productFullname = "Talend Open Studio for Big Data";
+ String productVersion = "6.5.1.20171110_1941";
+ Project project = PropertiesFactory.eINSTANCE.createProject();
+ project.setProductVersion("Talend Open Studio for Big Data-6.5.1.20171110_1941");
+
+ Property prop = PropertiesFactory.eINSTANCE.createProperty();
+ EMap additionalProp = prop.getAdditionalProperties();
+ additionalProp.put(ItemProductKeys.FULLNAME.getModifiedKey(), "XXXX"); // set flag to avoid migrating
+
+ boolean set = ItemProductValuesHelper.setValuesWhenImport(prop, project);
+ assertTrue(set);
+
+ assertThat(additionalProp.get(ItemProductKeys.FULLNAME.getImportKey()), equalTo(productFullname));
+ assertThat(additionalProp.get(ItemProductKeys.VERSION.getImportKey()), equalTo(productVersion));
+ assertThat(additionalProp.get(ItemProductKeys.DATE.getImportKey()), anything());
+
+ assertThat(additionalProp.get(ItemProductKeys.FULLNAME.getCreatedKey()), nullValue());
+ assertThat(additionalProp.get(ItemProductKeys.VERSION.getCreatedKey()), nullValue());
+ assertThat(additionalProp.get(ItemProductKeys.DATE.getCreatedKey()), nullValue());
+ assertThat(prop.getCreationDate(), nullValue());
+
+ assertThat(additionalProp.get(ItemProductKeys.FULLNAME.getModifiedKey()), equalTo("XXXX"));
+ assertThat(additionalProp.get(ItemProductKeys.VERSION.getModifiedKey()), nullValue());
+ assertThat(additionalProp.get(ItemProductKeys.DATE.getModifiedKey()), anything());
+ assertThat(prop.getModificationDate(), nullValue());
+ }
+
+ @Test
+ public void test_parseProduct_empty() {
+ Map values = ItemProductValuesHelper.parseProduct(null);
+ assertTrue(values.isEmpty());
+
+ values = ItemProductValuesHelper.parseProduct("");
+ assertTrue(values.isEmpty());
+ }
+
+ @Test
+ public void test_parseProduct_invalid() {
+ doTestParseProduct("ABCD", "ABCD", null);
+
+ doTestParseProduct("Talend Open Studio for Big Data+6.5.1.20171110_1941",
+ "Talend Open Studio for Big Data+6.5.1.20171110_1941", null);
+ doTestParseProduct("Talend Open Studio for Big Data_6.5.1.20171110_1941",
+ "Talend Open Studio for Big Data_6.5.1.20171110_1941", null);
+ }
+
+ @Test
+ public void test_parseProduct_valid() {
+ doTestParseProduct("ABCD-XYZ", "ABCD", "XYZ");
+
+ doTestParseProduct("ABCD-XYZ-123", "ABCD", "XYZ-123");
+
+ doTestParseProduct("Talend Open Studio for Big Data-6.5.1.20171110_1941", "Talend Open Studio for Big Data",
+ "6.5.1.20171110_1941");
+ doTestParseProduct("Talend Open Studio for Big Data-6.5.1.20171110-1941", "Talend Open Studio for Big Data",
+ "6.5.1.20171110-1941");
+
+ doTestParseProduct("Talend Open Studio-3.2.3.r35442", "Talend Open Studio", "3.2.3.r35442");
+ doTestParseProduct("Talend Open Studio for Data Integration-5.3.2.r113626", "Talend Open Studio for Data Integration",
+ "5.3.2.r113626");
+ }
+
+ @Test
+ public void test_parseProduct_patch() {
+ doTestParseProduct("Talend Data Fabric-6.3.1.20171030_0901-patch", "Talend Data Fabric", "6.3.1.20171030_0901-patch");
+ }
+
+ @Test
+ public void test_parseProduct_snapshot() {
+ doTestParseProduct("Talend Open Studio for Big Data-6.5.1.20171110_1941-SNAPSHOT", "Talend Open Studio for Big Data",
+ "6.5.1.20171110_1941-SNAPSHOT");
+ }
+
+ private void doTestParseProduct(String value, String productFullname, String productVersion) {
+ Map values = ItemProductValuesHelper.parseProduct(value);
+ assertFalse(values.isEmpty());
+ assertEquals(1, values.size());
+
+ String actualProductFullname = values.keySet().iterator().next();
+ String actualProductVersion = values.get(actualProductFullname);
+
+ assertEquals(productFullname, actualProductFullname);
+
+ if (productVersion != null) {
+ assertEquals(productVersion, actualProductVersion);
+ } else {
+ assertNull(actualProductVersion);
+ }
+ }
+}