package com.c2kernel.collection; import com.c2kernel.collection.gui.model.AggregationVertexOutlineCreator; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.graph.model.GraphModel; import com.c2kernel.graph.model.GraphPoint; import com.c2kernel.graph.model.TypeNameAndConstructionInfo; import com.c2kernel.lookup.ItemPath; import com.c2kernel.lookup.InvalidItemPathException; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.process.Gateway; import com.c2kernel.utils.CastorHashMap; import com.c2kernel.utils.Language; import com.c2kernel.utils.Logger; /** * @version $Revision: 1.59 $ $Date: 2004/08/10 07:56:08 $ * @author $Author: abranson $ */ abstract public class Aggregation extends Parent2ChildCollection { protected GraphModel mLayout = new GraphModel(new AggregationVertexOutlineCreator()); private final TypeNameAndConstructionInfo[] mVertexTypeNameAndConstructionInfo = { new TypeNameAndConstructionInfo(Language.translate("Slot"), "AggregationMember") }; public Aggregation() { setName("Aggregation"); } public GraphModel getLayout() { return mLayout; } public void setLayout(GraphModel layout) { mLayout = layout; layout.setVertexOutlineCreator(new AggregationVertexOutlineCreator()); } public TypeNameAndConstructionInfo[] getVertexTypeNameAndConstructionInfo() { return mVertexTypeNameAndConstructionInfo; } public boolean exists(int sysKey) { for (int i=0; i -1) { // some clients use this method when not setting a member aggMem.assignItem(sysKey); aggMem.setIsComposite( getIsComposite(sysKey, getName()) ); } Logger.msg(8, "AggregationDescription::addMember(" + sysKey + ") assigned to new slot " + aggMem.getID()); return aggMem; } @Override public AggregationMember addMember(int entityKey, CastorHashMap props, String classProps) throws MembershipException { return addMember(entityKey, props, classProps, null, -1, -1); } public AggregationMember addSlot(CastorHashMap props, String classProps) { return addSlot(props, classProps, null, -1, -1); } @Override public AggregationMember addMember(int entityKey) throws MembershipException { throw new MembershipException("Aggregations cannot accept arbitrary members without type info"); } @Override public void removeMember(int memberId) throws MembershipException { for (AggregationMember element : mMembers.list) { if (element.getID() == memberId) { element.clearItem(); mLayout.removeVertex(getLayout().getVertexById(memberId)); return; } } throw new MembershipException("Member "+memberId+" not found"); } static public boolean getIsComposite(int entityKey, String name) { if (entityKey == -1) return false; try { for(String collName: Gateway.getProxyManager().getProxy(new ItemPath(entityKey)).getContents(ClusterStorage.COLLECTION) ) if (name == null || name.equals(collName)) return true; } catch (ObjectNotFoundException e) { return false; } catch (InvalidItemPathException e) { return false; } return false; } }