package org.archstudio.archipelago2.ext.structures.logics;
import org.archstudio.archipelago2.ext.structures.utils.MenuContributor;
import org.archstudio.bna.IBNAView;
import org.archstudio.bna.IBNAWorld;
import org.archstudio.bna.ICoordinate;
import org.archstudio.bna.IThing;
import org.archstudio.bna.logics.AbstractThingLogic;
import org.archstudio.bna.ui.IBNAMenuListener2;
import org.archstudio.bna.utils.Assemblies;
import org.archstudio.bna.utils.BNAUtils2;
import org.archstudio.bna.utils.BNAUtils2.ThingsAtLocation;
import org.archstudio.xadl.XadlUtils;
import org.archstudio.xadl.bna.facets.IHasObjRef;
import org.archstudio.xadl3.structure_3_0.Structure_3_0Package;
import org.archstudio.xarchadt.IXArchADT;
import org.archstudio.xarchadt.ObjRef;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.swt.graphics.Point;
public class NewElementLogic extends AbstractThingLogic implements IBNAMenuListener2 {
protected final IXArchADT xarch;
protected final ObjRef editRef;
public NewElementLogic(IBNAWorld world, IXArchADT xarch, ObjRef editRef) {
super(world);
this.xarch = xarch;
this.editRef = editRef;
}
@Override
public void fillMenu(IBNAView view, ICoordinate location, ThingsAtLocation thingsAtLocation,
IMenuManager menuManager) {
Point worldPoint = location.getWorldPoint();
BNAUtils2.setNewThingSpot(view.getBNAWorld(), worldPoint.x, worldPoint.y);
if (thingsAtLocation.getViewAtLocation() != null) {
MenuContributor.addNewComponentAction(menuManager, xarch, editRef, null, null);
MenuContributor.addNewConnectorAction(menuManager, xarch, editRef, null, null);
MenuContributor.addNewLinkAction(menuManager, xarch, editRef, null, null);
} else {
IThing thing = Assemblies.getThingWithProperty(model,
thingsAtLocation.getThingAtLocation().getThing(), IHasObjRef.OBJREF_KEY);
if (thing != null) {
ObjRef objRef = thing.get(IHasObjRef.OBJREF_KEY);
if (XadlUtils.isInstanceOf(xarch, objRef, Structure_3_0Package.Literals.BRICK)) {
MenuContributor.addNewInterfaceAction(menuManager, xarch, objRef, null, null);
}
if (XadlUtils.isInstanceOf(xarch, objRef, Structure_3_0Package.Literals.INTERFACE)) {
MenuContributor.addNewMapping(menuManager, xarch, view, thing, location.getLocalPoint());
}
}
}
}
}