diff options
10 files changed, 405 insertions, 69 deletions
diff --git a/plugins/org.eclipse.emf.cdo.migrator/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.emf.cdo.migrator/.settings/org.eclipse.jdt.core.prefs index 51782ff6f4..bde7b154a0 100644 --- a/plugins/org.eclipse.emf.cdo.migrator/.settings/org.eclipse.jdt.core.prefs +++ b/plugins/org.eclipse.emf.cdo.migrator/.settings/org.eclipse.jdt.core.prefs @@ -1,4 +1,4 @@ -#Sat Jun 30 10:34:06 CEST 2007 +#Fri Nov 02 11:37:44 CET 2007 eclipse.preferences.version=1 instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 diff --git a/plugins/org.eclipse.emf.cdo.migrator/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.migrator/META-INF/MANIFEST.MF index 06b4b6ba16..d56b6a5385 100644 --- a/plugins/org.eclipse.emf.cdo.migrator/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.emf.cdo.migrator/META-INF/MANIFEST.MF @@ -10,7 +10,8 @@ Bundle-RequiredExecutionEnvironment: J2SE-1.5 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.3.0,4.0.0)", org.eclipse.core.resources;bundle-version="[3.3.0,4.0.0)", org.eclipse.ui;bundle-version="[3.3.0,4.0.0)", + org.eclipse.emf.ecore.xmi;bundle-version="[2.3.0,3.0.0)", org.eclipse.emf.importer;bundle-version="[2.3.0,3.0.0)" Export-Package: org.eclipse.emf.cdo.migrator;version="0.8.0", - org.eclipse.emf.cdo.migrator.ui;version="0.8.0" + org.eclipse.emf.cdo.migrator.wizards;version="0.8.0" Eclipse-LazyStart: true diff --git a/plugins/org.eclipse.emf.cdo.migrator/plugin.xml b/plugins/org.eclipse.emf.cdo.migrator/plugin.xml index fd84108f1e..ffae4b7ae2 100644 --- a/plugins/org.eclipse.emf.cdo.migrator/plugin.xml +++ b/plugins/org.eclipse.emf.cdo.migrator/plugin.xml @@ -26,5 +26,28 @@ description="%_UI_CDOImporter_description" wizard="org.eclipse.emf.cdo.migrator.ui.CDOImporterWizard" /> </extension> + + <extension + point="org.eclipse.ui.popupMenus"> + <objectContribution + id="org.eclipse.emf.cdo.migrator.MigrateContribution" + objectClass="org.eclipse.core.resources.IFile"> + <menu + id="org.eclipse.emf.cdo.migrator.menu1" + label="CDO" + path="additions"> + <separator + name="group1"> + </separator> + </menu> + <action + class="org.eclipse.emf.cdo.migrator.actions.MigrateAction" + enablesFor="1" + id="org.eclipse.emf.cdo.migrator.MigrateAction" + label="Migrate EMF Model" + menubarPath="org.eclipse.emf.cdo.migrator.menu1/group1"> + </action> + </objectContribution> + </extension> </plugin> diff --git a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/migrator/CDOImporter.java b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/migrator/CDOImporter.java index cb8145d0e9..09f2c6b7f7 100644 --- a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/migrator/CDOImporter.java +++ b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/migrator/CDOImporter.java @@ -10,18 +10,14 @@ **************************************************************************/ package org.eclipse.emf.cdo.migrator; -import org.eclipse.emf.codegen.ecore.genmodel.GenDelegationKind; import org.eclipse.emf.codegen.ecore.genmodel.GenModel; import org.eclipse.emf.codegen.ecore.genmodel.GenPackage; import org.eclipse.emf.common.util.BasicDiagnostic; -import org.eclipse.emf.common.util.BasicMonitor; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.common.util.DiagnosticException; -import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.Monitor; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.common.util.UniqueEList; -import org.eclipse.emf.common.util.WrappedException; import org.eclipse.emf.converter.ConverterPlugin; import org.eclipse.emf.converter.util.ConverterUtil; import org.eclipse.emf.ecore.EPackage; @@ -32,28 +28,18 @@ import org.eclipse.emf.ecore.util.Diagnostician; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.importer.ModelImporter; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import java.io.ByteArrayInputStream; -import java.io.InputStream; import java.text.MessageFormat; import java.util.List; +/** + * @author Eike Stepper + */ public class CDOImporter extends ModelImporter { public static final String IMPORTER_ID = "org.eclipse.emf.importer.cdo"; - public static final String PLUGIN_VARIABLE = "CDO=org.eclipse.emf.cdo"; - - public static final String ROOT_EXTENDS_CLASS = "org.eclipse.emf.internal.cdo.CDOObjectImpl"; - - public static final String ROOT_EXTENDS_INTERFACE = "org.eclipse.emf.cdo.CDOObject"; - - public static final String CDO_MF_CONTENTS = "This is a marker file for bundles with CDO native models.\n"; - public CDOImporter() { } @@ -128,55 +114,15 @@ public class CDOImporter extends ModelImporter { super.adjustGenModel(monitor); + GenModel genModel = getGenModel(); URI genModelURI = createFileURI(getGenModelPath().toString()); for (URI uri : getModelLocationURIs()) { - GenModel genModel = getGenModel(); genModel.getForeignModel().add(makeRelative(uri, genModelURI).toString()); - adjustGenModelCDO(genModel, monitor); - } - } - - protected void adjustGenModelCDO(GenModel genModel, Monitor monitor) - { - genModel.setFeatureDelegation(GenDelegationKind.REFLECTIVE_LITERAL); - genModel.setRootExtendsClass(ROOT_EXTENDS_CLASS); - genModel.setRootExtendsInterface(ROOT_EXTENDS_INTERFACE); - - EList<String> pluginVariables = genModel.getModelPluginVariables(); - if (!pluginVariables.contains(PLUGIN_VARIABLE)) - { - pluginVariables.add(PLUGIN_VARIABLE); } - String projectName = getModelProjectName(); - IProject project = getWorkspaceRoot().getProject(projectName); - IFolder folder = project.getFolder("META-INF"); - if (!folder.exists()) - { - try - { - folder.create(true, true, BasicMonitor.toIProgressMonitor(monitor)); - } - catch (CoreException ex) - { - throw new WrappedException(ex); - } - } - - IFile file = folder.getFile("CDO.MF"); - if (!file.exists()) - { - try - { - InputStream contents = new ByteArrayInputStream(CDO_MF_CONTENTS.getBytes()); - file.create(contents, true, BasicMonitor.toIProgressMonitor(monitor)); - } - catch (CoreException ex) - { - throw new WrappedException(ex); - } - } + IProject project = getWorkspaceRoot().getProject(getModelProjectName()); + CDOMigrator.adjustGenModel(genModel, project); } @Override diff --git a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/migrator/CDOMigrator.java b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/migrator/CDOMigrator.java new file mode 100644 index 0000000000..7033b300c9 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/migrator/CDOMigrator.java @@ -0,0 +1,83 @@ +/*************************************************************************** + * Copyright (c) 2004 - 2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.migrator; + +import org.eclipse.emf.codegen.ecore.genmodel.GenDelegationKind; +import org.eclipse.emf.codegen.ecore.genmodel.GenModel; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.WrappedException; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.NullProgressMonitor; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; + +/** + * @author Eike Stepper + */ +public abstract class CDOMigrator +{ + public static final String ROOT_EXTENDS_CLASS = "org.eclipse.emf.internal.cdo.CDOObjectImpl"; + + public static final String ROOT_EXTENDS_INTERFACE = "org.eclipse.emf.cdo.CDOObject"; + + public static final String PLUGIN_VARIABLE = "CDO=org.eclipse.emf.cdo"; + + public static final String CDO_MF_CONTENTS = "This is a marker file for bundles with CDO native models.\n"; + + private CDOMigrator() + { + } + + public static void adjustGenModel(GenModel genModel, IProject project) + { + genModel.setFeatureDelegation(GenDelegationKind.REFLECTIVE_LITERAL); + genModel.setRootExtendsClass(ROOT_EXTENDS_CLASS); + genModel.setRootExtendsInterface(ROOT_EXTENDS_INTERFACE); + + EList<String> pluginVariables = genModel.getModelPluginVariables(); + if (!pluginVariables.contains(PLUGIN_VARIABLE)) + { + pluginVariables.add(PLUGIN_VARIABLE); + } + + IFolder folder = project.getFolder("META-INF"); + if (!folder.exists()) + { + try + { + folder.create(true, true, new NullProgressMonitor()); + } + catch (CoreException ex) + { + throw new WrappedException(ex); + } + } + + IFile file = folder.getFile("CDO.MF"); + if (!file.exists()) + { + try + { + InputStream contents = new ByteArrayInputStream(CDO_MF_CONTENTS.getBytes()); + file.create(contents, true, new NullProgressMonitor()); + } + catch (CoreException ex) + { + throw new WrappedException(ex); + } + } + } +}
\ No newline at end of file diff --git a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/migrator/actions/MigrateAction.java b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/migrator/actions/MigrateAction.java new file mode 100644 index 0000000000..3112166d83 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/migrator/actions/MigrateAction.java @@ -0,0 +1,144 @@ +/*************************************************************************** + * Copyright (c) 2004 - 2007 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.migrator.actions; + +import org.eclipse.emf.cdo.migrator.CDOMigrator; + +import org.eclipse.emf.codegen.ecore.genmodel.GenModel; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IObjectActionDelegate; +import org.eclipse.ui.IWorkbenchPart; + +import java.util.Map; + +/** + * @author Eike Stepper + */ +public class MigrateAction implements IObjectActionDelegate +{ + @SuppressWarnings("unused") + private IAction action; + + private ISelection selection; + + public MigrateAction() + { + } + + public void selectionChanged(IAction action, ISelection selection) + { + this.action = action; + this.selection = selection; + } + + public void setActivePart(IAction action, IWorkbenchPart targetPart) + { + this.action = action; + } + + public void run(IAction action) + { + new Job("Migrating EMF model") + { + @Override + protected IStatus run(IProgressMonitor monitor) + { + try + { + IFile file = getFile(); + if (file == null) + { + MessageDialog.openError(new Shell(), "CDO Migrator", "The selected element is not a *.genmodel file."); + } + else + { + GenModel genModel = getGenModel(file); + if (genModel == null) + { + MessageDialog.openError(new Shell(), "CDO Migrator", + "The selected file does not contain a generator model."); + } + else + { + CDOMigrator.adjustGenModel(genModel, file.getProject()); + MessageDialog.openInformation(new Shell(), "CDO Migrator", + "The selected generator model has been migrated."); + } + } + } + catch (Exception ex) + { + return new Status(IStatus.ERROR, "org.eclipse.emf.cdo.migrator", "Problem while migrating EMF model", ex); + } + + return Status.OK_STATUS; + } + }.schedule(); + } + + protected IFile getFile() + { + if (selection instanceof IStructuredSelection) + { + Object element = ((IStructuredSelection)selection).getFirstElement(); + if (element instanceof IFile) + { + IFile file = (IFile)element; + if ("genmodel".equals(file.getFileExtension())) + { + return file; + } + } + } + + return null; + } + + protected GenModel getGenModel(IFile file) + { + ResourceSet resourceSet = new ResourceSetImpl(); + + Map<String, Object> map = resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap(); + map.put("*", new XMIResourceFactoryImpl()); + + URI uri = URI.createPlatformResourceURI(file.getFullPath().toString(), false); + Resource resource = resourceSet.getResource(uri, true); + + EList<EObject> contents = resource.getContents(); + if (!contents.isEmpty()) + { + EObject object = contents.get(0); + if (object instanceof GenModel) + { + return (GenModel)object; + } + } + + return null; + } +} diff --git a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/migrator/ui/CDOImporterWizard.java b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/migrator/wizards/CDOImporterWizard.java index eea3547350..20f842bf20 100644 --- a/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/migrator/ui/CDOImporterWizard.java +++ b/plugins/org.eclipse.emf.cdo.migrator/src/org/eclipse/emf/cdo/migrator/wizards/CDOImporterWizard.java @@ -8,7 +8,7 @@ * Contributors: * Eike Stepper - initial API and implementation **************************************************************************/ -package org.eclipse.emf.cdo.migrator.ui; +package org.eclipse.emf.cdo.migrator.wizards; import org.eclipse.emf.cdo.migrator.CDOImporter; @@ -17,6 +17,9 @@ import org.eclipse.emf.importer.ui.contribution.base.ModelImporterDetailPage; import org.eclipse.emf.importer.ui.contribution.base.ModelImporterPackagePage; import org.eclipse.emf.importer.ui.contribution.base.ModelImporterWizard; +/** + * @author Eike Stepper + */ public class CDOImporterWizard extends ModelImporterWizard { public CDOImporterWizard() diff --git a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/actions/LongRunningAction.java b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/actions/LongRunningAction.java index ecd0e75109..7fee4589b1 100644 --- a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/actions/LongRunningAction.java +++ b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/actions/LongRunningAction.java @@ -186,12 +186,6 @@ public abstract class LongRunningAction extends SafeAction protected abstract void doRun() throws Exception; - protected IStatus handleException(Exception ex) - { - ex.printStackTrace(); - return new Status(IStatus.ERROR, OM.BUNDLE_ID, "An error has occured.", ex); - } - protected final void checkCancelation(IProgressMonitor monitor) { if (monitor.isCanceled()) diff --git a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/actions/LongRunningActionDelegate.java b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/actions/LongRunningActionDelegate.java new file mode 100644 index 0000000000..62506bfc2e --- /dev/null +++ b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/actions/LongRunningActionDelegate.java @@ -0,0 +1,82 @@ +package org.eclipse.net4j.util.ui.actions; + +import org.eclipse.net4j.util.internal.ui.bundle.OM; +import org.eclipse.net4j.util.om.monitor.MonitorUtil; +import org.eclipse.net4j.util.om.monitor.MonitoredJob; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.OperationCanceledException; + +/** + * @author Eike Stepper + */ +public abstract class LongRunningActionDelegate extends SafeActionDelegate +{ + private int totalWork; + + public LongRunningActionDelegate() + { + } + + protected final int getTotalWork() + { + return totalWork; + } + + protected final void setTotalWork(int totalWork) + { + this.totalWork = totalWork; + } + + protected final void cancel() + { + totalWork = 0; + } + + @Override + protected final void safeRun() throws Exception + { + totalWork = IProgressMonitor.UNKNOWN; + preRun(); + if (totalWork != 0) + { + new MonitoredJob(getBundleID(), getText()) + { + @Override + protected void run() throws Exception + { + try + { + MonitorUtil.begin(totalWork); + doRun(); + } + catch (Exception ex) + { + OM.LOG.error(ex); + throw ex; + } + } + }.schedule(); + } + } + + protected void preRun() throws Exception + { + } + + protected String getBundleID() + { + return OM.BUNDLE_ID; + } + + protected abstract void doRun() throws Exception; + + protected final void checkCancelation(IProgressMonitor monitor) + { + if (monitor.isCanceled()) + { + throw new OperationCanceledException(); + } + } + +}
\ No newline at end of file diff --git a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/actions/SafeActionDelegate.java b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/actions/SafeActionDelegate.java new file mode 100644 index 0000000000..ce3d58452a --- /dev/null +++ b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/actions/SafeActionDelegate.java @@ -0,0 +1,60 @@ +package org.eclipse.net4j.util.ui.actions; + +import org.eclipse.net4j.util.internal.ui.bundle.OM; + +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.ui.IActionDelegate; + +/** + * @author Eike Stepper + */ +public abstract class SafeActionDelegate implements IActionDelegate +{ + private IAction action; + + private ISelection selection; + + public SafeActionDelegate() + { + } + + public IAction getAction() + { + return action; + } + + public ISelection getSelection() + { + return selection; + } + + public void selectionChanged(IAction action, ISelection selection) + { + this.action = action; + this.selection = selection; + } + + public void run(IAction action) + { + this.action = action; + + try + { + safeRun(); + } + catch (Exception ex) + { + OM.LOG.error(ex); + MessageDialog.openError(null, getText(), ex.getMessage() + "\nSee the Error log for details."); + } + } + + protected abstract void safeRun() throws Exception; + + protected String getText() + { + return action == null ? "Error" : action.getText(); + } +}
\ No newline at end of file |