[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[stp-commits] r3330 - org.eclipse.stp.sca/trunk/org.eclipse.stp.sca.diagram.sca/src/org/eclipse/stp/sca/diagram/sca/dnd

Author: sdrapeau
Date: 2009-09-15 13:08:21 -0400 (Tue, 15 Sep 2009)
New Revision: 3330

Added:
   org.eclipse.stp.sca/trunk/org.eclipse.stp.sca.diagram.sca/src/org/eclipse/stp/sca/diagram/sca/dnd/AbstractCompositeFileDD.java
   org.eclipse.stp.sca/trunk/org.eclipse.stp.sca.diagram.sca/src/org/eclipse/stp/sca/diagram/sca/dnd/ScaCompositeFileImplementationDDOnComposite.java
Log:
DnD composite file on composite.

Added: org.eclipse.stp.sca/trunk/org.eclipse.stp.sca.diagram.sca/src/org/eclipse/stp/sca/diagram/sca/dnd/AbstractCompositeFileDD.java
===================================================================
--- org.eclipse.stp.sca/trunk/org.eclipse.stp.sca.diagram.sca/src/org/eclipse/stp/sca/diagram/sca/dnd/AbstractCompositeFileDD.java	                        (rev 0)
+++ org.eclipse.stp.sca/trunk/org.eclipse.stp.sca.diagram.sca/src/org/eclipse/stp/sca/diagram/sca/dnd/AbstractCompositeFileDD.java	2009-09-15 17:08:21 UTC (rev 3330)
@@ -0,0 +1,150 @@
+/*
+ * Copyright (c) 2007-2008-2009
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Jamil Shaikh (RIM) <jshaikh@xxxxxxx> - initial API and implementation
+ */
+package org.eclipse.stp.sca.diagram.sca.dnd;
+
+import java.util.Collection;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.commands.CompoundCommand;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.diagram.core.edithelpers.CreateElementRequestAdapter;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramCommandStack;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewAndElementRequest;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewAndElementRequest.ViewAndElementDescriptor;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.internal.core.JarEntryFile;
+import org.eclipse.stp.sca.Component;
+import org.eclipse.stp.sca.Composite;
+import org.eclipse.stp.sca.common.java.utils.JDTUtils;
+import org.eclipse.stp.sca.diagram.dnd.AbstractFileDD;
+import org.eclipse.stp.sca.introspection.CompositeImplementationResolver;
+import org.eclipse.stp.sca.util.ScaCompositeUtils;
+
+/**
+ * @author Jamil Shaikh - RIM
+ */
+public abstract class AbstractCompositeFileDD extends AbstractFileDD {
+
+	public AbstractTransactionalCommand getAbstractTransactionalCommand(
+			final IGraphicalEditPart host, final GraphicalEditPart editPart,
+			final Request request) {
+		AbstractTransactionalCommand cmd = null;
+		if (editPartIsOk(editPart)) {
+			Object transfer = getDnDedObject(request);
+			if (transfer != null) {
+				IResource file = getCompositeFile(transfer);
+				if (file != null) {
+					if (file.getFileExtension().equals("composite")) {
+						cmd = getCommand(host, editPart, request, file);
+					}
+				}
+			}
+		}
+		return cmd;
+	}
+
+	private IResource getCompositeFile(Object transfer) {
+		IResource file = null;
+		if (transfer instanceof IFile) {
+			file = (IResource) transfer;
+		} else if (transfer instanceof JarEntryFile) {
+			JarEntryFile jarEntry = (JarEntryFile) transfer;
+			IPackageFragmentRoot jarRoot = jarEntry.getPackageFragmentRoot();
+			IJavaProject jp = jarRoot.getJavaProject();
+			String projectPath = jp.getProject().getLocation().toString();
+			java.io.File tmpFile = new java.io.File(new java.io.File(
+					projectPath).toString()
+					+ "/" + jarEntry.getName());
+			file = JDTUtils.copyFileEnclosedInJar(jarEntry, tmpFile);
+		}
+		return file;
+	}
+
+	private AbstractTransactionalCommand getCommand(IGraphicalEditPart host,
+			final GraphicalEditPart editPart, final Request request,
+			final IResource file) {
+
+		AbstractTransactionalCommand cmd = new AbstractTransactionalCommand(
+				host.getEditingDomain(), "DnD SCA composite", //$NON-NLS-1$
+				null) {
+
+			@Override
+			protected CommandResult doExecuteWithResult(
+					IProgressMonitor monitor, IAdaptable info)
+					throws ExecutionException {
+
+				IElementType type = getType(editPart);
+
+				ViewAndElementDescriptor viewDescriptor = new ViewAndElementDescriptor(
+						new CreateElementRequestAdapter(
+								new CreateElementRequest(type)), Node.class,
+						((IHintedType) type).getSemanticHint(), editPart
+								.getDiagramPreferencesHint());
+
+				CreateViewAndElementRequest req = new CreateViewAndElementRequest(
+						viewDescriptor);
+				CompoundCommand cmd = new CompoundCommand("Creation");//$NON-NLS-1$
+				cmd.add(editPart.getCommand(req));
+				editPart.getDiagramEditDomain().getDiagramCommandStack()
+						.execute(cmd);
+				Composite composite = ScaCompositeUtils.getComposite(file);
+
+				Collection<?> results = DiagramCommandStack
+						.getReturnValues(cmd);
+				for (Object res : results) {
+					if (res instanceof IAdaptable) {
+						IAdaptable adapter = (IAdaptable) res;
+						View view = (View) adapter.getAdapter(View.class);
+						if (view != null) {
+							Component component = postTreatment(editPart, view,
+									composite);
+							if (component != null) {
+								launchIntrospection(component, composite);
+							}
+						}
+					}
+				}
+				if (getDnDedObject(request) instanceof JarEntryFile) {
+					file.getFullPath().toFile().delete();
+				}
+				return CommandResult.newOKCommandResult();
+			}
+
+		};
+		return cmd;
+	}
+
+	public void launchIntrospection(Component component, Composite composite) {
+		CompositeImplementationResolver resolver = new CompositeImplementationResolver();
+		resolver.resolveServices(component, composite);
+		resolver.resolveReferences(component, composite);
+		resolver.resolveProperties(component, composite);
+	}
+
+	protected abstract Component postTreatment(GraphicalEditPart editPart,
+			View view, Composite composite);
+
+}


Property changes on: org.eclipse.stp.sca/trunk/org.eclipse.stp.sca.diagram.sca/src/org/eclipse/stp/sca/diagram/sca/dnd/AbstractCompositeFileDD.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: org.eclipse.stp.sca/trunk/org.eclipse.stp.sca.diagram.sca/src/org/eclipse/stp/sca/diagram/sca/dnd/ScaCompositeFileImplementationDDOnComposite.java
===================================================================
--- org.eclipse.stp.sca/trunk/org.eclipse.stp.sca.diagram.sca/src/org/eclipse/stp/sca/diagram/sca/dnd/ScaCompositeFileImplementationDDOnComposite.java	                        (rev 0)
+++ org.eclipse.stp.sca/trunk/org.eclipse.stp.sca.diagram.sca/src/org/eclipse/stp/sca/diagram/sca/dnd/ScaCompositeFileImplementationDDOnComposite.java	2009-09-15 17:08:21 UTC (rev 3330)
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2007-2008-2009
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Jamil Shaikh (RIM) <jshaikh@xxxxxxx> - initial API and implementation
+ */
+package org.eclipse.stp.sca.diagram.sca.dnd;
+
+import org.eclipse.emf.ecore.util.FeatureMap;
+import org.eclipse.emf.ecore.util.FeatureMapUtil;
+import org.eclipse.emf.ecore.xml.type.internal.QName;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.commands.SetValueCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.stp.sca.Component;
+import org.eclipse.stp.sca.Composite;
+import org.eclipse.stp.sca.SCAImplementation;
+import org.eclipse.stp.sca.ScaFactory;
+import org.eclipse.stp.sca.ScaPackage;
+import org.eclipse.stp.sca.diagram.edit.parts.CompositeCompositeAreaCompartmentEditPart;
+import org.eclipse.stp.sca.diagram.providers.ScaElementTypes;
+
+/**
+ * @author Jamil Shaikh - RIM
+ */
+public class ScaCompositeFileImplementationDDOnComposite extends AbstractCompositeFileDD {
+
+	@Override
+	public boolean editPartIsOk(GraphicalEditPart editPart) {
+		return editPart instanceof CompositeCompositeAreaCompartmentEditPart;
+	}
+	
+	@Override
+	protected Component postTreatment(GraphicalEditPart editPart, View view,
+			Composite composite) {
+		Component component = (Component) view.getElement();
+		QName name = new QName(composite.getTargetNamespace(),composite.getName(),""); 
+		SetRequest reqSet = new SetRequest(editPart.getEditingDomain(),
+				component, ScaPackage.Literals.COMPONENT__NAME, composite.getName());
+		SetValueCommand operation = new SetValueCommand(reqSet);
+		editPart.getDiagramEditDomain().getDiagramCommandStack().execute(
+				new ICommandProxy(operation));
+		
+		createScaImplementation(component, name);
+		
+		return component;
+	}
+
+	private void createScaImplementation(Component component, QName name) {
+		SCAImplementation  scaImplem = ScaFactory.eINSTANCE
+				.createSCAImplementation();
+		scaImplem.setName(name);
+		((FeatureMap.Internal) component.getImplementationGroup()).clear();
+		((FeatureMap.Internal) component.getImplementationGroup()).add(
+				ScaPackage.Literals.COMPONENT__IMPLEMENTATION_GROUP,
+				FeatureMapUtil.createEntry(
+						ScaPackage.Literals.DOCUMENT_ROOT__IMPLEMENTATION_COMPOSITE,
+						scaImplem));
+	}
+	
+	@Override
+    protected IElementType getType(GraphicalEditPart editPart) {
+		return ScaElementTypes.Component_3012;
+    }
+}


Property changes on: org.eclipse.stp.sca/trunk/org.eclipse.stp.sca.diagram.sca/src/org/eclipse/stp/sca/diagram/sca/dnd/ScaCompositeFileImplementationDDOnComposite.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain