Added: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingCreationWizardPage.java URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingCreationWizardPage.java?rev=945691&view=auto ============================================================================== --- commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingCreationWizardPage.java (added) +++ commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingCreationWizardPage.java Tue May 18 15:13:13 2010 @@ -0,0 +1,88 @@ +package org.apache.commons.scxml.modeling.diagram.part; + +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; +import org.eclipse.emf.common.util.URI; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.dialogs.WizardNewFileCreationPage; + +/** + * @generated + */ +public class ModelingCreationWizardPage extends WizardNewFileCreationPage { + + /** + * @generated + */ + private final String fileExtension; + + /** + * @generated + */ + public ModelingCreationWizardPage(String pageName, + IStructuredSelection selection, String fileExtension) { + super(pageName, selection); + this.fileExtension = fileExtension; + } + + /** + * Override to create files with this extension. + * + * @generated + */ + protected String getExtension() { + return fileExtension; + } + + /** + * @generated + */ + public URI getURI() { + return URI.createPlatformResourceURI(getFilePath().toString(), false); + } + + /** + * @generated + */ + protected IPath getFilePath() { + IPath path = getContainerFullPath(); + if (path == null) { + path = new Path(""); //$NON-NLS-1$ + } + String fileName = getFileName(); + if (fileName != null) { + path = path.append(fileName); + } + return path; + } + + /** + * @generated + */ + public void createControl(Composite parent) { + super.createControl(parent); + setFileName(ModelingDiagramEditorUtil.getUniqueFileName( + getContainerFullPath(), getFileName(), getExtension())); + setPageComplete(validatePage()); + } + + /** + * @generated + */ + protected boolean validatePage() { + if (!super.validatePage()) { + return false; + } + String extension = getExtension(); + if (extension != null + && !getFilePath().toString().endsWith("." + extension)) { + setErrorMessage(NLS.bind( + Messages.ModelingCreationWizardPageExtensionError, + extension)); + return false; + } + return true; + } +}
Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingCreationWizardPage.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramActionBarContributor.java URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramActionBarContributor.java?rev=945691&view=auto ============================================================================== --- commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramActionBarContributor.java (added) +++ commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramActionBarContributor.java Tue May 18 15:13:13 2010 @@ -0,0 +1,24 @@ +package org.apache.commons.scxml.modeling.diagram.part; + +import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramActionBarContributor; + +/** + * @generated + */ +public class ModelingDiagramActionBarContributor extends + DiagramActionBarContributor { + + /** + * @generated + */ + protected Class getEditorClass() { + return ModelingDiagramEditor.class; + } + + /** + * @generated + */ + protected String getEditorId() { + return ModelingDiagramEditor.ID; + } +} Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramActionBarContributor.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditor.java URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditor.java?rev=945691&view=auto ============================================================================== --- commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditor.java (added) +++ commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditor.java Tue May 18 15:13:13 2010 @@ -0,0 +1,289 @@ +package org.apache.commons.scxml.modeling.diagram.part; + +import org.apache.commons.scxml.modeling.diagram.navigator.ModelingNavigatorItem; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +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.emf.common.ui.URIEditorInput; +import org.eclipse.emf.transaction.TransactionalEditingDomain; +import org.eclipse.emf.workspace.util.WorkspaceSynchronizer; +import org.eclipse.gef.palette.PaletteRoot; +import org.eclipse.gmf.runtime.common.ui.services.marker.MarkerNavigationService; +import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint; +import org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds; +import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument; +import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocument; +import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider; +import org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor; +import org.eclipse.gmf.runtime.notation.Diagram; +import org.eclipse.jface.dialogs.ErrorDialog; +import org.eclipse.jface.dialogs.IMessageProvider; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.window.Window; +import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorMatchingStrategy; +import org.eclipse.ui.IEditorReference; +import org.eclipse.ui.IFileEditorInput; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.dialogs.SaveAsDialog; +import org.eclipse.ui.ide.IGotoMarker; +import org.eclipse.ui.navigator.resources.ProjectExplorer; +import org.eclipse.ui.part.FileEditorInput; +import org.eclipse.ui.part.IShowInTargetList; +import org.eclipse.ui.part.ShowInContext; + +/** + * @generated + */ +public class ModelingDiagramEditor extends DiagramDocumentEditor implements + IGotoMarker { + + /** + * @generated + */ + public static final String ID = "org.apache.commons.scxml.modeling.diagram.part.ModelingDiagramEditorID"; //$NON-NLS-1$ + + /** + * @generated + */ + public static final String CONTEXT_ID = "org.apache.commons.scxml.modeling.diagram.ui.diagramContext"; //$NON-NLS-1$ + + /** + * @generated + */ + public ModelingDiagramEditor() { + super(true); + } + + /** + * @generated + */ + protected String getContextID() { + return CONTEXT_ID; + } + + /** + * @generated + */ + protected PaletteRoot createPaletteRoot(PaletteRoot existingPaletteRoot) { + PaletteRoot root = super.createPaletteRoot(existingPaletteRoot); + new ModelingPaletteFactory().fillPalette(root); + return root; + } + + /** + * @generated + */ + protected PreferencesHint getPreferencesHint() { + return ModelingDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT; + } + + /** + * @generated + */ + public String getContributorId() { + return ModelingDiagramEditorPlugin.ID; + } + + /** + * @generated + */ + public Object getAdapter(Class type) { + if (type == IShowInTargetList.class) { + return new IShowInTargetList() { + public String[] getShowInTargetIds() { + return new String[] { ProjectExplorer.VIEW_ID }; + } + }; + } + return super.getAdapter(type); + } + + /** + * @generated + */ + protected IDocumentProvider getDocumentProvider(IEditorInput input) { + if (input instanceof IFileEditorInput + || input instanceof URIEditorInput) { + return ModelingDiagramEditorPlugin.getInstance() + .getDocumentProvider(); + } + return super.getDocumentProvider(input); + } + + /** + * @generated + */ + public TransactionalEditingDomain getEditingDomain() { + IDocument document = getEditorInput() != null ? getDocumentProvider() + .getDocument(getEditorInput()) : null; + if (document instanceof IDiagramDocument) { + return ((IDiagramDocument) document).getEditingDomain(); + } + return super.getEditingDomain(); + } + + /** + * @generated + */ + protected void setDocumentProvider(IEditorInput input) { + if (input instanceof IFileEditorInput + || input instanceof URIEditorInput) { + setDocumentProvider(ModelingDiagramEditorPlugin.getInstance() + .getDocumentProvider()); + } else { + super.setDocumentProvider(input); + } + } + + /** + * @generated + */ + public void gotoMarker(IMarker marker) { + MarkerNavigationService.getInstance().gotoMarker(this, marker); + } + + /** + * @generated + */ + public boolean isSaveAsAllowed() { + return true; + } + + /** + * @generated + */ + public void doSaveAs() { + performSaveAs(new NullProgressMonitor()); + } + + /** + * @generated + */ + protected void performSaveAs(IProgressMonitor progressMonitor) { + Shell shell = getSite().getShell(); + IEditorInput input = getEditorInput(); + SaveAsDialog dialog = new SaveAsDialog(shell); + IFile original = input instanceof IFileEditorInput ? ((IFileEditorInput) input) + .getFile() + : null; + if (original != null) { + dialog.setOriginalFile(original); + } + dialog.create(); + IDocumentProvider provider = getDocumentProvider(); + if (provider == null) { + // editor has been programmatically closed while the dialog was open + return; + } + if (provider.isDeleted(input) && original != null) { + String message = NLS.bind( + Messages.ModelingDiagramEditor_SavingDeletedFile, original + .getName()); + dialog.setErrorMessage(null); + dialog.setMessage(message, IMessageProvider.WARNING); + } + if (dialog.open() == Window.CANCEL) { + if (progressMonitor != null) { + progressMonitor.setCanceled(true); + } + return; + } + IPath filePath = dialog.getResult(); + if (filePath == null) { + if (progressMonitor != null) { + progressMonitor.setCanceled(true); + } + return; + } + IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); + IFile file = workspaceRoot.getFile(filePath); + final IEditorInput newInput = new FileEditorInput(file); + // Check if the editor is already open + IEditorMatchingStrategy matchingStrategy = getEditorDescriptor() + .getEditorMatchingStrategy(); + IEditorReference[] editorRefs = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getActivePage() + .getEditorReferences(); + for (int i = 0; i < editorRefs.length; i++) { + if (matchingStrategy.matches(editorRefs[i], newInput)) { + MessageDialog.openWarning(shell, + Messages.ModelingDiagramEditor_SaveAsErrorTitle, + Messages.ModelingDiagramEditor_SaveAsErrorMessage); + return; + } + } + boolean success = false; + try { + provider.aboutToChange(newInput); + getDocumentProvider(newInput).saveDocument(progressMonitor, + newInput, + getDocumentProvider().getDocument(getEditorInput()), true); + success = true; + } catch (CoreException x) { + IStatus status = x.getStatus(); + if (status == null || status.getSeverity() != IStatus.CANCEL) { + ErrorDialog.openError(shell, + Messages.ModelingDiagramEditor_SaveErrorTitle, + Messages.ModelingDiagramEditor_SaveErrorMessage, x + .getStatus()); + } + } finally { + provider.changed(newInput); + if (success) { + setInput(newInput); + } + } + if (progressMonitor != null) { + progressMonitor.setCanceled(!success); + } + } + + /** + * @generated + */ + public ShowInContext getShowInContext() { + return new ShowInContext(getEditorInput(), getNavigatorSelection()); + } + + /** + * @generated + */ + private ISelection getNavigatorSelection() { + IDiagramDocument document = getDiagramDocument(); + if (document == null) { + return StructuredSelection.EMPTY; + } + Diagram diagram = document.getDiagram(); + IFile file = WorkspaceSynchronizer.getFile(diagram.eResource()); + if (file != null) { + ModelingNavigatorItem item = new ModelingNavigatorItem(diagram, + file, false); + return new StructuredSelection(item); + } + return StructuredSelection.EMPTY; + } + + /** + * @generated + */ + protected void configureGraphicalViewer() { + super.configureGraphicalViewer(); + DiagramEditorContextMenuProvider provider = new DiagramEditorContextMenuProvider( + this, getDiagramGraphicalViewer()); + getDiagramGraphicalViewer().setContextMenu(provider); + getSite().registerContextMenu(ActionIds.DIAGRAM_EDITOR_CONTEXT_MENU, + provider, getDiagramGraphicalViewer()); + } + +} Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditor.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditorPlugin.java URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditorPlugin.java?rev=945691&view=auto ============================================================================== --- commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditorPlugin.java (added) +++ commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditorPlugin.java Tue May 18 15:13:13 2010 @@ -0,0 +1,248 @@ +package org.apache.commons.scxml.modeling.diagram.part; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.scxml.modeling.provider.ModelingItemProviderAdapterFactory; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.edit.provider.ComposedAdapterFactory; +import org.eclipse.emf.edit.provider.IItemLabelProvider; +import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory; +import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory; +import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry; +import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.swt.graphics.Image; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +/** + * @generated + */ +public class ModelingDiagramEditorPlugin extends AbstractUIPlugin { + + /** + * @generated + */ + public static final String ID = "org.apache.commons.scxml.modeling.diagram"; //$NON-NLS-1$ + + /** + * @generated + */ + public static final PreferencesHint DIAGRAM_PREFERENCES_HINT = new PreferencesHint( + ID); + + /** + * @generated + */ + private static ModelingDiagramEditorPlugin instance; + + /** + * @generated + */ + private ComposedAdapterFactory adapterFactory; + + /** + * @generated + */ + private ModelingDocumentProvider documentProvider; + + /** + * @generated + */ + public ModelingDiagramEditorPlugin() { + } + + /** + * @generated + */ + public void start(BundleContext context) throws Exception { + super.start(context); + instance = this; + PreferencesHint.registerPreferenceStore(DIAGRAM_PREFERENCES_HINT, + getPreferenceStore()); + adapterFactory = createAdapterFactory(); + } + + /** + * @generated + */ + public void stop(BundleContext context) throws Exception { + adapterFactory.dispose(); + adapterFactory = null; + instance = null; + super.stop(context); + } + + /** + * @generated + */ + public static ModelingDiagramEditorPlugin getInstance() { + return instance; + } + + /** + * @generated + */ + protected ComposedAdapterFactory createAdapterFactory() { + List factories = new ArrayList(); + fillItemProviderFactories(factories); + return new ComposedAdapterFactory(factories); + } + + /** + * @generated + */ + protected void fillItemProviderFactories(List factories) { + factories.add(new ModelingItemProviderAdapterFactory()); + factories.add(new ResourceItemProviderAdapterFactory()); + factories.add(new ReflectiveItemProviderAdapterFactory()); + } + + /** + * @generated + */ + public AdapterFactory getItemProvidersAdapterFactory() { + return adapterFactory; + } + + /** + * @generated + */ + public ImageDescriptor getItemImageDescriptor(Object item) { + IItemLabelProvider labelProvider = (IItemLabelProvider) adapterFactory + .adapt(item, IItemLabelProvider.class); + if (labelProvider != null) { + return ExtendedImageRegistry.getInstance().getImageDescriptor( + labelProvider.getImage(item)); + } + return null; + } + + /** + * Returns an image descriptor for the image file at the given + * plug-in relative path. + * + * @generated + * @param path the path + * @return the image descriptor + */ + public static ImageDescriptor getBundledImageDescriptor(String path) { + return AbstractUIPlugin.imageDescriptorFromPlugin(ID, path); + } + + /** + * Respects images residing in any plug-in. If path is relative, + * then this bundle is looked up for the image, otherwise, for absolute + * path, first segment is taken as id of plug-in with image + * + * @generated + * @param path the path to image, either absolute (with plug-in id as first segment), or relative for bundled images + * @return the image descriptor + */ + public static ImageDescriptor findImageDescriptor(String path) { + final IPath p = new Path(path); + if (p.isAbsolute() && p.segmentCount() > 1) { + return AbstractUIPlugin.imageDescriptorFromPlugin(p.segment(0), p + .removeFirstSegments(1).makeAbsolute().toString()); + } else { + return getBundledImageDescriptor(p.makeAbsolute().toString()); + } + } + + /** + * Returns an image for the image file at the given plug-in relative path. + * Client do not need to dispose this image. Images will be disposed automatically. + * + * @generated + * @param path the path + * @return image instance + */ + public Image getBundledImage(String path) { + Image image = getImageRegistry().get(path); + if (image == null) { + getImageRegistry().put(path, getBundledImageDescriptor(path)); + image = getImageRegistry().get(path); + } + return image; + } + + /** + * Returns string from plug-in's resource bundle + * + * @generated + */ + public static String getString(String key) { + return Platform.getResourceString(getInstance().getBundle(), "%" + key); //$NON-NLS-1$ + } + + /** + * @generated + */ + public ModelingDocumentProvider getDocumentProvider() { + if (documentProvider == null) { + documentProvider = new ModelingDocumentProvider(); + } + return documentProvider; + } + + /** + * @generated + */ + public void logError(String error) { + logError(error, null); + } + + /** + * @generated + */ + public void logError(String error, Throwable throwable) { + if (error == null && throwable != null) { + error = throwable.getMessage(); + } + getLog().log( + new Status(IStatus.ERROR, ModelingDiagramEditorPlugin.ID, + IStatus.OK, error, throwable)); + debug(error, throwable); + } + + /** + * @generated + */ + public void logInfo(String message) { + logInfo(message, null); + } + + /** + * @generated + */ + public void logInfo(String message, Throwable throwable) { + if (message == null && throwable != null) { + message = throwable.getMessage(); + } + getLog().log( + new Status(IStatus.INFO, ModelingDiagramEditorPlugin.ID, + IStatus.OK, message, throwable)); + debug(message, throwable); + } + + /** + * @generated + */ + private void debug(String message, Throwable throwable) { + if (!isDebugging()) { + return; + } + if (message != null) { + System.err.println(message); + } + if (throwable != null) { + throwable.printStackTrace(); + } + } +} Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditorPlugin.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditorUtil.java URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditorUtil.java?rev=945691&view=auto ============================================================================== --- commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditorUtil.java (added) +++ commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditorUtil.java Tue May 18 15:13:13 2010 @@ -0,0 +1,430 @@ +package org.apache.commons.scxml.modeling.diagram.part; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.scxml.modeling.diagram.edit.parts.ServiceTemplateEditPart; +import org.apache.commons.scxml.modeling.ModelingFactory; +import org.apache.commons.scxml.modeling.ServiceTemplate; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.operations.OperationHistoryFactory; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.SubProgressMonitor; +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.xmi.XMLResource; +import org.eclipse.emf.transaction.TransactionalEditingDomain; +import org.eclipse.emf.workspace.util.WorkspaceSynchronizer; +import org.eclipse.gef.EditPart; +import org.eclipse.gmf.runtime.common.core.command.CommandResult; +import org.eclipse.gmf.runtime.diagram.core.services.ViewService; +import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IPrimaryEditPart; +import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramGraphicalViewer; +import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart; +import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand; +import org.eclipse.gmf.runtime.emf.core.GMFEditingDomainFactory; +import org.eclipse.gmf.runtime.emf.core.util.EMFCoreUtil; +import org.eclipse.gmf.runtime.notation.Diagram; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.part.FileEditorInput; + +/** + * @generated + */ +public class ModelingDiagramEditorUtil { + + /** + * @generated + */ + public static Map getSaveOptions() { + Map saveOptions = new HashMap(); + saveOptions.put(XMLResource.OPTION_ENCODING, "UTF-8"); //$NON-NLS-1$ + saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, + Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER); + return saveOptions; + } + + /** + * @generated + */ + public static boolean openDiagram(Resource diagram) + throws PartInitException { + String path = diagram.getURI().toPlatformString(true); + IResource workspaceResource = ResourcesPlugin.getWorkspace().getRoot() + .findMember(new Path(path)); + if (workspaceResource instanceof IFile) { + IWorkbenchPage page = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getActivePage(); + return null != page.openEditor(new FileEditorInput( + (IFile) workspaceResource), ModelingDiagramEditor.ID); + } + return false; + } + + /** + * @generated + */ + public static void setCharset(IFile file) { + if (file == null) { + return; + } + try { + file.setCharset("UTF-8", new NullProgressMonitor()); //$NON-NLS-1$ + } catch (CoreException e) { + ModelingDiagramEditorPlugin.getInstance().logError( + "Unable to set charset for file " + file.getFullPath(), e); //$NON-NLS-1$ + } + } + + /** + * @generated + */ + public static String getUniqueFileName(IPath containerFullPath, + String fileName, String extension) { + if (containerFullPath == null) { + containerFullPath = new Path(""); //$NON-NLS-1$ + } + if (fileName == null || fileName.trim().length() == 0) { + fileName = "default"; //$NON-NLS-1$ + } + IPath filePath = containerFullPath.append(fileName); + if (extension != null && !extension.equals(filePath.getFileExtension())) { + filePath = filePath.addFileExtension(extension); + } + extension = filePath.getFileExtension(); + fileName = filePath.removeFileExtension().lastSegment(); + int i = 1; + while (ResourcesPlugin.getWorkspace().getRoot().exists(filePath)) { + i++; + filePath = containerFullPath.append(fileName + i); + if (extension != null) { + filePath = filePath.addFileExtension(extension); + } + } + return filePath.lastSegment(); + } + + /** + * Runs the wizard in a dialog. + * + * @generated + */ + public static void runWizard(Shell shell, Wizard wizard, String settingsKey) { + IDialogSettings pluginDialogSettings = ModelingDiagramEditorPlugin + .getInstance().getDialogSettings(); + IDialogSettings wizardDialogSettings = pluginDialogSettings + .getSection(settingsKey); + if (wizardDialogSettings == null) { + wizardDialogSettings = pluginDialogSettings + .addNewSection(settingsKey); + } + wizard.setDialogSettings(wizardDialogSettings); + WizardDialog dialog = new WizardDialog(shell, wizard); + dialog.create(); + dialog.getShell().setSize(Math.max(500, dialog.getShell().getSize().x), + 500); + dialog.open(); + } + + /** + * This method should be called within a workspace modify operation since it creates resources. + * @generated + */ + public static Resource createDiagram(URI diagramURI, URI modelURI, + IProgressMonitor progressMonitor) { + TransactionalEditingDomain editingDomain = GMFEditingDomainFactory.INSTANCE + .createEditingDomain(); + progressMonitor + .beginTask( + Messages.ModelingDiagramEditorUtil_CreateDiagramProgressTask, + 3); + final Resource diagramResource = editingDomain.getResourceSet() + .createResource(diagramURI); + final Resource modelResource = editingDomain.getResourceSet() + .createResource(modelURI); + final String diagramName = diagramURI.lastSegment(); + AbstractTransactionalCommand command = new AbstractTransactionalCommand( + editingDomain, + Messages.ModelingDiagramEditorUtil_CreateDiagramCommandLabel, + Collections.EMPTY_LIST) { + protected CommandResult doExecuteWithResult( + IProgressMonitor monitor, IAdaptable info) + throws ExecutionException { + ServiceTemplate model = createInitialModel(); + attachModelToResource(model, modelResource); + + Diagram diagram = ViewService.createDiagram(model, + ServiceTemplateEditPart.MODEL_ID, + ModelingDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT); + if (diagram != null) { + diagramResource.getContents().add(diagram); + diagram.setName(diagramName); + diagram.setElement(model); + } + + try { + modelResource + .save(org.apache.commons.scxml.modeling.diagram.part.ModelingDiagramEditorUtil + .getSaveOptions()); + diagramResource + .save(org.apache.commons.scxml.modeling.diagram.part.ModelingDiagramEditorUtil + .getSaveOptions()); + } catch (IOException e) { + + ModelingDiagramEditorPlugin.getInstance().logError( + "Unable to store model and diagram resources", e); //$NON-NLS-1$ + } + return CommandResult.newOKCommandResult(); + } + }; + try { + OperationHistoryFactory.getOperationHistory().execute(command, + new SubProgressMonitor(progressMonitor, 1), null); + } catch (ExecutionException e) { + ModelingDiagramEditorPlugin.getInstance().logError( + "Unable to create model and diagram", e); //$NON-NLS-1$ + } + setCharset(WorkspaceSynchronizer.getFile(modelResource)); + setCharset(WorkspaceSynchronizer.getFile(diagramResource)); + return diagramResource; + } + + /** + * Create a new instance of domain element associated with canvas. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + private static ServiceTemplate createInitialModel() { + return ModelingFactory.eINSTANCE.createServiceTemplate(); + } + + /** + * Store model element in the resource. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + private static void attachModelToResource(ServiceTemplate model, + Resource resource) { + resource.getContents().add(model); + } + + /** + * @generated + */ + public static void selectElementsInDiagram( + IDiagramWorkbenchPart diagramPart, List/*EditPart*/editParts) { + diagramPart.getDiagramGraphicalViewer().deselectAll(); + + EditPart firstPrimary = null; + for (Iterator it = editParts.iterator(); it.hasNext();) { + EditPart nextPart = (EditPart) it.next(); + diagramPart.getDiagramGraphicalViewer().appendSelection(nextPart); + if (firstPrimary == null && nextPart instanceof IPrimaryEditPart) { + firstPrimary = nextPart; + } + } + + if (!editParts.isEmpty()) { + diagramPart.getDiagramGraphicalViewer().reveal( + firstPrimary != null ? firstPrimary : (EditPart) editParts + .get(0)); + } + } + + /** + * @generated + */ + private static int findElementsInDiagramByID(DiagramEditPart diagramPart, + EObject element, List editPartCollector) { + IDiagramGraphicalViewer viewer = (IDiagramGraphicalViewer) diagramPart + .getViewer(); + final int intialNumOfEditParts = editPartCollector.size(); + + if (element instanceof View) { // support notation element lookup + EditPart editPart = (EditPart) viewer.getEditPartRegistry().get( + element); + if (editPart != null) { + editPartCollector.add(editPart); + return 1; + } + } + + String elementID = EMFCoreUtil.getProxyID(element); + List associatedParts = viewer.findEditPartsForElement(elementID, + IGraphicalEditPart.class); + // perform the possible hierarchy disjoint -> take the top-most parts only + for (Iterator editPartIt = associatedParts.iterator(); editPartIt + .hasNext();) { + EditPart nextPart = (EditPart) editPartIt.next(); + EditPart parentPart = nextPart.getParent(); + while (parentPart != null && !associatedParts.contains(parentPart)) { + parentPart = parentPart.getParent(); + } + if (parentPart == null) { + editPartCollector.add(nextPart); + } + } + + if (intialNumOfEditParts == editPartCollector.size()) { + if (!associatedParts.isEmpty()) { + editPartCollector.add(associatedParts.iterator().next()); + } else { + if (element.eContainer() != null) { + return findElementsInDiagramByID(diagramPart, element + .eContainer(), editPartCollector); + } + } + } + return editPartCollector.size() - intialNumOfEditParts; + } + + /** + * @generated + */ + public static View findView(DiagramEditPart diagramEditPart, + EObject targetElement, LazyElement2ViewMap lazyElement2ViewMap) { + boolean hasStructuralURI = false; + if (targetElement.eResource() instanceof XMLResource) { + hasStructuralURI = ((XMLResource) targetElement.eResource()) + .getID(targetElement) == null; + } + + View view = null; + if (hasStructuralURI + && !lazyElement2ViewMap.getElement2ViewMap().isEmpty()) { + view = (View) lazyElement2ViewMap.getElement2ViewMap().get( + targetElement); + } else if (findElementsInDiagramByID(diagramEditPart, targetElement, + lazyElement2ViewMap.editPartTmpHolder) > 0) { + EditPart editPart = (EditPart) lazyElement2ViewMap.editPartTmpHolder + .get(0); + lazyElement2ViewMap.editPartTmpHolder.clear(); + view = editPart.getModel() instanceof View ? (View) editPart + .getModel() : null; + } + + return (view == null) ? diagramEditPart.getDiagramView() : view; + } + + /** + * @generated + */ + public static class LazyElement2ViewMap { + /** + * @generated + */ + private Map element2ViewMap; + + /** + * @generated + */ + private View scope; + + /** + * @generated + */ + private Set elementSet; + + /** + * @generated + */ + public final List editPartTmpHolder = new ArrayList(); + + /** + * @generated + */ + public LazyElement2ViewMap(View scope, Set elements) { + this.scope = scope; + this.elementSet = elements; + } + + /** + * @generated + */ + public final Map getElement2ViewMap() { + if (element2ViewMap == null) { + element2ViewMap = new HashMap(); + // map possible notation elements to itself as these can't be found by view.getElement() + for (Iterator it = elementSet.iterator(); it.hasNext();) { + EObject element = (EObject) it.next(); + if (element instanceof View) { + View view = (View) element; + if (view.getDiagram() == scope.getDiagram()) { + element2ViewMap.put(element, element); // take only those that part of our diagram + } + } + } + + buildElement2ViewMap(scope, element2ViewMap, elementSet); + } + return element2ViewMap; + } + + /** + * @generated + */ + static Map buildElement2ViewMap(View parentView, Map element2ViewMap, + Set elements) { + if (elements.size() == element2ViewMap.size()) + return element2ViewMap; + + if (parentView.isSetElement() + && !element2ViewMap.containsKey(parentView.getElement()) + && elements.contains(parentView.getElement())) { + element2ViewMap.put(parentView.getElement(), parentView); + if (elements.size() == element2ViewMap.size()) + return element2ViewMap; + } + + for (Iterator it = parentView.getChildren().iterator(); it + .hasNext();) { + buildElement2ViewMap((View) it.next(), element2ViewMap, + elements); + if (elements.size() == element2ViewMap.size()) + return element2ViewMap; + } + for (Iterator it = parentView.getSourceEdges().iterator(); it + .hasNext();) { + buildElement2ViewMap((View) it.next(), element2ViewMap, + elements); + if (elements.size() == element2ViewMap.size()) + return element2ViewMap; + } + for (Iterator it = parentView.getSourceEdges().iterator(); it + .hasNext();) { + buildElement2ViewMap((View) it.next(), element2ViewMap, + elements); + if (elements.size() == element2ViewMap.size()) + return element2ViewMap; + } + return element2ViewMap; + } + } //LazyElement2ViewMap + +} Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramEditorUtil.java ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramUpdateCommand.java URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramUpdateCommand.java?rev=945691&view=auto ============================================================================== --- commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramUpdateCommand.java (added) +++ commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramUpdateCommand.java Tue May 18 15:13:13 2010 @@ -0,0 +1,85 @@ +package org.apache.commons.scxml.modeling.diagram.part; + +import java.util.Iterator; +import java.util.List; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.IHandler; +import org.eclipse.core.commands.IHandlerListener; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gef.EditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.PlatformUI; + +/** + * @generated + */ +public class ModelingDiagramUpdateCommand implements IHandler { + + /** + * @generated + */ + public void addHandlerListener(IHandlerListener handlerListener) { + } + + /** + * @generated + */ + public void dispose() { + } + + /** + * @generated + */ + public Object execute(ExecutionEvent event) throws ExecutionException { + ISelection selection = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getSelectionService() + .getSelection(); + if (selection instanceof IStructuredSelection) { + IStructuredSelection structuredSelection = (IStructuredSelection) selection; + if (structuredSelection.size() != 1) { + return null; + } + if (structuredSelection.getFirstElement() instanceof EditPart + && ((EditPart) structuredSelection.getFirstElement()) + .getModel() instanceof View) { + EObject modelElement = ((View) ((EditPart) structuredSelection + .getFirstElement()).getModel()).getElement(); + List editPolicies = CanonicalEditPolicy + .getRegisteredEditPolicies(modelElement); + for (Iterator it = editPolicies.iterator(); it.hasNext();) { + CanonicalEditPolicy nextEditPolicy = (CanonicalEditPolicy) it + .next(); + nextEditPolicy.refresh(); + } + + } + } + return null; + } + + /** + * @generated + */ + public boolean isEnabled() { + return true; + } + + /** + * @generated + */ + public boolean isHandled() { + return true; + } + + /** + * @generated + */ + public void removeHandlerListener(IHandlerListener handlerListener) { + } + +} Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramUpdateCommand.java ------------------------------------------------------------------------------ svn:eol-style = native