package com.c2kernel.lifecycle.instance.predefined.entitycreation; import java.util.ArrayList; import com.c2kernel.collection.MembershipException; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.graph.model.GraphPoint; import com.c2kernel.lookup.DomainPath; import com.c2kernel.property.PropertyDescription; import com.c2kernel.property.PropertyDescriptionList; import com.c2kernel.property.PropertyUtility; import com.c2kernel.utils.CastorHashMap; public class Aggregation implements java.io.Serializable { public boolean isDescription; public ArrayList aggregationMemberList; public String name; public Aggregation() { super(); aggregationMemberList = new ArrayList(); } public Aggregation(String name, boolean isDescription) { this(); this.name = name; this.isDescription = isDescription; } public com.c2kernel.collection.Aggregation create() throws MembershipException, ObjectNotFoundException { com.c2kernel.collection.Aggregation newAgg = isDescription?new com.c2kernel.collection.AggregationDescription(name):new com.c2kernel.collection.AggregationInstance(name); newAgg.setName(name); for (AggregationMember thisMem : aggregationMemberList) { CastorHashMap props = new CastorHashMap(); StringBuffer classProps = new StringBuffer(); if (thisMem.itemDescriptionPath != null && thisMem.itemDescriptionPath.length()>0) { PropertyDescriptionList propList = PropertyUtility.getPropertyDescriptionOutcome(new DomainPath(thisMem.itemDescriptionPath).getSysKey()); for (PropertyDescription pd : propList.list) { props.put(pd.getName(), pd.getDefaultValue()); if (pd.getIsClassIdentifier()) classProps.append((classProps.length()>0?",":"")).append(pd.getName()); } } if (thisMem.itemPath != null && thisMem.itemPath.length()>0) { int syskey = new DomainPath(thisMem.itemPath).getSysKey(); if (syskey == -1) throw new MembershipException("Cannot find "+thisMem.itemPath+" specified for collection."); newAgg.addMember(syskey, props, classProps.toString(), new GraphPoint(thisMem.geometry.x, thisMem.geometry.y), thisMem.geometry.width, thisMem.geometry.height); } } return newAgg; } }