diff options
author | Camille Letavernier | 2015-01-20 17:14:43 +0000 |
---|---|---|
committer | Camille Letavernier | 2015-01-20 17:14:43 +0000 |
commit | ed64f268ca584995597a35be78ca8be31d7acdbe (patch) | |
tree | 2401a978f55ad18179953d7d5b453fb2bda04a38 /extraplugins/migration/org.eclipse.papyrus.migration.rsa | |
parent | c4888abcb0e743986ecf2708987a569da592deba (diff) | |
download | org.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')
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 { |