package org.archstudio.archipelago2.ext.statecharts.utils; import java.util.List; import org.archstudio.archipelago2.Archipelago2Utils; import org.archstudio.archipelago2.IArchipelago2Outline; import org.archstudio.bna.ui.IBNAMenuListener2; import org.archstudio.sysutils.UIDGenerator; import org.archstudio.utils.resources.swt.ImageUtils; import org.archstudio.xadl.XadlUtils; import org.archstudio.xadl.bna.utils.XArchADTOperations; import org.archstudio.xadl3.statechart_1_0.FinalState; import org.archstudio.xadl3.statechart_1_0.InitialState; import org.archstudio.xadl3.statechart_1_0.State; import org.archstudio.xadl3.statechart_1_0.StateType; import org.archstudio.xadl3.statechart_1_0.Statechart_1_0Package; import org.archstudio.xadl3.statechart_1_0.Transition; import org.archstudio.xarchadt.IXArchADT; import org.archstudio.xarchadt.ObjRef; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.widgets.Display; import com.google.common.base.Preconditions; public class MenuContributor { public static final void addNewStatechartAction(IMenuManager menuManager, final IXArchADT xarch, final ObjRef xAdlRef, @Nullable final IArchipelago2Outline outline, @Nullable final List<Object> parentElement) { Preconditions.checkNotNull(menuManager); Preconditions.checkNotNull(xarch); Preconditions.checkNotNull(xAdlRef); menuManager.appendToGroup(IBNAMenuListener2.NEW_ELEMENTS_GROUP, new Action("New Statechart") { @Override public void run() { final ObjRef newRef = XadlUtils.create(xarch, Statechart_1_0Package.Literals.STATECHART); xarch.set(newRef, "id", UIDGenerator.generateUID("statechart")); XadlUtils.setName(xarch, newRef, "[New Statechart]"); XArchADTOperations.add("New statechart", xarch, xAdlRef, "topLevelElement", newRef); if (outline != null && parentElement != null) { List<Object> element = Archipelago2Utils.append(parentElement, newRef); outline.selectElement(element); outline.editElement(element, 0); } } @Override public ImageDescriptor getImageDescriptor() { return ImageUtils.toImageDescriptor(ImageUtils.getIcon16ForType(Display.getDefault(), Statechart_1_0Package.Literals.STATECHART.getInstanceClass())); } }); } public static final void addNewStateAction(IMenuManager menuManager, final IXArchADT xarch, final ObjRef statechartRef, @Nullable final IArchipelago2Outline outline, @Nullable final List<Object> parentElement) { Preconditions.checkNotNull(menuManager); Preconditions.checkNotNull(xarch); Preconditions.checkNotNull(statechartRef); menuManager.appendToGroup(IBNAMenuListener2.NEW_ELEMENTS_GROUP, new Action("New State") { @Override public void run() { ObjRef newRef = XadlUtils.create(xarch, Statechart_1_0Package.Literals.STATE); xarch.set(newRef, "id", UIDGenerator.generateUID("state_")); xarch.set(newRef, "type", StateType.STATE); XadlUtils.setName(xarch, newRef, "[New State]"); XArchADTOperations.add("Add State", xarch, statechartRef, "state", newRef); if (outline != null && parentElement != null) { List<Object> element = Archipelago2Utils.append(parentElement, newRef); outline.selectElement(element); outline.editElement(element, 0); } } @Override public ImageDescriptor getImageDescriptor() { return ImageUtils .toImageDescriptor(ImageUtils.getIcon16ForType(Display.getDefault(), State.class)); } }); } public static final void addNewTransitionAction(IMenuManager menuManager, final IXArchADT xarch, final ObjRef statechartRef, @Nullable final IArchipelago2Outline outline, @Nullable final List<Object> parentElement) { Preconditions.checkNotNull(menuManager); Preconditions.checkNotNull(xarch); Preconditions.checkNotNull(statechartRef); menuManager.appendToGroup(IBNAMenuListener2.NEW_ELEMENTS_GROUP, new Action("New Transition") { @Override public void run() { ObjRef newRef = XadlUtils.create(xarch, Statechart_1_0Package.Literals.TRANSITION); xarch.set(newRef, "id", UIDGenerator.generateUID("transition_")); XadlUtils.setName(xarch, newRef, "[New Transition]"); XArchADTOperations.add("Add Transition", xarch, statechartRef, "transition", newRef); if (outline != null && parentElement != null) { List<Object> element = Archipelago2Utils.append(parentElement, newRef); outline.selectElement(element); outline.editElement(element, 0); } } @Override public ImageDescriptor getImageDescriptor() { return ImageUtils .toImageDescriptor(ImageUtils.getIcon16ForType(Display.getDefault(), Transition.class)); } }); } public static final void addNewInitialStateAction(IMenuManager menuManager, final IXArchADT xarch, final ObjRef statechartRef, @Nullable final IArchipelago2Outline outline, @Nullable final List<Object> parentElement) { Preconditions.checkNotNull(menuManager); Preconditions.checkNotNull(xarch); Preconditions.checkNotNull(statechartRef); menuManager.appendToGroup(IBNAMenuListener2.NEW_ELEMENTS_GROUP, new Action("New Initial State") { @Override public void run() { ObjRef newRef = XadlUtils.create(xarch, Statechart_1_0Package.Literals.INITIAL_STATE); xarch.set(newRef, "id", UIDGenerator.generateUID("initialState_")); xarch.set(newRef, "type", StateType.INITIAL); XadlUtils.setName(xarch, newRef, "[New Initial State]"); XArchADTOperations.add("Add Initial State", xarch, statechartRef, "state", newRef); if (outline != null && parentElement != null) { List<Object> element = Archipelago2Utils.append(parentElement, newRef); outline.selectElement(element); outline.editElement(element, 0); } } @Override public ImageDescriptor getImageDescriptor() { return ImageUtils.toImageDescriptor( ImageUtils.getIcon16ForType(Display.getDefault(), InitialState.class)); } }); } public static final void addNewFinalStateAction(IMenuManager menuManager, final IXArchADT xarch, final ObjRef statechartRef, @Nullable final IArchipelago2Outline outline, @Nullable final List<Object> parentElement) { Preconditions.checkNotNull(menuManager); Preconditions.checkNotNull(xarch); Preconditions.checkNotNull(statechartRef); menuManager.appendToGroup(IBNAMenuListener2.NEW_ELEMENTS_GROUP, new Action("New Final State") { @Override public void run() { ObjRef newRef = XadlUtils.create(xarch, Statechart_1_0Package.Literals.FINAL_STATE); xarch.set(newRef, "id", UIDGenerator.generateUID("finalState_")); xarch.set(newRef, "type", StateType.FINAL); XadlUtils.setName(xarch, newRef, "[New Final State]"); XArchADTOperations.add("Add Final State", xarch, statechartRef, "state", newRef); if (outline != null && parentElement != null) { List<Object> element = Archipelago2Utils.append(parentElement, newRef); outline.selectElement(element); outline.editElement(element, 0); } } @Override public ImageDescriptor getImageDescriptor() { return ImageUtils .toImageDescriptor(ImageUtils.getIcon16ForType(Display.getDefault(), FinalState.class)); } }); } public static final void addClearSubStatechartAction(IMenuManager menuManager, final IXArchADT xarch, final ObjRef stateRef) { Preconditions.checkNotNull(menuManager); Preconditions.checkNotNull(xarch); Preconditions.checkNotNull(stateRef); menuManager.appendToGroup(IBNAMenuListener2.NEW_ELEMENTS_GROUP, new Action("Remove SubStatechart") { @Override public void run() { xarch.clear(stateRef, Statechart_1_0Package.Literals.STATE__SUB_STATECHART.getName()); } }); } public static final void addClearStatechartSpecAction(IMenuManager menuManager, final IXArchADT xarch, final ObjRef objRef) { Preconditions.checkNotNull(menuManager); Preconditions.checkNotNull(xarch); Preconditions.checkNotNull(objRef); final ObjRef statechartSpec = XadlUtils.getExt(xarch, objRef, Statechart_1_0Package.eNS_URI, Statechart_1_0Package.Literals.STATECHART_SPECIFICATION.getName()); if (statechartSpec != null) { menuManager.appendToGroup(IBNAMenuListener2.NEW_ELEMENTS_GROUP, new Action("Remove Statechart Spec") { @Override public void run() { xarch.remove(objRef, "ext", statechartSpec); } }); } } }