[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.modeling.gmf] Re: Use of ConnectionHandle to add new node with connection

Ok I understand that my previous message isn't so clear, I give code which do the work, but I don't know how to explain more clearly.
The code represents a method after user have choosen a file, the file is given in parameter to initialize new created model's element.


Thanks.
private void createAndConnectToExternalBusinessModel(File file) {
		EditPart sourceEditPart = request.getSourceEditPart();
		EditPart targetEditPart = request.getTargetEditPart();
		MDAProjectEditPart mdaProjectEditPart = (MDAProjectEditPart) targetEditPart;
		Input input = (Input) ViewUtil
				.resolveSemanticElement(((View) sourceEditPart.getModel()));
		IElementType elementType = MdaElementTypes.BusinessModel_2004;

		ViewAndElementDescriptor viewDescriptor = new ViewAndElementDescriptor(
				new CreateElementRequestAdapter(new CreateElementRequest(
						elementType)), Node.class, ((IHintedType) elementType)
						.getSemanticHint(), mdaProjectEditPart
						.getDiagramPreferencesHint());

		CreateViewAndElementRequest req = new CreateViewAndElementRequest(
				viewDescriptor);
		req.setLocation(dropLocation);
		Command createBusinessCmd = mdaProjectEditPart.getCommand(req);

		mdaProjectEditPart.getDiagramEditDomain().getDiagramCommandStack()
				.execute(createBusinessCmd);

		Collection<?> result = DiagramCommandStack
				.getReturnValues(createBusinessCmd);
//		System.out.println("result : " + result);
		for (Object res : result) {
			if (res instanceof IAdaptable) {
				IAdaptable adapter = (IAdaptable) res;
				View view = (View) adapter.getAdapter(View.class);
				if (view != null) {
					IGraphicalEditPart businessModelEditPart = EditPartService.getInstance().createGraphicEditPart(view);
					
					Model newModel = (Model) view.getElement();
					String fileName = file.getName();
					String name = fileName.substring(0, fileName
							.lastIndexOf("."));
					SetRequest reqSetName = new SetRequest(mdaProjectEditPart
							.getEditingDomain(), newModel, MdaPackage.eINSTANCE
							.getModel_Name(), name);
					SetRequest reqSetURI = new SetRequest(mdaProjectEditPart
							.getEditingDomain(), newModel, MdaPackage.eINSTANCE
							.getModel_File(), file);

					String metamodel = "UML";
					try {
						metamodel = MetamodelMapping.getDefault()
								.getEMFMetamodelFromATLAlias(metamodel);
					} catch (CorrespondingMetamodelNameNotFound e) {
						e.printStackTrace();
					}
					SetRequest reqSetMetamodel = new SetRequest(
							mdaProjectEditPart.getEditingDomain(), newModel,
							MdaPackage.eINSTANCE.getModel_Metamodel(),
							metamodel);
					SetValueCommand setNameOperation = new SetValueCommand(
							reqSetName);
					SetValueCommand setURIOperation = new SetValueCommand(
							reqSetURI);
					SetValueCommand setMetamodelOperation = new SetValueCommand(
							reqSetMetamodel);

					mdaProjectEditPart.getDiagramEditDomain()
							.getDiagramCommandStack().execute(
									new ICommandProxy(setNameOperation));
					mdaProjectEditPart.getDiagramEditDomain()
							.getDiagramCommandStack().execute(
									new ICommandProxy(setURIOperation));
					mdaProjectEditPart.getDiagramEditDomain()
							.getDiagramCommandStack().execute(
									new ICommandProxy(setMetamodelOperation));

					
					List<IElementType> elementTypes = new ArrayList<IElementType>();
					elementTypes.add(MdaElementTypes.ModelPortUsers_4001);
					CreateUnspecifiedTypeConnectionRequest createUnspecifiedTypeConnectionRequest = new CreateUnspecifiedTypeConnectionRequest(elementTypes, false, PreferencesHint.USE_DEFAULTS);
					CreateRequest createRequest = createUnspecifiedTypeConnectionRequest.getRequestForType(MdaElementTypes.ModelPortUsers_4001);
					if (createRequest instanceof CreateConnectionViewAndElementRequest) {
						 CreateConnectionViewAndElementRequest request = (CreateConnectionViewAndElementRequest) createRequest;
						 request.setType(RequestConstants.REQ_CONNECTION_START);
						 request.setSourceEditPart(sourceEditPart);
						 request.setType(RequestConstants.REQ_CONNECTION_END);
						 request.setTargetEditPart(businessModelEditPart);
						 Command dmm = mdaProjectEditPart.getCommand(request);
						 mdaProjectEditPart.getDiagramEditDomain().getDiagramCommandStack().execute(dmm);
					} 
				}
			}
		}
	}