Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCamille Letavernier2015-01-20 17:14:43 +0000
committerCamille Letavernier2015-01-20 17:14:43 +0000
commited64f268ca584995597a35be78ca8be31d7acdbe (patch)
tree2401a978f55ad18179953d7d5b453fb2bda04a38 /extraplugins/migration/org.eclipse.papyrus.migration.rsa
parentc4888abcb0e743986ecf2708987a569da592deba (diff)
downloadorg.eclipse.papyrus-ed64f268ca584995597a35be78ca8be31d7acdbe.tar.gz
org.eclipse.papyrus-ed64f268ca584995597a35be78ca8be31d7acdbe.tar.xz
org.eclipse.papyrus-ed64f268ca584995597a35be78ca8be31d7acdbe.zip
410985: [Model Import] Papyrus shall enable to import semantics
information of other tools models https://bugs.eclipse.org/bugs/show_bug.cgi?id=410985 - Add test cases for profile and library reconnection, as well as fragmented profiles (RT + Custom) 457341: [Model Import] Identify and fix performances bottlenecks https://bugs.eclipse.org/bugs/show_bug.cgi?id=457341 - Disable most of the transaction support during the import operation
Diffstat (limited to 'extraplugins/migration/org.eclipse.papyrus.migration.rsa')
-rw-r--r--extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/ConfigHelper.java22
-rw-r--r--extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/ImportTransformationLauncher.java75
-rw-r--r--extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/RepairStereotypes.java43
3 files changed, 83 insertions, 57 deletions
diff --git a/extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/ConfigHelper.java b/extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/ConfigHelper.java
index 07616260bca..cb9b42f6c1f 100644
--- a/extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/ConfigHelper.java
+++ b/extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/ConfigHelper.java
@@ -56,8 +56,10 @@ public class ConfigHelper {
public ConfigHelper(Config config) {
this.config = config;
- if (config.getMappingParameters() == null) {
- config.setMappingParameters(RSAToPapyrusParametersFactory.eINSTANCE.createMappingParameters());
+ synchronized (config) {
+ if (config.getMappingParameters() == null) {
+ config.setMappingParameters(RSAToPapyrusParametersFactory.eINSTANCE.createMappingParameters());
+ }
}
configureResourceSet();
@@ -160,9 +162,13 @@ public class ConfigHelper {
mapping.setSourceURI(packageURI.trimFragment().trimQuery().toString());
mapping.setTargetURI(packageURI.trimFragment().trimQuery().toString());
- mappings.add(mapping);
+ synchronized (config) {
+ mappings.add(mapping);
+ }
} else {
- mappings.add(existingMapping);
+ synchronized (config) {
+ mappings.add(existingMapping);
+ }
}
}
@@ -182,9 +188,13 @@ public class ConfigHelper {
mapping.setSourceURI(sourceURI.trimFragment().trimQuery().toString());
mapping.setTargetURI(sourceURI.trimFragment().trimQuery().toString()); // By default, don't change anything
- mappings.add(mapping);
+ synchronized (config) {
+ mappings.add(mapping);
+ }
} else {
- mappings.add(existingMapping);
+ synchronized (config) {
+ mappings.add(existingMapping);
+ }
}
}
}
diff --git a/extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/ImportTransformationLauncher.java b/extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/ImportTransformationLauncher.java
index 26ed5ebab4b..6622c2c0535 100644
--- a/extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/ImportTransformationLauncher.java
+++ b/extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/ImportTransformationLauncher.java
@@ -30,12 +30,13 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
-import org.eclipse.emf.common.command.AbstractCommand;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.transaction.RollbackException;
+import org.eclipse.emf.transaction.Transaction;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.impl.InternalTransactionalEditingDomain;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.papyrus.infra.core.resource.IEMFModel;
import org.eclipse.papyrus.infra.core.resource.IModel;
@@ -58,7 +59,6 @@ import org.eclipse.papyrus.uml.tools.model.UmlModel;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleManager;
@@ -207,21 +207,33 @@ public class ImportTransformationLauncher {
}
protected void handle(final IStatus status) {
+ if (baseControl == null) {
+ int severity = status.getSeverity();
+ if (severity == IStatus.OK || severity == IStatus.CANCEL) {
+ return;
+ }
+
+ StatusManager.getManager().handle(status, StatusManager.LOG);
+ return;
+ }
+
+ Display display = baseControl.getDisplay();
+
if (status.getSeverity() == IStatus.OK) {
- Display.getDefault().asyncExec(new Runnable() {
+ display.asyncExec(new Runnable() {
@Override
public void run() {
- MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Import models", status.getMessage());
+ MessageDialog.openInformation(baseControl.getShell(), "Import models", status.getMessage());
}
});
} else if (status.getSeverity() == IStatus.CANCEL) {
- Display.getDefault().asyncExec(new Runnable() {
+ display.asyncExec(new Runnable() {
@Override
public void run() {
- MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Import models", status.getMessage());
+ MessageDialog.openInformation(baseControl.getShell(), "Import models", status.getMessage());
}
});
} else {
@@ -319,13 +331,6 @@ public class ImportTransformationLauncher {
final Map<URI, URI> profileUrisToReplace = new HashMap<URI, URI>();
for (ImportTransformation transformation : transformations) {
- for (Map.Entry<URI, URI> mapping : transformation.getURIMappings().entrySet()) {
- URI sourceURI = mapping.getKey();
- URI targetURI = mapping.getValue();
- if ("emx".equals(sourceURI.fileExtension()) || "efx".equals(sourceURI.fileExtension())) {
- urisToReplace.put(sourceURI, targetURI);
- }
- }
urisToReplace.putAll(transformation.getURIMappings());
profileUrisToReplace.putAll(transformation.getProfileURIMappings());
}
@@ -343,6 +348,7 @@ public class ImportTransformationLauncher {
// Include the user-defined URI mappings
populateURIMap(parameters.getUriMappings(), urisToReplace);
+ populateURIMap(parameters.getUriMappings(), profileUrisToReplace);
populateURIMap(parameters.getProfileUriMappings(), profileUrisToReplace);
}
@@ -395,10 +401,20 @@ public class ImportTransformationLauncher {
return Status.OK_STATUS;
}
- repairProxies(modelSet, resourcesToRepair, urisToReplace, monitor); // Repairing proxies first will change the Applied Profiles. This helps repairing stereotypes
+ try {
+ repairProxies(modelSet, resourcesToRepair, urisToReplace, monitor); // Repairing proxies first will change the Applied Profiles. This helps repairing stereotypes
+ } catch (Exception ex) {
+ Activator.log.error(ex);
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "An exception occurred when repairing library dependencies", ex);
+ }
RepairStereotypes repairStereotypesAction = new RepairStereotypes(modelSet, resourcesToRepair, profileUrisToReplace);
- repairStereotypesAction.execute();
+ try {
+ repairStereotypesAction.execute();
+ } catch (Exception ex) {
+ Activator.log.error(ex);
+ return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "An exception occurred when repairing profiles/stereotypes", ex);
+ }
try {
@@ -478,7 +494,7 @@ public class ImportTransformationLauncher {
return false;
}
- protected void repairProxies(final ModelSet modelSet, final Collection<Resource> resourcesToRepair, Map<URI, URI> urisToReplace, IProgressMonitor monitor) {
+ protected void repairProxies(final ModelSet modelSet, final Collection<Resource> resourcesToRepair, Map<URI, URI> urisToReplace, IProgressMonitor monitor) throws InterruptedException, RollbackException {
final TransactionalEditingDomain domain = modelSet.getTransactionalEditingDomain();
@@ -491,23 +507,20 @@ public class ImportTransformationLauncher {
continue;
}
- domain.getCommandStack().execute(new AbstractCommand("Import dependencies") {
+ InternalTransactionalEditingDomain internalDomain = (InternalTransactionalEditingDomain) domain;
- @Override
- public void execute() {
- DependencyManagementHelper.updateDependencies(entry.getKey(), entry.getValue(), resourcesToRepair, domain);
- }
+ Map<String, Object> options = new HashMap<String, Object>();
+ options.put(Transaction.OPTION_NO_UNDO, true);
+ options.put(Transaction.OPTION_NO_VALIDATION, true);
+ options.put(Transaction.OPTION_NO_TRIGGERS, true);
- @Override
- public void redo() {
- // Nothing
- }
-
- @Override
- protected boolean prepare() {
- return true;
- };
- });
+ // We're in a batch environment, with no undo/redo support. Run a vanilla transaction to improve performances
+ Transaction fastTransaction = internalDomain.startTransaction(false, options);
+ try {
+ DependencyManagementHelper.updateDependencies(entry.getKey(), entry.getValue(), resourcesToRepair, domain);
+ } finally {
+ fastTransaction.commit();
+ }
}
}
diff --git a/extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/RepairStereotypes.java b/extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/RepairStereotypes.java
index 91a47ec83e5..ca28961f1f6 100644
--- a/extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/RepairStereotypes.java
+++ b/extraplugins/migration/org.eclipse.papyrus.migration.rsa/src/org/eclipse/papyrus/migration/rsa/transformation/RepairStereotypes.java
@@ -13,11 +13,11 @@ package org.eclipse.papyrus.migration.rsa.transformation;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.emf.common.command.AbstractCommand;
import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.common.util.URI;
@@ -25,7 +25,10 @@ import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.transaction.RollbackException;
+import org.eclipse.emf.transaction.Transaction;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.impl.InternalTransactionalEditingDomain;
import org.eclipse.papyrus.infra.core.resource.ModelSet;
import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
@@ -73,8 +76,11 @@ public class RepairStereotypes {
* Finds all zombie stereotypes, and repair them with the default action.
*
* If the profile can't be found automatically, the profileMappings map is used
+ *
+ * @throws InterruptedException
+ * @throws RollbackException
*/
- public void execute() {
+ public void execute() throws InterruptedException, RollbackException {
ZombieStereotypesDescriptor result = null;
LabelProviderService labelProvider = new LabelProviderServiceImpl();
@@ -129,30 +135,27 @@ public class RepairStereotypes {
final TransactionalEditingDomain domain = modelSet.getTransactionalEditingDomain();
- domain.getCommandStack().execute(new AbstractCommand("Repair profiles") {
- @Override
- public void execute() {
+ InternalTransactionalEditingDomain internalDomain = (InternalTransactionalEditingDomain) domain;
- final BasicDiagnostic diagnostics = new BasicDiagnostic(Activator.PLUGIN_ID, 0, "Problems in repairing stereotypes", null);
+ Map<String, Object> options = new HashMap<String, Object>();
+ options.put(Transaction.OPTION_NO_UNDO, true);
+ options.put(Transaction.OPTION_NO_VALIDATION, true);
+ options.put(Transaction.OPTION_NO_TRIGGERS, true);
- for (EPackage packageToRepair : descriptor.getZombiePackages()) {
- IRepairAction action = descriptor.getRepairAction(packageToRepair, IRepairAction.Kind.APPLY_LATEST_PROFILE_DEFINITION);
- descriptor.repair(packageToRepair, action, diagnostics, new NullProgressMonitor());
- }
-
- }
+ // We're in a batch environment, with no undo/redo support. Run a vanilla transaction to improve performances
+ Transaction fastTransaction = internalDomain.startTransaction(false, options);
+ try {
+ final BasicDiagnostic diagnostics = new BasicDiagnostic(Activator.PLUGIN_ID, 0, "Problems in repairing stereotypes", null);
- @Override
- public void redo() {
- // Nothing
+ for (EPackage packageToRepair : descriptor.getZombiePackages()) {
+ IRepairAction action = descriptor.getRepairAction(packageToRepair, IRepairAction.Kind.APPLY_LATEST_PROFILE_DEFINITION);
+ descriptor.repair(packageToRepair, action, diagnostics, new NullProgressMonitor());
}
+ } finally {
+ fastTransaction.commit();
+ }
- @Override
- protected boolean prepare() {
- return true;
- }
- });
}
try {

Back to the top