[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);
}
}
}
}
}