commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gu...@apache.org
Subject svn commit: r953071 [4/5] - /commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/
Date Wed, 09 Jun 2010 16:12:48 GMT
Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDiagramUpdater.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDocumentProvider.java
URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDocumentProvider.java?rev=953071&view=auto
==============================================================================
--- commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDocumentProvider.java (added)
+++ commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDocumentProvider.java Wed Jun  9 16:12:48 2010
@@ -0,0 +1,1140 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.scxml.modeling.diagram.part;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceStatus;
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.core.runtime.jobs.MultiRule;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.ui.URIEditorInput;
+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.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.transaction.NotificationFilter;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.diagram.core.DiagramEditingDomainFactory;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.AbstractDocumentProvider;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.DiagramDocument;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocumentProvider;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocument;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.internal.EditorStatusCodes;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.internal.util.DiagramIOUtil;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.core.resources.GMFResourceFactory;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.part.FileEditorInput;
+
+/**
+ * @generated
+ */
+public class ModelingDocumentProvider extends AbstractDocumentProvider
+		implements IDiagramDocumentProvider {
+
+	/**
+	 * @generated
+	 */
+	protected ElementInfo createElementInfo(Object element)
+			throws CoreException {
+		if (false == element instanceof FileEditorInput
+				&& false == element instanceof URIEditorInput) {
+			throw new CoreException(
+					new Status(
+							IStatus.ERROR,
+							ModelingDiagramEditorPlugin.ID,
+							0,
+							NLS
+									.bind(
+											Messages.ModelingDocumentProvider_IncorrectInputError,
+											new Object[] {
+													element,
+													"org.eclipse.ui.part.FileEditorInput", "org.eclipse.emf.common.ui.URIEditorInput" }), //$NON-NLS-1$ //$NON-NLS-2$ 
+							null));
+		}
+		IEditorInput editorInput = (IEditorInput) element;
+		IDiagramDocument document = (IDiagramDocument) createDocument(editorInput);
+
+		ResourceSetInfo info = new ResourceSetInfo(document, editorInput);
+		info.setModificationStamp(computeModificationStamp(info));
+		info.fStatus = null;
+		return info;
+	}
+
+	/**
+	 * @generated
+	 */
+	protected IDocument createDocument(Object element) throws CoreException {
+		if (false == element instanceof FileEditorInput
+				&& false == element instanceof URIEditorInput) {
+			throw new CoreException(
+					new Status(
+							IStatus.ERROR,
+							ModelingDiagramEditorPlugin.ID,
+							0,
+							NLS
+									.bind(
+											Messages.ModelingDocumentProvider_IncorrectInputError,
+											new Object[] {
+													element,
+													"org.eclipse.ui.part.FileEditorInput", "org.eclipse.emf.common.ui.URIEditorInput" }), //$NON-NLS-1$ //$NON-NLS-2$ 
+							null));
+		}
+		IDocument document = createEmptyDocument();
+		setDocumentContent(document, (IEditorInput) element);
+		setupDocument(element, document);
+		return document;
+	}
+
+	/**
+	 * Sets up the given document as it would be provided for the given element. The
+	 * content of the document is not changed. This default implementation is empty.
+	 * Subclasses may reimplement.
+	 * 
+	 * @param element the blue-print element
+	 * @param document the document to set up
+	 * @generated
+	 */
+	protected void setupDocument(Object element, IDocument document) {
+		// for subclasses
+	}
+
+	/**
+	 * @generated
+	 */
+	private long computeModificationStamp(ResourceSetInfo info) {
+		int result = 0;
+		for (Iterator/*<org.eclipse.emf.ecore.resource.Resource>*/it = info
+				.getLoadedResourcesIterator(); it.hasNext();) {
+			Resource nextResource = (Resource) it.next();
+			IFile file = WorkspaceSynchronizer.getFile(nextResource);
+			if (file != null) {
+				if (file.getLocation() != null) {
+					result += file.getLocation().toFile().lastModified();
+				} else {
+					result += file.getModificationStamp();
+				}
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * @generated
+	 */
+	protected IDocument createEmptyDocument() {
+		DiagramDocument document = new DiagramDocument();
+		document.setEditingDomain(createEditingDomain());
+		return document;
+	}
+
+	/**
+	 * @generated
+	 */
+	private TransactionalEditingDomain createEditingDomain() {
+		TransactionalEditingDomain editingDomain = DiagramEditingDomainFactory
+				.getInstance().createEditingDomain();
+		editingDomain
+				.setID("org.apache.commons.scxml.modeling.diagram.EditingDomain"); //$NON-NLS-1$
+		final NotificationFilter diagramResourceModifiedFilter = NotificationFilter
+				.createNotifierFilter(editingDomain.getResourceSet()).and(
+						NotificationFilter
+								.createEventTypeFilter(Notification.ADD)).and(
+						NotificationFilter.createFeatureFilter(
+								ResourceSet.class,
+								ResourceSet.RESOURCE_SET__RESOURCES));
+		editingDomain.getResourceSet().eAdapters().add(new Adapter() {
+
+			private Notifier myTarger;
+
+			public Notifier getTarget() {
+				return myTarger;
+			}
+
+			public boolean isAdapterForType(Object type) {
+				return false;
+			}
+
+			public void notifyChanged(Notification notification) {
+				if (diagramResourceModifiedFilter.matches(notification)) {
+					Object value = notification.getNewValue();
+					if (value instanceof Resource) {
+						((Resource) value).setTrackingModification(true);
+					}
+				}
+			}
+
+			public void setTarget(Notifier newTarget) {
+				myTarger = newTarget;
+			}
+
+		});
+
+		return editingDomain;
+	}
+
+	/**
+	 * @generated
+	 */
+	protected void setDocumentContent(IDocument document, IEditorInput element)
+			throws CoreException {
+		IDiagramDocument diagramDocument = (IDiagramDocument) document;
+		TransactionalEditingDomain domain = diagramDocument.getEditingDomain();
+		if (element instanceof FileEditorInput) {
+			IStorage storage = ((FileEditorInput) element).getStorage();
+			Diagram diagram = DiagramIOUtil.load(domain, storage, true,
+					getProgressMonitor());
+			document.setContent(diagram);
+		} else if (element instanceof URIEditorInput) {
+			URI uri = ((URIEditorInput) element).getURI();
+			Resource resource = null;
+			try {
+				resource = domain.getResourceSet().getResource(
+						uri.trimFragment(), false);
+				if (resource == null) {
+					resource = domain.getResourceSet().createResource(
+							uri.trimFragment());
+				}
+				if (!resource.isLoaded()) {
+					try {
+						Map options = new HashMap(GMFResourceFactory
+								.getDefaultLoadOptions());
+						// @see 171060 
+						// options.put(org.eclipse.emf.ecore.xmi.XMLResource.OPTION_RECORD_UNKNOWN_FEATURE, Boolean.TRUE);
+						resource.load(options);
+					} catch (IOException e) {
+						resource.unload();
+						throw e;
+					}
+				}
+				if (uri.fragment() != null) {
+					EObject rootElement = resource.getEObject(uri.fragment());
+					if (rootElement instanceof Diagram) {
+						document.setContent((Diagram) rootElement);
+						return;
+					}
+				} else {
+					for (Iterator it = resource.getContents().iterator(); it
+							.hasNext();) {
+						Object rootElement = it.next();
+						if (rootElement instanceof Diagram) {
+							document.setContent((Diagram) rootElement);
+							return;
+						}
+					}
+				}
+				throw new RuntimeException(
+						Messages.ModelingDocumentProvider_NoDiagramInResourceError);
+			} catch (Exception e) {
+				CoreException thrownExcp = null;
+				if (e instanceof CoreException) {
+					thrownExcp = (CoreException) e;
+				} else {
+					String msg = e.getLocalizedMessage();
+					thrownExcp = new CoreException(
+							new Status(
+									IStatus.ERROR,
+									ModelingDiagramEditorPlugin.ID,
+									0,
+									msg != null ? msg
+											: Messages.ModelingDocumentProvider_DiagramLoadingError,
+									e));
+				}
+				throw thrownExcp;
+			}
+		} else {
+			throw new CoreException(
+					new Status(
+							IStatus.ERROR,
+							ModelingDiagramEditorPlugin.ID,
+							0,
+							NLS
+									.bind(
+											Messages.ModelingDocumentProvider_IncorrectInputError,
+											new Object[] {
+													element,
+													"org.eclipse.ui.part.FileEditorInput", "org.eclipse.emf.common.ui.URIEditorInput" }), //$NON-NLS-1$ //$NON-NLS-2$ 
+							null));
+		}
+	}
+
+	/**
+	 * @generated
+	 */
+	public long getModificationStamp(Object element) {
+		ResourceSetInfo info = getResourceSetInfo(element);
+		if (info != null) {
+			return computeModificationStamp(info);
+		}
+		return super.getModificationStamp(element);
+	}
+
+	/**
+	 * @generated
+	 */
+	public boolean isDeleted(Object element) {
+		IDiagramDocument document = getDiagramDocument(element);
+		if (document != null) {
+			Resource diagramResource = document.getDiagram().eResource();
+			if (diagramResource != null) {
+				IFile file = WorkspaceSynchronizer.getFile(diagramResource);
+				return file == null || file.getLocation() == null
+						|| !file.getLocation().toFile().exists();
+			}
+		}
+		return super.isDeleted(element);
+	}
+
+	/**
+	 * @generated
+	 */
+	public ResourceSetInfo getResourceSetInfo(Object editorInput) {
+		return (ResourceSetInfo) super.getElementInfo(editorInput);
+	}
+
+	/**
+	 * @generated
+	 */
+	protected void disposeElementInfo(Object element, ElementInfo info) {
+		if (info instanceof ResourceSetInfo) {
+			ResourceSetInfo resourceSetInfo = (ResourceSetInfo) info;
+			resourceSetInfo.dispose();
+		}
+		super.disposeElementInfo(element, info);
+	}
+
+	/**
+	 * @generated
+	 */
+	protected void doValidateState(Object element, Object computationContext)
+			throws CoreException {
+		ResourceSetInfo info = getResourceSetInfo(element);
+		if (info != null) {
+			Collection/*<org.eclipse.core.resources.IFile>*/files2Validate = new ArrayList/*<org.eclipse.core.resources.IFile>*/();
+			for (Iterator/*<org.eclipse.emf.ecore.resource.Resource>*/it = info
+					.getLoadedResourcesIterator(); it.hasNext();) {
+				Resource nextResource = (Resource) it.next();
+				IFile file = WorkspaceSynchronizer.getFile(nextResource);
+				if (file != null && file.isReadOnly()) {
+					files2Validate.add(file);
+				}
+			}
+			ResourcesPlugin.getWorkspace().validateEdit(
+					(IFile[]) files2Validate.toArray(new IFile[files2Validate
+							.size()]), computationContext);
+		}
+
+		super.doValidateState(element, computationContext);
+	}
+
+	/**
+	 * @generated
+	 */
+	public boolean isReadOnly(Object element) {
+		ResourceSetInfo info = getResourceSetInfo(element);
+		if (info != null) {
+			if (info.isUpdateCache()) {
+				try {
+					updateCache(element);
+				} catch (CoreException ex) {
+					ModelingDiagramEditorPlugin.getInstance().logError(
+							Messages.ModelingDocumentProvider_isModifiable, ex);
+					// Error message to log was initially taken from org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide.internal.l10n.EditorMessages.StorageDocumentProvider_isModifiable
+				}
+			}
+			return info.isReadOnly();
+		}
+		return super.isReadOnly(element);
+	}
+
+	/**
+	 * @generated
+	 */
+	public boolean isModifiable(Object element) {
+		if (!isStateValidated(element)) {
+			if (element instanceof FileEditorInput
+					|| element instanceof URIEditorInput) {
+				return true;
+			}
+		}
+		ResourceSetInfo info = getResourceSetInfo(element);
+		if (info != null) {
+			if (info.isUpdateCache()) {
+				try {
+					updateCache(element);
+				} catch (CoreException ex) {
+					ModelingDiagramEditorPlugin.getInstance().logError(
+							Messages.ModelingDocumentProvider_isModifiable, ex);
+					// Error message to log was initially taken from org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide.internal.l10n.EditorMessages.StorageDocumentProvider_isModifiable
+				}
+			}
+			return info.isModifiable();
+		}
+		return super.isModifiable(element);
+	}
+
+	/**
+	 * @generated
+	 */
+	protected void updateCache(Object element) throws CoreException {
+		ResourceSetInfo info = getResourceSetInfo(element);
+		if (info != null) {
+			for (Iterator/*<org.eclipse.emf.ecore.resource.Resource>*/it = info
+					.getLoadedResourcesIterator(); it.hasNext();) {
+				Resource nextResource = (Resource) it.next();
+				IFile file = WorkspaceSynchronizer.getFile(nextResource);
+				if (file != null && file.isReadOnly()) {
+					info.setReadOnly(true);
+					info.setModifiable(false);
+					return;
+				}
+			}
+			info.setReadOnly(false);
+			info.setModifiable(true);
+			return;
+		}
+	}
+
+	/**
+	 * @generated
+	 */
+	protected void doUpdateStateCache(Object element) throws CoreException {
+		ResourceSetInfo info = getResourceSetInfo(element);
+		if (info != null) {
+			info.setUpdateCache(true);
+		}
+		super.doUpdateStateCache(element);
+	}
+
+	/**
+	 * @generated
+	 */
+	public boolean isSynchronized(Object element) {
+		ResourceSetInfo info = getResourceSetInfo(element);
+		if (info != null) {
+			return info.isSynchronized();
+		}
+		return super.isSynchronized(element);
+	}
+
+	/**
+	 * @generated
+	 */
+	protected ISchedulingRule getResetRule(Object element) {
+		ResourceSetInfo info = getResourceSetInfo(element);
+		if (info != null) {
+			Collection/*<org.eclipse.core.runtime.jobs.ISchedulingRule>*/rules = new ArrayList/*<org.eclipse.core.runtime.jobs.ISchedulingRule>*/();
+			for (Iterator/*<org.eclipse.emf.ecore.resource.Resource>*/it = info
+					.getLoadedResourcesIterator(); it.hasNext();) {
+				Resource nextResource = (Resource) it.next();
+				IFile file = WorkspaceSynchronizer.getFile(nextResource);
+				if (file != null) {
+					rules.add(ResourcesPlugin.getWorkspace().getRuleFactory()
+							.modifyRule(file));
+				}
+			}
+			return new MultiRule((ISchedulingRule[]) rules
+					.toArray(new ISchedulingRule[rules.size()]));
+		}
+		return null;
+	}
+
+	/**
+	 * @generated
+	 */
+	protected ISchedulingRule getSaveRule(Object element) {
+		ResourceSetInfo info = getResourceSetInfo(element);
+		if (info != null) {
+			Collection/*<org.eclipse.core.runtime.jobs.ISchedulingRule>*/rules = new ArrayList/*<org.eclipse.core.runtime.jobs.ISchedulingRule>*/();
+			for (Iterator/*<org.eclipse.emf.ecore.resource.Resource>*/it = info
+					.getLoadedResourcesIterator(); it.hasNext();) {
+				Resource nextResource = (Resource) it.next();
+				IFile file = WorkspaceSynchronizer.getFile(nextResource);
+				if (file != null) {
+					rules.add(computeSchedulingRule(file));
+				}
+			}
+			return new MultiRule((ISchedulingRule[]) rules
+					.toArray(new ISchedulingRule[rules.size()]));
+		}
+		return null;
+	}
+
+	/**
+	 * @generated
+	 */
+	protected ISchedulingRule getSynchronizeRule(Object element) {
+		ResourceSetInfo info = getResourceSetInfo(element);
+		if (info != null) {
+			Collection/*<org.eclipse.core.runtime.jobs.ISchedulingRule>*/rules = new ArrayList/*<org.eclipse.core.runtime.jobs.ISchedulingRule>*/();
+			for (Iterator/*<org.eclipse.emf.ecore.resource.Resource>*/it = info
+					.getLoadedResourcesIterator(); it.hasNext();) {
+				Resource nextResource = (Resource) it.next();
+				IFile file = WorkspaceSynchronizer.getFile(nextResource);
+				if (file != null) {
+					rules.add(ResourcesPlugin.getWorkspace().getRuleFactory()
+							.refreshRule(file));
+				}
+			}
+			return new MultiRule((ISchedulingRule[]) rules
+					.toArray(new ISchedulingRule[rules.size()]));
+		}
+		return null;
+	}
+
+	/**
+	 * @generated
+	 */
+	protected ISchedulingRule getValidateStateRule(Object element) {
+		ResourceSetInfo info = getResourceSetInfo(element);
+		if (info != null) {
+			Collection/*<org.eclipse.core.runtime.jobs.ISchedulingRule>*/files = new ArrayList/*<org.eclipse.core.runtime.jobs.ISchedulingRule>*/();
+			for (Iterator/*<org.eclipse.emf.ecore.resource.Resource>*/it = info
+					.getLoadedResourcesIterator(); it.hasNext();) {
+				Resource nextResource = (Resource) it.next();
+				IFile file = WorkspaceSynchronizer.getFile(nextResource);
+				if (file != null) {
+					files.add(file);
+				}
+			}
+			return ResourcesPlugin.getWorkspace().getRuleFactory()
+					.validateEditRule(
+							(IFile[]) files.toArray(new IFile[files.size()]));
+		}
+		return null;
+	}
+
+	/**
+	 * @generated
+	 */
+	private ISchedulingRule computeSchedulingRule(IResource toCreateOrModify) {
+		if (toCreateOrModify.exists())
+			return ResourcesPlugin.getWorkspace().getRuleFactory().modifyRule(
+					toCreateOrModify);
+
+		IResource parent = toCreateOrModify;
+		do {
+			/*
+			 * XXX This is a workaround for
+			 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=67601
+			 * IResourceRuleFactory.createRule should iterate the hierarchy
+			 * itself.
+			 */
+			toCreateOrModify = parent;
+			parent = toCreateOrModify.getParent();
+		} while (parent != null && !parent.exists());
+
+		return ResourcesPlugin.getWorkspace().getRuleFactory().createRule(
+				toCreateOrModify);
+	}
+
+	/**
+	 * @generated
+	 */
+	protected void doSynchronize(Object element, IProgressMonitor monitor)
+			throws CoreException {
+		ResourceSetInfo info = getResourceSetInfo(element);
+		if (info != null) {
+			for (Iterator/*<org.eclipse.emf.ecore.resource.Resource>*/it = info
+					.getLoadedResourcesIterator(); it.hasNext();) {
+				Resource nextResource = (Resource) it.next();
+				handleElementChanged(info, nextResource, monitor);
+			}
+			return;
+		}
+		super.doSynchronize(element, monitor);
+	}
+
+	/**
+	 * @generated
+	 */
+	protected void doSaveDocument(IProgressMonitor monitor, Object element,
+			IDocument document, boolean overwrite) throws CoreException {
+		ResourceSetInfo info = getResourceSetInfo(element);
+		if (info != null) {
+			if (!overwrite && !info.isSynchronized()) {
+				throw new CoreException(
+						new Status(
+								IStatus.ERROR,
+								ModelingDiagramEditorPlugin.ID,
+								IResourceStatus.OUT_OF_SYNC_LOCAL,
+								Messages.ModelingDocumentProvider_UnsynchronizedFileSaveError,
+								null));
+			}
+			info.stopResourceListening();
+			fireElementStateChanging(element);
+			try {
+				monitor.beginTask(
+						Messages.ModelingDocumentProvider_SaveDiagramTask, info
+								.getResourceSet().getResources().size() + 1); //"Saving diagram"
+				for (Iterator/*<org.eclipse.emf.ecore.resource.Resource>*/it = info
+						.getLoadedResourcesIterator(); it.hasNext();) {
+					Resource nextResource = (Resource) it.next();
+					monitor
+							.setTaskName(NLS
+									.bind(
+											Messages.ModelingDocumentProvider_SaveNextResourceTask,
+											nextResource.getURI()));
+					if (nextResource.isLoaded()
+							&& !info.getEditingDomain()
+									.isReadOnly(nextResource)) {
+						try {
+							nextResource.save(ModelingDiagramEditorUtil
+									.getSaveOptions());
+						} catch (IOException e) {
+							fireElementStateChangeFailed(element);
+							throw new CoreException(new Status(IStatus.ERROR,
+									ModelingDiagramEditorPlugin.ID,
+									EditorStatusCodes.RESOURCE_FAILURE, e
+											.getLocalizedMessage(), null));
+						}
+					}
+					monitor.worked(1);
+				}
+				monitor.done();
+				info.setModificationStamp(computeModificationStamp(info));
+			} catch (RuntimeException x) {
+				fireElementStateChangeFailed(element);
+				throw x;
+			} finally {
+				info.startResourceListening();
+			}
+		} else {
+			URI newResoruceURI;
+			List affectedFiles = null;
+			if (element instanceof FileEditorInput) {
+				IFile newFile = ((FileEditorInput) element).getFile();
+				affectedFiles = Collections.singletonList(newFile);
+				newResoruceURI = URI.createPlatformResourceURI(newFile
+						.getFullPath().toString(), true);
+			} else if (element instanceof URIEditorInput) {
+				newResoruceURI = ((URIEditorInput) element).getURI();
+			} else {
+				fireElementStateChangeFailed(element);
+				throw new CoreException(
+						new Status(
+								IStatus.ERROR,
+								ModelingDiagramEditorPlugin.ID,
+								0,
+								NLS
+										.bind(
+												Messages.ModelingDocumentProvider_IncorrectInputError,
+												new Object[] {
+														element,
+														"org.eclipse.ui.part.FileEditorInput", "org.eclipse.emf.common.ui.URIEditorInput" }), //$NON-NLS-1$ //$NON-NLS-2$ 
+								null));
+			}
+			if (false == document instanceof IDiagramDocument) {
+				fireElementStateChangeFailed(element);
+				throw new CoreException(
+						new Status(
+								IStatus.ERROR,
+								ModelingDiagramEditorPlugin.ID,
+								0,
+								"Incorrect document used: " + document + " instead of org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument", null)); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+			IDiagramDocument diagramDocument = (IDiagramDocument) document;
+			final Resource newResource = diagramDocument.getEditingDomain()
+					.getResourceSet().createResource(newResoruceURI);
+			final Diagram diagramCopy = (Diagram) EcoreUtil
+					.copy(diagramDocument.getDiagram());
+			try {
+				new AbstractTransactionalCommand(diagramDocument
+						.getEditingDomain(), NLS.bind(
+						Messages.ModelingDocumentProvider_SaveAsOperation,
+						diagramCopy.getName()), affectedFiles) {
+					protected CommandResult doExecuteWithResult(
+							IProgressMonitor monitor, IAdaptable info)
+							throws ExecutionException {
+						newResource.getContents().add(diagramCopy);
+						return CommandResult.newOKCommandResult();
+					}
+				}.execute(monitor, null);
+				newResource.save(ModelingDiagramEditorUtil.getSaveOptions());
+			} catch (ExecutionException e) {
+				fireElementStateChangeFailed(element);
+				throw new CoreException(new Status(IStatus.ERROR,
+						ModelingDiagramEditorPlugin.ID, 0, e
+								.getLocalizedMessage(), null));
+			} catch (IOException e) {
+				fireElementStateChangeFailed(element);
+				throw new CoreException(new Status(IStatus.ERROR,
+						ModelingDiagramEditorPlugin.ID, 0, e
+								.getLocalizedMessage(), null));
+			}
+			newResource.unload();
+		}
+	}
+
+	/**
+	 * @generated
+	 */
+	protected void handleElementChanged(ResourceSetInfo info,
+			Resource changedResource, IProgressMonitor monitor) {
+		IFile file = WorkspaceSynchronizer.getFile(changedResource);
+		if (file != null) {
+			try {
+				file.refreshLocal(IResource.DEPTH_INFINITE, monitor);
+			} catch (CoreException ex) {
+				ModelingDiagramEditorPlugin
+						.getInstance()
+						.logError(
+								Messages.ModelingDocumentProvider_handleElementContentChanged,
+								ex);
+				// Error message to log was initially taken from org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide.internal.l10n.EditorMessages.FileDocumentProvider_handleElementContentChanged
+			}
+		}
+		changedResource.unload();
+
+		fireElementContentAboutToBeReplaced(info.getEditorInput());
+		removeUnchangedElementListeners(info.getEditorInput(), info);
+		info.fStatus = null;
+		try {
+			setDocumentContent(info.fDocument, info.getEditorInput());
+		} catch (CoreException e) {
+			info.fStatus = e.getStatus();
+		}
+		if (!info.fCanBeSaved) {
+			info.setModificationStamp(computeModificationStamp(info));
+		}
+		addUnchangedElementListeners(info.getEditorInput(), info);
+		fireElementContentReplaced(info.getEditorInput());
+	}
+
+	/**
+	 * @generated
+	 */
+	protected void handleElementMoved(IEditorInput input, URI uri) {
+		if (input instanceof FileEditorInput) {
+			IFile newFile = ResourcesPlugin.getWorkspace().getRoot().getFile(
+					new Path(URI.decode(uri.path())).removeFirstSegments(1));
+			fireElementMoved(input, newFile == null ? null
+					: new FileEditorInput(newFile));
+			return;
+		}
+		// TODO: append suffix to the URI! (use diagram as a parameter)
+		fireElementMoved(input, new URIEditorInput(uri));
+	}
+
+	/**
+	 * @generated
+	 */
+	public IEditorInput createInputWithEditingDomain(IEditorInput editorInput,
+			TransactionalEditingDomain domain) {
+		return editorInput;
+	}
+
+	/**
+	 * @generated
+	 */
+	public IDiagramDocument getDiagramDocument(Object element) {
+		IDocument doc = getDocument(element);
+		if (doc instanceof IDiagramDocument) {
+			return (IDiagramDocument) doc;
+		}
+		return null;
+	}
+
+	/**
+	 * @generated
+	 */
+	protected IRunnableContext getOperationRunner(IProgressMonitor monitor) {
+		return null;
+	}
+
+	/**
+	 * @generated
+	 */
+	protected class ResourceSetInfo extends ElementInfo {
+
+		/**
+		 * @generated
+		 */
+		private long myModificationStamp = IResource.NULL_STAMP;
+
+		/**
+		 * @generated
+		 */
+		private WorkspaceSynchronizer mySynchronizer;
+
+		/**
+		 * @generated
+		 */
+		private Collection myUnSynchronizedResources = new ArrayList();
+
+		/**
+		 * @generated
+		 */
+		private IDiagramDocument myDocument;
+
+		/**
+		 * @generated
+		 */
+		private IEditorInput myEditorInput;
+
+		/**
+		 * @generated
+		 */
+		private boolean myUpdateCache = true;
+
+		/**
+		 * @generated
+		 */
+		private boolean myModifiable = false;
+
+		/**
+		 * @generated
+		 */
+		private boolean myReadOnly = true;
+
+		/**
+		 * @generated
+		 */
+		private ResourceSetModificationListener myResourceSetListener;
+
+		/**
+		 * @generated
+		 */
+		public ResourceSetInfo(IDiagramDocument document,
+				IEditorInput editorInput) {
+			super(document);
+			myDocument = document;
+			myEditorInput = editorInput;
+			startResourceListening();
+			myResourceSetListener = new ResourceSetModificationListener(this);
+			getResourceSet().eAdapters().add(myResourceSetListener);
+		}
+
+		/**
+		 * @generated
+		 */
+		public long getModificationStamp() {
+			return myModificationStamp;
+		}
+
+		/**
+		 * @generated
+		 */
+		public void setModificationStamp(long modificationStamp) {
+			myModificationStamp = modificationStamp;
+		}
+
+		/**
+		 * @generated
+		 */
+		public TransactionalEditingDomain getEditingDomain() {
+			return myDocument.getEditingDomain();
+		}
+
+		/**
+		 * @generated
+		 */
+		public ResourceSet getResourceSet() {
+			return getEditingDomain().getResourceSet();
+		}
+
+		/**
+		 * @generated
+		 */
+		public Iterator/*<org.eclipse.emf.ecore.resource.Resource>*/getLoadedResourcesIterator() {
+			return new ArrayList/*<org.eclipse.emf.ecore.resource.Resource>*/(
+					getResourceSet().getResources()).iterator();
+		}
+
+		/**
+		 * @generated
+		 */
+		public IEditorInput getEditorInput() {
+			return myEditorInput;
+		}
+
+		/**
+		 * @generated
+		 */
+		public void dispose() {
+			stopResourceListening();
+			getResourceSet().eAdapters().remove(myResourceSetListener);
+			for (Iterator/*<org.eclipse.emf.ecore.resource.Resource>*/it = getLoadedResourcesIterator(); it
+					.hasNext();) {
+				Resource resource = (Resource) it.next();
+				resource.unload();
+			}
+		}
+
+		/**
+		 * @generated
+		 */
+		public boolean isSynchronized() {
+			return myUnSynchronizedResources.size() == 0;
+		}
+
+		/**
+		 * @generated
+		 */
+		public void setUnSynchronized(Resource resource) {
+			myUnSynchronizedResources.add(resource);
+		}
+
+		/**
+		 * @generated
+		 */
+		public void setSynchronized(Resource resource) {
+			myUnSynchronizedResources.remove(resource);
+		}
+
+		/**
+		 * @generated
+		 */
+		public final void stopResourceListening() {
+			mySynchronizer.dispose();
+			mySynchronizer = null;
+		}
+
+		/**
+		 * @generated
+		 */
+		public final void startResourceListening() {
+			mySynchronizer = new WorkspaceSynchronizer(getEditingDomain(),
+					new SynchronizerDelegate());
+		}
+
+		/**
+		 * @generated
+		 */
+		public boolean isUpdateCache() {
+			return myUpdateCache;
+		}
+
+		/**
+		 * @generated
+		 */
+		public void setUpdateCache(boolean update) {
+			myUpdateCache = update;
+		}
+
+		/**
+		 * @generated
+		 */
+		public boolean isModifiable() {
+			return myModifiable;
+		}
+
+		/**
+		 * @generated
+		 */
+		public void setModifiable(boolean modifiable) {
+			myModifiable = modifiable;
+		}
+
+		/**
+		 * @generated
+		 */
+		public boolean isReadOnly() {
+			return myReadOnly;
+		}
+
+		/**
+		 * @generated
+		 */
+		public void setReadOnly(boolean readOnly) {
+			myReadOnly = readOnly;
+		}
+
+		/**
+		 * @generated
+		 */
+		private class SynchronizerDelegate implements
+				WorkspaceSynchronizer.Delegate {
+
+			/**
+			 * @generated
+			 */
+			public void dispose() {
+			}
+
+			/**
+			 * @generated
+			 */
+			public boolean handleResourceChanged(final Resource resource) {
+				synchronized (ResourceSetInfo.this) {
+					if (ResourceSetInfo.this.fCanBeSaved) {
+						ResourceSetInfo.this.setUnSynchronized(resource);
+						return true;
+					}
+				}
+				Display.getDefault().asyncExec(new Runnable() {
+					public void run() {
+						handleElementChanged(ResourceSetInfo.this, resource,
+								null);
+					}
+				});
+				return true;
+			}
+
+			/**
+			 * @generated
+			 */
+			public boolean handleResourceDeleted(Resource resource) {
+				synchronized (ResourceSetInfo.this) {
+					if (ResourceSetInfo.this.fCanBeSaved) {
+						ResourceSetInfo.this.setUnSynchronized(resource);
+						return true;
+					}
+				}
+				Display.getDefault().asyncExec(new Runnable() {
+					public void run() {
+						fireElementDeleted(ResourceSetInfo.this
+								.getEditorInput());
+					}
+				});
+				return true;
+			}
+
+			/**
+			 * @generated
+			 */
+			public boolean handleResourceMoved(Resource resource,
+					final URI newURI) {
+				synchronized (ResourceSetInfo.this) {
+					if (ResourceSetInfo.this.fCanBeSaved) {
+						ResourceSetInfo.this.setUnSynchronized(resource);
+						return true;
+					}
+				}
+				if (myDocument.getDiagram().eResource() == resource) {
+					Display.getDefault().asyncExec(new Runnable() {
+						public void run() {
+							handleElementMoved(ResourceSetInfo.this
+									.getEditorInput(), newURI);
+						}
+					});
+				} else {
+					handleResourceDeleted(resource);
+				}
+				return true;
+			}
+
+		}
+
+	}
+
+	/**
+	 * @generated
+	 */
+	private class ResourceSetModificationListener extends EContentAdapter {
+
+		/**
+		 * @generated
+		 */
+		private NotificationFilter myModifiedFilter;
+
+		/**
+		 * @generated
+		 */
+		private ResourceSetInfo myInfo;
+
+		/**
+		 * @generated
+		 */
+		public ResourceSetModificationListener(ResourceSetInfo info) {
+			myInfo = info;
+			myModifiedFilter = NotificationFilter.createEventTypeFilter(
+					Notification.SET).or(
+					NotificationFilter
+							.createEventTypeFilter(Notification.UNSET)).and(
+					NotificationFilter.createFeatureFilter(Resource.class,
+							Resource.RESOURCE__IS_MODIFIED));
+		}
+
+		/**
+		 * @generated
+		 */
+		public void notifyChanged(Notification notification) {
+			if (notification.getNotifier() instanceof ResourceSet) {
+				super.notifyChanged(notification);
+			}
+			if (!notification.isTouch()
+					&& myModifiedFilter.matches(notification)) {
+				if (notification.getNotifier() instanceof Resource) {
+					Resource resource = (Resource) notification.getNotifier();
+					if (resource.isLoaded()) {
+						boolean modified = false;
+						for (Iterator/*<org.eclipse.emf.ecore.resource.Resource>*/it = myInfo
+								.getLoadedResourcesIterator(); it.hasNext()
+								&& !modified;) {
+							Resource nextResource = (Resource) it.next();
+							if (nextResource.isLoaded()) {
+								modified = nextResource.isModified();
+							}
+						}
+						boolean dirtyStateChanged = false;
+						synchronized (myInfo) {
+							if (modified != myInfo.fCanBeSaved) {
+								myInfo.fCanBeSaved = modified;
+								dirtyStateChanged = true;
+							}
+							if (!resource.isModified()) {
+								myInfo.setSynchronized(resource);
+							}
+						}
+						if (dirtyStateChanged) {
+							fireElementDirtyStateChanged(myInfo
+									.getEditorInput(), modified);
+
+							if (!modified) {
+								myInfo
+										.setModificationStamp(computeModificationStamp(myInfo));
+							}
+						}
+					}
+				}
+			}
+		}
+
+	}
+
+}

Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDocumentProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDomainModelElementTester.java
URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDomainModelElementTester.java?rev=953071&view=auto
==============================================================================
--- commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDomainModelElementTester.java (added)
+++ commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDomainModelElementTester.java Wed Jun  9 16:12:48 2010
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.scxml.modeling.diagram.part;
+
+import org.apache.commons.scxml.modeling.ModelingPackage;
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * @generated
+ */
+public class ModelingDomainModelElementTester extends PropertyTester {
+
+	/**
+	 * @generated
+	 */
+	public boolean test(Object receiver, String method, Object[] args,
+			Object expectedValue) {
+		if (false == receiver instanceof EObject) {
+			return false;
+		}
+		EObject eObject = (EObject) receiver;
+		EClass eClass = eObject.eClass();
+		if (eClass == ModelingPackage.eINSTANCE.getNamedElement()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getState()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getTransition()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getAssign()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getServiceTemplate()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getExecutableContent()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getOnEntry()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getOnExit()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getInitialState()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getFinalState()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getParallel()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getHistoryState()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getRaise()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getIf()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getElseIf()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getElse()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getLog()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getExtenExecContent()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getDataModel()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getData()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getValidate()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getParam()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getScript()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getAnchor()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getSend()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getCancel()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getContent()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getDonedata()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getInvoke()) {
+			return true;
+		}
+		if (eClass == ModelingPackage.eINSTANCE.getFinalize()) {
+			return true;
+		}
+		return false;
+	}
+
+}

Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingDomainModelElementTester.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingInitDiagramFileAction.java
URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingInitDiagramFileAction.java?rev=953071&view=auto
==============================================================================
--- commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingInitDiagramFileAction.java (added)
+++ commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingInitDiagramFileAction.java Wed Jun  9 16:12:48 2010
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.scxml.modeling.diagram.part;
+
+import org.apache.commons.scxml.modeling.diagram.edit.parts.ServiceTemplateEditPart;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.common.util.WrappedException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.emf.core.GMFEditingDomainFactory;
+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.jface.wizard.Wizard;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+
+/**
+ * @generated
+ */
+public class ModelingInitDiagramFileAction implements IObjectActionDelegate {
+
+	/**
+	 * @generated
+	 */
+	private IWorkbenchPart targetPart;
+
+	/**
+	 * @generated
+	 */
+	private URI domainModelURI;
+
+	/**
+	 * @generated
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		this.targetPart = targetPart;
+	}
+
+	/**
+	 * @generated
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		domainModelURI = null;
+		action.setEnabled(false);
+		if (selection instanceof IStructuredSelection == false
+				|| selection.isEmpty()) {
+			return;
+		}
+		IFile file = (IFile) ((IStructuredSelection) selection)
+				.getFirstElement();
+		domainModelURI = URI.createPlatformResourceURI(file.getFullPath()
+				.toString(), true);
+		action.setEnabled(true);
+	}
+
+	/**
+	 * @generated
+	 */
+	private Shell getShell() {
+		return targetPart.getSite().getShell();
+	}
+
+	/**
+	 * @generated
+	 */
+	public void run(IAction action) {
+		TransactionalEditingDomain editingDomain = GMFEditingDomainFactory.INSTANCE
+				.createEditingDomain();
+		ResourceSet resourceSet = editingDomain.getResourceSet();
+		EObject diagramRoot = null;
+		try {
+			Resource resource = resourceSet.getResource(domainModelURI, true);
+			diagramRoot = (EObject) resource.getContents().get(0);
+		} catch (WrappedException ex) {
+			ModelingDiagramEditorPlugin.getInstance().logError(
+					"Unable to load resource: " + domainModelURI, ex); //$NON-NLS-1$
+		}
+		if (diagramRoot == null) {
+			MessageDialog
+					.openError(
+							getShell(),
+							Messages.ModelingInitDiagramFileAction_InitDiagramFileResourceErrorDialogTitle,
+							Messages.ModelingInitDiagramFileAction_InitDiagramFileResourceErrorDialogMessage);
+			return;
+		}
+		Wizard wizard = new ModelingNewDiagramFileWizard(domainModelURI,
+				diagramRoot, editingDomain);
+		wizard
+				.setWindowTitle(NLS
+						.bind(
+								Messages.ModelingInitDiagramFileAction_InitDiagramFileWizardTitle,
+								ServiceTemplateEditPart.MODEL_ID));
+		ModelingDiagramEditorUtil.runWizard(getShell(), wizard,
+				"InitDiagramFile"); //$NON-NLS-1$
+	}
+}

Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingInitDiagramFileAction.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingLinkDescriptor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingLinkDescriptor.java?rev=953071&view=auto
==============================================================================
--- commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingLinkDescriptor.java (added)
+++ commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingLinkDescriptor.java Wed Jun  9 16:12:48 2010
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.scxml.modeling.diagram.part;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+
+/**
+ * @generated
+ */
+public class ModelingLinkDescriptor extends ModelingNodeDescriptor {
+
+	/**
+	 * @generated
+	 */
+	private EObject mySource;
+
+	/**
+	 * @generated
+	 */
+	private EObject myDestination;
+
+	/**
+	 * @generated
+	 */
+	private IAdaptable mySemanticAdapter;
+
+	/**
+	 * @generated
+	 */
+	private ModelingLinkDescriptor(EObject source, EObject destination,
+			EObject linkElement, int linkVID) {
+		super(linkElement, linkVID);
+		mySource = source;
+		myDestination = destination;
+	}
+
+	/**
+	 * @generated
+	 */
+	public ModelingLinkDescriptor(EObject source, EObject destination,
+			IElementType elementType, int linkVID) {
+		this(source, destination, (EObject) null, linkVID);
+		final IElementType elementTypeCopy = elementType;
+		mySemanticAdapter = new IAdaptable() {
+			public Object getAdapter(Class adapter) {
+				if (IElementType.class.equals(adapter)) {
+					return elementTypeCopy;
+				}
+				return null;
+			}
+		};
+	}
+
+	/**
+	 * @generated
+	 */
+	public ModelingLinkDescriptor(EObject source, EObject destination,
+			EObject linkElement, IElementType elementType, int linkVID) {
+		this(source, destination, linkElement, linkVID);
+		final IElementType elementTypeCopy = elementType;
+		mySemanticAdapter = new EObjectAdapter(linkElement) {
+			public Object getAdapter(Class adapter) {
+				if (IElementType.class.equals(adapter)) {
+					return elementTypeCopy;
+				}
+				return super.getAdapter(adapter);
+			}
+		};
+	}
+
+	/**
+	 * @generated
+	 */
+	public EObject getSource() {
+		return mySource;
+	}
+
+	/**
+	 * @generated
+	 */
+	public EObject getDestination() {
+		return myDestination;
+	}
+
+	/**
+	 * @generated
+	 */
+	public IAdaptable getSemanticAdapter() {
+		return mySemanticAdapter;
+	}
+
+}

Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingLinkDescriptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingLoadResourceAction.java
URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingLoadResourceAction.java?rev=953071&view=auto
==============================================================================
--- commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingLoadResourceAction.java (added)
+++ commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingLoadResourceAction.java Wed Jun  9 16:12:48 2010
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.scxml.modeling.diagram.part;
+
+import org.apache.commons.scxml.modeling.diagram.edit.parts.ServiceTemplateEditPart;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.jface.action.IAction;
+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;
+
+/**
+ * @generated
+ */
+public class ModelingLoadResourceAction implements IObjectActionDelegate {
+
+	/**
+	 * @generated
+	 */
+	private ServiceTemplateEditPart mySelectedElement;
+
+	/**
+	 * @generated
+	 */
+	private Shell myShell;
+
+	/**
+	 * @generated
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		myShell = targetPart.getSite().getShell();
+	}
+
+	/**
+	 * @generated
+	 */
+	public void run(IAction action) {
+		LoadResourceAction.LoadResourceDialog loadResourceDialog = new LoadResourceAction.LoadResourceDialog(
+				myShell, mySelectedElement.getEditingDomain());
+		loadResourceDialog.open();
+	}
+
+	/**
+	 * @generated
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		mySelectedElement = null;
+		if (selection instanceof IStructuredSelection) {
+			IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+			if (structuredSelection.size() == 1
+					&& structuredSelection.getFirstElement() instanceof ServiceTemplateEditPart) {
+				mySelectedElement = (ServiceTemplateEditPart) structuredSelection
+						.getFirstElement();
+			}
+		}
+		action.setEnabled(isEnabled());
+	}
+
+	/**
+	 * @generated
+	 */
+	private boolean isEnabled() {
+		return mySelectedElement != null;
+	}
+
+}

Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingLoadResourceAction.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingMatchingStrategy.java
URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingMatchingStrategy.java?rev=953071&view=auto
==============================================================================
--- commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingMatchingStrategy.java (added)
+++ commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingMatchingStrategy.java Wed Jun  9 16:12:48 2010
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.scxml.modeling.diagram.part;
+
+import org.eclipse.emf.common.ui.URIEditorInput;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorMatchingStrategy;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * @generated
+ */
+public class ModelingMatchingStrategy implements IEditorMatchingStrategy {
+
+	/**
+	 * @generated
+	 */
+	public boolean matches(IEditorReference editorRef, IEditorInput input) {
+		IEditorInput editorInput;
+		try {
+			editorInput = editorRef.getEditorInput();
+		} catch (PartInitException e) {
+			return false;
+		}
+
+		if (editorInput.equals(input)) {
+			return true;
+		}
+		if (editorInput instanceof URIEditorInput
+				&& input instanceof URIEditorInput) {
+			return ((URIEditorInput) editorInput).getURI().equals(
+					((URIEditorInput) input).getURI());
+		}
+		return false;
+	}
+
+}

Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingMatchingStrategy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingNewDiagramFileWizard.java
URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingNewDiagramFileWizard.java?rev=953071&view=auto
==============================================================================
--- commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingNewDiagramFileWizard.java (added)
+++ commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingNewDiagramFileWizard.java Wed Jun  9 16:12:48 2010
@@ -0,0 +1,215 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.scxml.modeling.diagram.part;
+
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.commons.scxml.modeling.diagram.edit.parts.ServiceTemplateEditPart;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.OperationHistoryFactory;
+import org.eclipse.core.resources.IFile;
+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.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.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.diagram.core.services.ViewService;
+import org.eclipse.gmf.runtime.diagram.core.services.view.CreateDiagramViewOperation;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+
+/**
+ * @generated
+ */
+public class ModelingNewDiagramFileWizard extends Wizard {
+
+	/**
+	 * @generated
+	 */
+	private WizardNewFileCreationPage myFileCreationPage;
+
+	/**
+	 * @generated
+	 */
+	private ModelElementSelectionPage diagramRootElementSelectionPage;
+
+	/**
+	 * @generated
+	 */
+	private TransactionalEditingDomain myEditingDomain;
+
+	/**
+	 * @generated
+	 */
+	public ModelingNewDiagramFileWizard(URI domainModelURI,
+			EObject diagramRoot, TransactionalEditingDomain editingDomain) {
+		assert domainModelURI != null : "Domain model uri must be specified"; //$NON-NLS-1$
+		assert diagramRoot != null : "Doagram root element must be specified"; //$NON-NLS-1$
+		assert editingDomain != null : "Editing domain must be specified"; //$NON-NLS-1$
+
+		myFileCreationPage = new WizardNewFileCreationPage(
+				Messages.ModelingNewDiagramFileWizard_CreationPageName,
+				StructuredSelection.EMPTY);
+		myFileCreationPage
+				.setTitle(Messages.ModelingNewDiagramFileWizard_CreationPageTitle);
+		myFileCreationPage.setDescription(NLS.bind(
+				Messages.ModelingNewDiagramFileWizard_CreationPageDescription,
+				ServiceTemplateEditPart.MODEL_ID));
+		IPath filePath;
+		String fileName = domainModelURI.trimFileExtension().lastSegment();
+		if (domainModelURI.isPlatformResource()) {
+			filePath = new Path(domainModelURI.trimSegments(1)
+					.toPlatformString(true));
+		} else if (domainModelURI.isFile()) {
+			filePath = new Path(domainModelURI.trimSegments(1).toFileString());
+		} else {
+			// TODO : use some default path
+			throw new IllegalArgumentException(
+					"Unsupported URI: " + domainModelURI); //$NON-NLS-1$
+		}
+		myFileCreationPage.setContainerFullPath(filePath);
+		myFileCreationPage.setFileName(ModelingDiagramEditorUtil
+				.getUniqueFileName(filePath, fileName, "modeling_diagram")); //$NON-NLS-1$
+
+		diagramRootElementSelectionPage = new DiagramRootElementSelectionPage(
+				Messages.ModelingNewDiagramFileWizard_RootSelectionPageName);
+		diagramRootElementSelectionPage
+				.setTitle(Messages.ModelingNewDiagramFileWizard_RootSelectionPageTitle);
+		diagramRootElementSelectionPage
+				.setDescription(Messages.ModelingNewDiagramFileWizard_RootSelectionPageDescription);
+		diagramRootElementSelectionPage.setModelElement(diagramRoot);
+
+		myEditingDomain = editingDomain;
+	}
+
+	/**
+	 * @generated
+	 */
+	public void addPages() {
+		addPage(myFileCreationPage);
+		addPage(diagramRootElementSelectionPage);
+	}
+
+	/**
+	 * @generated
+	 */
+	public boolean performFinish() {
+		List affectedFiles = new LinkedList();
+		IFile diagramFile = myFileCreationPage.createNewFile();
+		ModelingDiagramEditorUtil.setCharset(diagramFile);
+		affectedFiles.add(diagramFile);
+		URI diagramModelURI = URI.createPlatformResourceURI(diagramFile
+				.getFullPath().toString(), true);
+		ResourceSet resourceSet = myEditingDomain.getResourceSet();
+		final Resource diagramResource = resourceSet
+				.createResource(diagramModelURI);
+		AbstractTransactionalCommand command = new AbstractTransactionalCommand(
+				myEditingDomain,
+				Messages.ModelingNewDiagramFileWizard_InitDiagramCommand,
+				affectedFiles) {
+
+			protected CommandResult doExecuteWithResult(
+					IProgressMonitor monitor, IAdaptable info)
+					throws ExecutionException {
+				int diagramVID = ModelingVisualIDRegistry
+						.getDiagramVisualID(diagramRootElementSelectionPage
+								.getModelElement());
+				if (diagramVID != ServiceTemplateEditPart.VISUAL_ID) {
+					return CommandResult
+							.newErrorCommandResult(Messages.ModelingNewDiagramFileWizard_IncorrectRootError);
+				}
+				Diagram diagram = ViewService.createDiagram(
+						diagramRootElementSelectionPage.getModelElement(),
+						ServiceTemplateEditPart.MODEL_ID,
+						ModelingDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);
+				diagramResource.getContents().add(diagram);
+				return CommandResult.newOKCommandResult();
+			}
+		};
+		try {
+			OperationHistoryFactory.getOperationHistory().execute(command,
+					new NullProgressMonitor(), null);
+			diagramResource.save(ModelingDiagramEditorUtil.getSaveOptions());
+			ModelingDiagramEditorUtil.openDiagram(diagramResource);
+		} catch (ExecutionException e) {
+			ModelingDiagramEditorPlugin.getInstance().logError(
+					"Unable to create model and diagram", e); //$NON-NLS-1$
+		} catch (IOException ex) {
+			ModelingDiagramEditorPlugin.getInstance().logError(
+					"Save operation failed for: " + diagramModelURI, ex); //$NON-NLS-1$
+		} catch (PartInitException ex) {
+			ModelingDiagramEditorPlugin.getInstance().logError(
+					"Unable to open editor", ex); //$NON-NLS-1$
+		}
+		return true;
+	}
+
+	/**
+	 * @generated
+	 */
+	private static class DiagramRootElementSelectionPage extends
+			ModelElementSelectionPage {
+
+		/**
+		 * @generated
+		 */
+		protected DiagramRootElementSelectionPage(String pageName) {
+			super(pageName);
+		}
+
+		/**
+		 * @generated
+		 */
+		protected String getSelectionTitle() {
+			return Messages.ModelingNewDiagramFileWizard_RootSelectionPageSelectionTitle;
+		}
+
+		/**
+		 * @generated
+		 */
+		protected boolean validatePage() {
+			if (selectedModelElement == null) {
+				setErrorMessage(Messages.ModelingNewDiagramFileWizard_RootSelectionPageNoSelectionMessage);
+				return false;
+			}
+			boolean result = ViewService
+					.getInstance()
+					.provides(
+							new CreateDiagramViewOperation(
+									new EObjectAdapter(selectedModelElement),
+									ServiceTemplateEditPart.MODEL_ID,
+									ModelingDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT));
+			setErrorMessage(result ? null
+					: Messages.ModelingNewDiagramFileWizard_RootSelectionPageInvalidSelectionMessage);
+			return result;
+		}
+	}
+}

Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingNewDiagramFileWizard.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingNodeDescriptor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingNodeDescriptor.java?rev=953071&view=auto
==============================================================================
--- commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingNodeDescriptor.java (added)
+++ commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingNodeDescriptor.java Wed Jun  9 16:12:48 2010
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.scxml.modeling.diagram.part;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * @generated
+ */
+public class ModelingNodeDescriptor {
+
+	/**
+	 * @generated
+	 */
+	private EObject myModelElement;
+
+	/**
+	 * @generated
+	 */
+	private int myVisualID;
+
+	/**
+	 * @generated
+	 */
+	private String myType;
+
+	/**
+	 * @generated
+	 */
+	public ModelingNodeDescriptor(EObject modelElement, int visualID) {
+		myModelElement = modelElement;
+		myVisualID = visualID;
+	}
+
+	/**
+	 * @generated
+	 */
+	public EObject getModelElement() {
+		return myModelElement;
+	}
+
+	/**
+	 * @generated
+	 */
+	public int getVisualID() {
+		return myVisualID;
+	}
+
+	/**
+	 * @generated
+	 */
+	public String getType() {
+		if (myType == null) {
+			myType = ModelingVisualIDRegistry.getType(getVisualID());
+		}
+		return myType;
+	}
+
+}

Propchange: commons/sandbox/gsoc/2010/scxml-eclipse/trunk/src/main/java/org.apache.commons.scxml.modeling.diagram/src/org/apache/commons/scxml/modeling/diagram/part/ModelingNodeDescriptor.java
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message