summaryrefslogtreecommitdiff
path: root/src/main/java/com/c2kernel/collection
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/c2kernel/collection')
-rw-r--r--src/main/java/com/c2kernel/collection/Aggregation.java116
-rw-r--r--src/main/java/com/c2kernel/collection/AggregationDescription.java59
-rw-r--r--src/main/java/com/c2kernel/collection/AggregationInstance.java45
-rw-r--r--src/main/java/com/c2kernel/collection/AggregationMember.java161
-rw-r--r--src/main/java/com/c2kernel/collection/Collection.java32
-rw-r--r--src/main/java/com/c2kernel/collection/CollectionDescription.java14
-rw-r--r--src/main/java/com/c2kernel/collection/CollectionMember.java38
-rw-r--r--src/main/java/com/c2kernel/collection/CollectionMemberList.java22
-rw-r--r--src/main/java/com/c2kernel/collection/Dependency.java117
-rw-r--r--src/main/java/com/c2kernel/collection/DependencyDescription.java53
-rw-r--r--src/main/java/com/c2kernel/collection/DependencyMember.java152
-rw-r--r--src/main/java/com/c2kernel/collection/MembershipException.java21
-rw-r--r--src/main/java/com/c2kernel/collection/Parent2ChildCollection.java127
-rw-r--r--src/main/java/com/c2kernel/collection/RelationshipUtils.java33
-rw-r--r--src/main/java/com/c2kernel/collection/gui/model/AggregationVertexFactory.java46
-rw-r--r--src/main/java/com/c2kernel/collection/gui/model/AggregationVertexOutlineCreator.java44
-rw-r--r--src/main/java/com/c2kernel/collection/gui/view/AggregationMemberRenderer.java125
-rw-r--r--src/main/java/com/c2kernel/collection/gui/view/CollectionFrame.java41
-rw-r--r--src/main/java/com/c2kernel/collection/gui/view/PropertyPanel.java37
-rw-r--r--src/main/java/com/c2kernel/collection/gui/view/SelectedMemberPanel.java164
20 files changed, 1447 insertions, 0 deletions
diff --git a/src/main/java/com/c2kernel/collection/Aggregation.java b/src/main/java/com/c2kernel/collection/Aggregation.java
new file mode 100644
index 0000000..e869621
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/Aggregation.java
@@ -0,0 +1,116 @@
+package com.c2kernel.collection;
+
+
+import com.c2kernel.collection.gui.model.AggregationVertexOutlineCreator;
+import com.c2kernel.graph.model.GraphModel;
+import com.c2kernel.graph.model.GraphPoint;
+import com.c2kernel.graph.model.TypeNameAndConstructionInfo;
+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<AggregationMember>
+{
+
+ 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;
+ }
+
+ public TypeNameAndConstructionInfo[] getVertexTypeNameAndConstructionInfo()
+ {
+ return mVertexTypeNameAndConstructionInfo;
+ }
+
+ public boolean exists(int entityKey)
+ {
+ for (int i=0; i<size(); i++)
+ {
+ AggregationMember element = mMembers.list.get(i);
+ if (element.getEntityKey() == entityKey)
+ return true;
+ }
+ return false;
+ }
+
+ public AggregationMember getMemberPair(int vertexID)
+ {
+ for (int i=0; i<size(); i++)
+ {
+ AggregationMember element = mMembers.list.get(i);
+ if (element.getID() == vertexID)
+ return element;
+ }
+ return null;
+ }
+
+ public AggregationMember addMember(int entityKey, CastorHashMap props, String classProps, GraphPoint location, int w, int h)
+ throws MembershipException
+ {
+ // Create new member object
+ AggregationMember aggMem = new AggregationMember();
+ aggMem.setProperties(props);
+ aggMem.setClassProps(classProps);
+ aggMem.assignEntity(entityKey);
+
+ // create vertex
+ com.c2kernel.graph.model.Vertex vertex = new com.c2kernel.graph.model.Vertex();
+ vertex.setHeight(h); vertex.setWidth(w);
+ mLayout.addVertexAndCreateId(vertex,location);
+ aggMem.setCollection(this);
+ aggMem.setID(vertex.getID());
+ aggMem.setIsLayoutable(true);
+ aggMem.setIsComposite( RelationshipUtils.getIsComposite(entityKey) );
+ mMembers.list.add(aggMem);
+ Logger.msg(8, "AggregationDescription::addMember(" + entityKey + ") added to children linked to vertexid " + vertex.getID());
+ return aggMem;
+ }
+
+
+ @Override
+ public AggregationMember addMember(int entityKey, CastorHashMap props, String classProps) throws MembershipException
+ {
+ return addMember(entityKey, props, classProps, new GraphPoint(100,100*getCounter()), 20, 20);
+ }
+
+ @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.clearEntity();
+ mLayout.removeVertex(getLayout().getVertexById(memberId));
+ return;
+ }
+ }
+ throw new MembershipException("Member "+memberId+" not found");
+ }
+
+}
diff --git a/src/main/java/com/c2kernel/collection/AggregationDescription.java b/src/main/java/com/c2kernel/collection/AggregationDescription.java
new file mode 100644
index 0000000..a046871
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/AggregationDescription.java
@@ -0,0 +1,59 @@
+package com.c2kernel.collection;
+
+/**
+ * @version $Revision: 1.34 $ $Date: 2004/03/23 09:29:41 $
+ * @author $Author: abranson $
+ */
+
+import com.c2kernel.graph.model.Vertex;
+import com.c2kernel.property.PropertyDescriptionList;
+import com.c2kernel.property.PropertyUtility;
+import com.c2kernel.utils.Logger;
+
+public class AggregationDescription extends Aggregation implements CollectionDescription<AggregationMember>
+{
+
+ public AggregationDescription()
+ {
+ setName("AggregationDescription");
+ }
+
+ public AggregationDescription(String name)
+ {
+ setName(name);
+ }
+
+
+ @Override
+ public Aggregation newInstance()
+ {
+ AggregationInstance newInstance = new AggregationInstance(getName());
+ newInstance.setURLInfo(getURLInfo());
+ //for each desc member
+ for (int i=0; i<size(); i++)
+ {
+ AggregationMember mem = mMembers.list.get(i);
+ //get the propdesc of the member item
+ PropertyDescriptionList pdList = PropertyUtility.getPropertyDescriptionOutcome(mem.getEntityKey());
+ if (pdList!=null)
+ {
+ //create the new props of the member object
+ try {
+ Vertex v = getLayout().getVertexById(mem.getID());
+ newInstance.addMember(-1, PropertyUtility.createProperty(pdList), pdList.getClassProps(),v.getCentrePoint(),v.getWidth(),v.getHeight());
+ } catch (MembershipException e) {
+ // won't happen as we're not assigning an entity
+ }
+ }
+ else
+ {
+ Logger.error("AggregationDescription::newInstance() There is no PropertyDescription. Cannot instantiate. " + mem.getEntityKey());
+ return null;
+ }
+
+
+ }
+
+ return newInstance;
+ }
+}
diff --git a/src/main/java/com/c2kernel/collection/AggregationInstance.java b/src/main/java/com/c2kernel/collection/AggregationInstance.java
new file mode 100644
index 0000000..47e7c41
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/AggregationInstance.java
@@ -0,0 +1,45 @@
+package com.c2kernel.collection;
+
+/**
+ * @version $Revision: 1.30 $ $Date: 2003/06/04 13:21:24 $
+ * @author $Author: abranson $
+ */
+
+import com.c2kernel.graph.model.GraphPoint;
+import com.c2kernel.utils.CastorHashMap;
+
+public class AggregationInstance extends Aggregation
+{
+
+ public AggregationInstance()
+ {
+ setName("AggregationInstance");
+ }
+
+ public AggregationInstance(String name)
+ {
+ setName(name);
+ }
+
+
+ @Override
+ public AggregationMember addMember(int entityKey, CastorHashMap props, String classProps)
+ throws MembershipException
+ {
+ if( entityKey!=-1 && exists(entityKey))
+ throw new MembershipException(entityKey+" already exists in this collection.");
+ else
+ return super.addMember(entityKey, props, classProps);
+ }
+
+ @Override
+ public AggregationMember addMember(int entityKey, CastorHashMap props, String classProps, GraphPoint location, int w, int h)
+ throws MembershipException
+ {
+ if( entityKey!=-1 && exists(entityKey))
+ throw new MembershipException(entityKey+" already exists in this collection.");
+ else
+ return super.addMember(entityKey, props, classProps, location, w, h);
+ }
+}
+
diff --git a/src/main/java/com/c2kernel/collection/AggregationMember.java b/src/main/java/com/c2kernel/collection/AggregationMember.java
new file mode 100644
index 0000000..e3b213e
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/AggregationMember.java
@@ -0,0 +1,161 @@
+package com.c2kernel.collection;
+
+import java.awt.Image;
+import java.util.StringTokenizer;
+
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.entity.proxy.EntityProxy;
+import com.c2kernel.graph.model.GraphableVertex;
+import com.c2kernel.lookup.EntityPath;
+import com.c2kernel.lookup.InvalidEntityPathException;
+import com.c2kernel.persistency.ClusterStorage;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.property.Property;
+import com.c2kernel.utils.Logger;
+import com.c2kernel.utils.Resource;
+
+/**
+* @version $Revision: 1.11 $ $Date: 2005/12/01 14:23:15 $
+* @author $Author: abranson $
+*/
+
+
+//this extends Vertex for inherit the graph visualization
+//this does not implement MemberObject anylonger. it is a java object.
+//eventually the member object corba interface will be phased out.
+public class AggregationMember extends GraphableVertex implements CollectionMember
+{
+
+ private int mEntityKey = -1;
+ private EntityProxy mEntity = null;
+ private Aggregation mCollection = null;
+ private String mClassProps = null;
+ String entityName;
+ Image image;
+
+
+ /**************************************************************************
+ *
+ **************************************************************************/
+ public AggregationMember()
+ {
+ super();
+ mEntityKey = -1;
+ mCollection = null;
+ }
+
+ @Override
+ public void setEntityKey(int entityKey) {
+ mEntityKey = entityKey;
+ entityName = null;
+ }
+
+ public void setCollection(Aggregation aggregation)
+ {
+ mCollection = aggregation;
+ }
+
+ @Override
+ public void setClassProps(String props)
+ {
+ mClassProps = props;
+ }
+
+ @Override
+ public int getEntityKey()
+ {
+ return mEntityKey;
+ }
+
+ public Aggregation getCollection()
+ {
+ return mCollection;
+ }
+
+ @Override
+ public String getClassProps()
+ {
+ return mClassProps;
+ }
+
+ @Override
+ public void assignEntity(int entityKey) throws MembershipException
+ {
+ if (entityKey > -1) {
+ if (mClassProps == null || getProperties() == null)
+ throw new MembershipException("ClassProps not yet set. Cannot check membership validity.");
+
+ //for each mandatory prop check if its in the member property and has the matching value
+ StringTokenizer sub = new StringTokenizer(mClassProps, ",");
+ while (sub.hasMoreTokens())
+ {
+ String aClassProp = sub.nextToken();
+ try {
+ String memberValue = (String)getProperties().get(aClassProp);
+ Property entityProperty = (Property)Gateway.getStorage().get(entityKey, ClusterStorage.PROPERTY+"/"+aClassProp, null);
+ if (entityProperty == null)
+ throw new MembershipException("Property "+aClassProp+ " does not exist for entityKey=" + entityKey );
+ if (entityProperty.getValue() == null || !entityProperty.getValue().equalsIgnoreCase(memberValue))
+ throw new MembershipException("Value of mandatory prop "+aClassProp+" does not match: " + entityProperty.getValue()+"!="+memberValue);
+ }
+ catch (MembershipException ex) {
+ throw ex;
+ }
+ catch (Exception ex)
+ {
+ Logger.error(ex);
+ throw new MembershipException("Error checking properties");
+ }
+ }
+ }
+
+ mEntityKey = entityKey;
+ mEntity = null;
+ entityName = null;
+ }
+
+ @Override
+ public void clearEntity() {
+ mEntityKey = -1;
+ mEntity = null;
+ }
+
+ @Override
+ public EntityProxy resolveEntity() throws ObjectNotFoundException {
+ if (mEntity == null) {
+ try {
+ EntityPath path = new EntityPath(mEntityKey);
+ mEntity = Gateway.getProxyManager().getProxy(path);
+ } catch (InvalidEntityPathException ex) {
+ throw new ObjectNotFoundException("No member defined", "");
+ }
+ }
+ return mEntity;
+
+ }
+
+ public Image getImage() {
+ if (image == null) {
+ image = Resource.findImage("typeicons/"+getProperties().get("Type")+"_16.png").getImage();
+ }
+ return image;
+ }
+
+ public String getEntityName() {
+ if (entityName == null) {
+ if (mEntityKey > -1) {
+ try {
+ entityName = resolveEntity().getName();
+ } catch (ObjectNotFoundException ex) {
+ Logger.error(ex);
+ entityName = "Error ("+mEntityKey+")";
+ }
+ }
+ else
+ entityName = "Empty";
+ }
+
+ return entityName;
+ }
+
+}
diff --git a/src/main/java/com/c2kernel/collection/Collection.java b/src/main/java/com/c2kernel/collection/Collection.java
new file mode 100644
index 0000000..b507593
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/Collection.java
@@ -0,0 +1,32 @@
+package com.c2kernel.collection;
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.entity.C2KLocalObject;
+import com.c2kernel.utils.CastorHashMap;
+
+/**
+ * @version $Revision: 1.13 $ $Date: 2004/05/14 15:39:39 $
+ * @author $Author: abranson $
+ */
+public interface Collection<E extends CollectionMember> extends C2KLocalObject
+{
+ public static final short EMPTY = -1;
+
+ public int getCounter();
+
+ public void setCounter(int count);
+
+ public int size();
+
+ public void setMembers(CollectionMemberList<E> newMembers);
+
+ public CollectionMemberList<E> getMembers();
+
+ public E addMember(int entityKey, CastorHashMap props, String classProps) throws MembershipException;
+
+ public E addMember(int entityKey) throws MembershipException;
+
+ public void removeMember(int memberId) throws MembershipException;
+
+ public E getMember(int memberId) throws ObjectNotFoundException;
+
+}
diff --git a/src/main/java/com/c2kernel/collection/CollectionDescription.java b/src/main/java/com/c2kernel/collection/CollectionDescription.java
new file mode 100644
index 0000000..69b569e
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/CollectionDescription.java
@@ -0,0 +1,14 @@
+package com.c2kernel.collection;
+
+/**************************************************************************
+ *
+ * $Revision: 1.1 $
+ * $Date: 2003/03/11 11:09:07 $
+ *
+ * Copyright (C) 2003 CERN - European Organization for Nuclear Research
+ * All rights reserved.
+ **************************************************************************/
+
+public interface CollectionDescription<E extends CollectionMember> extends Collection<E> {
+ public Collection<E> newInstance();
+}
diff --git a/src/main/java/com/c2kernel/collection/CollectionMember.java b/src/main/java/com/c2kernel/collection/CollectionMember.java
new file mode 100644
index 0000000..0b21e30
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/CollectionMember.java
@@ -0,0 +1,38 @@
+package com.c2kernel.collection;
+
+import java.io.Serializable;
+
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.entity.proxy.EntityProxy;
+import com.c2kernel.utils.CastorHashMap;
+
+/**************************************************************************
+ * CollectionMember interface is the superclass of all members
+ * This should be temporary - if we manage to rip GraphableVertex from Vertex,
+ * then that should be the superclass.
+ *
+ * $Revision: 1.19 $
+ * $Date: 2004/01/22 11:24:44 $
+ *
+ * Copyright (C) 2003 CERN - European Organization for Nuclear Research
+ * All rights reserved.
+ **************************************************************************/
+
+public interface CollectionMember extends Serializable {
+
+ public void setEntityKey(int entityKey) throws MembershipException;
+ public int getEntityKey();
+
+ public void assignEntity(int entityKey) throws MembershipException;
+ public void clearEntity();
+ public EntityProxy resolveEntity() throws ObjectNotFoundException;
+
+ public void setID(int Id);
+ public int getID();
+
+ public void setProperties(CastorHashMap props);
+ public CastorHashMap getProperties();
+
+ public void setClassProps(String classProps);
+ public String getClassProps();
+}
diff --git a/src/main/java/com/c2kernel/collection/CollectionMemberList.java b/src/main/java/com/c2kernel/collection/CollectionMemberList.java
new file mode 100644
index 0000000..0a4bb25
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/CollectionMemberList.java
@@ -0,0 +1,22 @@
+/**************************************************************************
+ *
+ * $Revision: 1.1 $
+ * $Date: 2003/05/15 13:10:09 $
+ *
+ * Copyright (C) 2001 CERN - European Organization for Nuclear Research
+ * All rights reserved.
+ **************************************************************************/
+
+package com.c2kernel.collection;
+
+import com.c2kernel.utils.CastorArrayList;
+
+public class CollectionMemberList<E extends CollectionMember> extends CastorArrayList<E>
+{
+
+ public CollectionMemberList()
+ {
+ super();
+ }
+
+}
diff --git a/src/main/java/com/c2kernel/collection/Dependency.java b/src/main/java/com/c2kernel/collection/Dependency.java
new file mode 100644
index 0000000..cbbf28c
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/Dependency.java
@@ -0,0 +1,117 @@
+package com.c2kernel.collection;
+
+
+import com.c2kernel.utils.CastorHashMap;
+import com.c2kernel.utils.KeyValuePair;
+import com.c2kernel.utils.Logger;
+
+/*
+Dependency Object
+Objectified link representing dependency between items.
+e.g.: Used for ProductDesc::Item-dependency-dependencymember-WfDesc::Item
+*/
+
+/**
+ * @version $Revision: 1.15 $ $Date: 2005/04/07 08:03:21 $
+ * @author $Author: abranson $
+ */
+public class Dependency extends Parent2ChildCollection<DependencyMember>
+{
+
+ protected CastorHashMap mProperties = new CastorHashMap();
+ protected String mClassProps = "";
+
+ public Dependency()
+ {
+ setName("Dependency");
+ }
+
+ public Dependency(String name)
+ {
+ setName(name);
+ }
+
+ public CastorHashMap getProperties() {
+ return mProperties;
+ }
+
+ public void setProperties(CastorHashMap props) {
+ mProperties = props;
+ }
+
+ public KeyValuePair[] getKeyValuePairs()
+ {
+ return mProperties.getKeyValuePairs();
+ }
+ public void setKeyValuePairs(KeyValuePair[] pairs)
+ {
+ mProperties.setKeyValuePairs(pairs);
+ }
+
+ public void setClassProps(String classProps) {
+ this.mClassProps = classProps;
+ }
+
+ public String getClassProps() {
+ return mClassProps;
+ }
+
+ @Override
+ public DependencyMember addMember(int entityKey) throws MembershipException {
+ // create member object
+ DependencyMember depMember = new DependencyMember();
+ depMember.setID(getCounter());
+ depMember.setProperties(mProperties);
+ depMember.setClassProps(mClassProps);
+
+ // assign entity
+ depMember.assignEntity(entityKey);
+ mMembers.list.add(depMember);
+ Logger.msg(8, "Dependency::addMember(" + entityKey + ") added to children.");
+ return depMember;
+ }
+
+ @Override
+ public DependencyMember addMember(int entityKey, CastorHashMap props, String classProps)
+ throws MembershipException
+ {
+ if (classProps != null && !classProps.equals(mClassProps))
+ throw new MembershipException("Cannot change classProps in dependency member");
+ DependencyMember depMember = new DependencyMember();
+ depMember.setID(getCounter());
+
+ // merge props
+ CastorHashMap newProps = new CastorHashMap();
+ for (Object name : props.keySet()) {
+ String key = (String)name;
+ newProps.put(key, props.get(key));
+
+ }
+ // class props override local
+ for (Object name : mProperties.keySet()) {
+ String key = (String)name;
+ newProps.put(key, mProperties.get(key));
+
+ }
+ depMember.setProperties(newProps);
+ depMember.setClassProps(mClassProps);
+
+ // assign entity
+ depMember.assignEntity(entityKey);
+ mMembers.list.add(depMember);
+ Logger.msg(8, "Dependency::addMember(" + entityKey + ") added to children.");
+ return depMember;
+ }
+
+ @Override
+ public void removeMember(int memberId) throws MembershipException {
+ for (DependencyMember element : mMembers.list) {
+ if (element.getID() == memberId) {
+ mMembers.list.remove(element);
+ return;
+ }
+ }
+ throw new MembershipException("Member "+memberId+" not found");
+ }
+
+}
diff --git a/src/main/java/com/c2kernel/collection/DependencyDescription.java b/src/main/java/com/c2kernel/collection/DependencyDescription.java
new file mode 100644
index 0000000..547a286
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/DependencyDescription.java
@@ -0,0 +1,53 @@
+package com.c2kernel.collection;
+
+import com.c2kernel.property.PropertyDescriptionList;
+import com.c2kernel.property.PropertyUtility;
+import com.c2kernel.utils.CastorHashMap;
+
+public class DependencyDescription extends Dependency implements CollectionDescription<DependencyMember>{
+
+ public DependencyDescription()
+ {
+ setName("DependencyDescription");
+ }
+
+ public DependencyDescription(String name)
+ {
+ setName(name);
+ }
+
+ @Override
+ public Collection<DependencyMember> newInstance() {
+ String depName = getName().replaceFirst("\'$", ""); // HACK: Knock the special 'prime' off the end for the case of descriptions of descriptions
+ Dependency newDep = new Dependency(depName);
+ if (mMembers.list.size() == 1) { // constrain the members based on the property description
+ DependencyMember mem = mMembers.list.get(0);
+ PropertyDescriptionList pdList = PropertyUtility.getPropertyDescriptionOutcome(mem.getEntityKey());
+ if (pdList!=null) {
+ newDep.setProperties(PropertyUtility.createProperty(pdList));
+ newDep.setClassProps(pdList.getClassProps());
+ }
+ }
+ return newDep;
+ }
+
+
+ @Override
+ public DependencyMember addMember(int entityKey) throws MembershipException {
+ checkMembership();
+ return super.addMember(entityKey);
+ }
+
+ @Override
+ public DependencyMember addMember(int entityKey, CastorHashMap props, String classProps)
+ throws MembershipException {
+ checkMembership();
+ return super.addMember(entityKey, props, classProps);
+ }
+
+ public void checkMembership() throws MembershipException {
+ if (mMembers.list.size() > 0)
+ throw new MembershipException("Dependency descriptions may not have more than one member.");
+ }
+
+}
diff --git a/src/main/java/com/c2kernel/collection/DependencyMember.java b/src/main/java/com/c2kernel/collection/DependencyMember.java
new file mode 100644
index 0000000..4ca2090
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/DependencyMember.java
@@ -0,0 +1,152 @@
+package com.c2kernel.collection;
+
+import java.util.StringTokenizer;
+
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.entity.proxy.EntityProxy;
+import com.c2kernel.lookup.EntityPath;
+import com.c2kernel.lookup.InvalidEntityPathException;
+import com.c2kernel.persistency.ClusterStorage;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.property.Property;
+import com.c2kernel.utils.CastorHashMap;
+import com.c2kernel.utils.KeyValuePair;
+import com.c2kernel.utils.Logger;
+
+
+/**
+* @version $Revision: 1.10 $ $Date: 2004/10/21 08:02:23 $
+* @author $Author: abranson $
+*/
+
+
+public class DependencyMember implements CollectionMember
+{
+
+ private int mEntityKey = -1;
+ private EntityProxy mEntity = null;
+ private int mId = -1;
+ private CastorHashMap mProperties = null;
+ private String mClassProps;
+
+
+ /**************************************************************************
+ *
+ **************************************************************************/
+ public DependencyMember()
+ {
+ mEntityKey = -1;
+ mProperties = new CastorHashMap();
+ }
+
+
+ @Override
+ public void setEntityKey(int entityKey)
+ {
+ mEntityKey = entityKey;
+ mEntity = null;
+ }
+
+ @Override
+ public int getEntityKey()
+ {
+ return mEntityKey;
+ }
+
+ @Override
+ public void setProperties(CastorHashMap props)
+ {
+ mProperties = props;
+ }
+
+ @Override
+ public CastorHashMap getProperties()
+ {
+ return mProperties;
+ }
+
+ public KeyValuePair[] getKeyValuePairs()
+ {
+ return mProperties.getKeyValuePairs();
+ }
+ public void setKeyValuePairs(KeyValuePair[] pairs)
+ {
+ mProperties.setKeyValuePairs(pairs);
+ }
+
+ @Override
+ public int getID() {
+ return mId;
+ }
+
+ @Override
+ public void setID(int id) {
+ mId = id;
+ }
+
+ @Override
+ public void setClassProps(String props)
+ {
+ mClassProps = props;
+ }
+
+ @Override
+ public String getClassProps()
+ {
+ return mClassProps;
+ }
+
+ @Override
+ public void assignEntity(int entityKey) throws MembershipException
+ {
+ if (entityKey > -1) {
+ if (mClassProps == null || getProperties() == null)
+ throw new MembershipException("ClassProps not yet set. Cannot check membership validity.");
+
+ //for each mandatory prop check if its in the member property and has the matching value
+ StringTokenizer sub = new StringTokenizer(mClassProps, ",");
+ while (sub.hasMoreTokens())
+ {
+ String aClassProp = sub.nextToken();
+ try {
+ String memberValue = (String)getProperties().get(aClassProp);
+ Property entityProperty = (Property)Gateway.getStorage().get(entityKey, ClusterStorage.PROPERTY+"/"+aClassProp, null);
+ if (entityProperty == null)
+ throw new MembershipException("Property "+aClassProp+ " does not exist for entityKey=" + entityKey );
+ if (!entityProperty.getValue().equalsIgnoreCase(memberValue))
+ throw new MembershipException("DependencyMember::checkProperty() Values of mandatory prop "+aClassProp+" do not match " + entityProperty.getValue()+"!="+memberValue);
+ }
+ catch (Exception ex)
+ {
+ Logger.error(ex);
+ throw new MembershipException("Error checking properties");
+ }
+ }
+ }
+
+ mEntityKey = entityKey;
+ mEntity = null;
+ }
+
+ @Override
+ public void clearEntity() {
+ mEntityKey = -1;
+ mEntity = null;
+ }
+
+ @Override
+ public EntityProxy resolveEntity() throws ObjectNotFoundException {
+ if (mEntity == null) {
+ try {
+ EntityPath path = new EntityPath(mEntityKey);
+ mEntity = Gateway.getProxyManager().getProxy(path);
+ } catch (InvalidEntityPathException ex) {
+ throw new ObjectNotFoundException("No member defined", "");
+ }
+ }
+ return mEntity;
+
+ }
+
+
+}
diff --git a/src/main/java/com/c2kernel/collection/MembershipException.java b/src/main/java/com/c2kernel/collection/MembershipException.java
new file mode 100644
index 0000000..912d52c
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/MembershipException.java
@@ -0,0 +1,21 @@
+package com.c2kernel.collection;
+
+/**************************************************************************
+ *
+ * $Revision: 1.1 $
+ * $Date: 2003/05/09 14:23:01 $
+ *
+ * Copyright (C) 2003 CERN - European Organization for Nuclear Research
+ * All rights reserved.
+ **************************************************************************/
+
+public class MembershipException extends Exception {
+
+ public MembershipException() {
+ super();
+ }
+
+ public MembershipException(String s) {
+ super(s);
+ }
+}
diff --git a/src/main/java/com/c2kernel/collection/Parent2ChildCollection.java b/src/main/java/com/c2kernel/collection/Parent2ChildCollection.java
new file mode 100644
index 0000000..c59132e
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/Parent2ChildCollection.java
@@ -0,0 +1,127 @@
+package com.c2kernel.collection;
+
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.persistency.ClusterStorage;
+import com.c2kernel.utils.CastorHashMap;
+
+/**
+ * @version $Revision: 1.23 $ $Date: 2004/05/14 15:39:39 $
+ * @author $Author: abranson $
+ */
+abstract public class Parent2ChildCollection<E extends CollectionMember> implements Collection<E>
+{
+
+ private int mCounter = -1; // Contains next available Member ID
+ protected CollectionMemberList<E> mMembers = new CollectionMemberList<E>();
+ protected int mID = -1;
+ protected String mName = ""; // Not checked for uniqueness
+ protected String mURLInfo = "";
+
+ @Override
+ public int getCounter()
+ {
+ if (mCounter == -1)
+ for (Object name : mMembers.list) {
+ CollectionMember element = (CollectionMember)name;
+ if (mCounter < element.getID())
+ mCounter = element.getID();
+ }
+ return ++mCounter;
+ }
+
+ @Override
+ public void setCounter(int count)
+ {
+ mCounter = count;
+ }
+
+
+ @Override
+ public int size()
+ {
+ return mMembers.list.size();
+ }
+
+ public void setID(int id)
+ {
+ mID = id;
+ }
+
+ public int getID()
+ {
+ return mID;
+ }
+
+ @Override
+ public void setName(String name)
+ {
+ mName = name;
+ }
+
+ public void setURLInfo(String urlInfo)
+ {
+ mURLInfo = urlInfo;
+ }
+
+ @Override
+ public String getName()
+ {
+ return mName;
+ }
+
+ @Override
+ public String getClusterType()
+ {
+ return ClusterStorage.COLLECTION;
+ }
+
+ public String getURLInfo()
+ {
+ return mURLInfo;
+ }
+
+ @Override
+ public void setMembers(CollectionMemberList<E> newMembers)
+ {
+ mMembers = newMembers;
+ }
+
+ public boolean contains(int entityKey) {
+ for (Object name : mMembers.list) {
+ CollectionMember element = (CollectionMember)name;
+ if (element.getEntityKey() == entityKey)
+ return true;
+ }
+ return false;
+ }
+
+ public boolean isFull()
+ {
+ for (int i=0; i<size(); i++)
+ {
+ CollectionMember element = mMembers.list.get(i);
+ if (element.getEntityKey() == -1)
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public E getMember(int memberId) throws ObjectNotFoundException {
+ for (E element : mMembers.list) {
+ if (element.getID() == memberId)
+ return element;
+ }
+ throw new ObjectNotFoundException("Member "+memberId+" not found in "+mName, "");
+ }
+
+ @Override
+ public CollectionMemberList<E> getMembers()
+ {
+ return mMembers;
+ }
+
+ @Override
+ public abstract E addMember(int entityKey, CastorHashMap props, String classProps) throws MembershipException;
+
+}
diff --git a/src/main/java/com/c2kernel/collection/RelationshipUtils.java b/src/main/java/com/c2kernel/collection/RelationshipUtils.java
new file mode 100644
index 0000000..6e35ac8
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/RelationshipUtils.java
@@ -0,0 +1,33 @@
+package com.c2kernel.collection;
+
+
+import com.c2kernel.lookup.EntityPath;
+import com.c2kernel.persistency.ClusterStorage;
+import com.c2kernel.process.Gateway;
+
+
+/**
+ * @version $Revision: 1.22 $ $Date: 2004/10/21 08:02:23 $
+ * @author $Author: abranson $
+ */
+
+public class RelationshipUtils
+{
+
+ static public boolean getIsComposite(int entityKey)
+ {
+ if (entityKey == -1) return false;
+ try
+ {
+ if ( ((Aggregation) Gateway.getProxyManager().getProxy(new EntityPath(entityKey)).getObject(ClusterStorage.COLLECTION+"/Composition" )).size() > 0 )
+ return true;
+ }
+ catch (Exception ex)
+ {
+ //do nothing - member has no composition, thus elementary
+ }
+
+ return false;
+ }
+
+}
diff --git a/src/main/java/com/c2kernel/collection/gui/model/AggregationVertexFactory.java b/src/main/java/com/c2kernel/collection/gui/model/AggregationVertexFactory.java
new file mode 100644
index 0000000..cd4963f
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/gui/model/AggregationVertexFactory.java
@@ -0,0 +1,46 @@
+package com.c2kernel.collection.gui.model;
+
+import java.awt.Point;
+
+import com.c2kernel.collection.Aggregation;
+import com.c2kernel.collection.MembershipException;
+import com.c2kernel.graph.model.GraphModelManager;
+import com.c2kernel.graph.model.GraphPoint;
+import com.c2kernel.graph.model.TypeNameAndConstructionInfo;
+import com.c2kernel.graph.model.VertexFactory;
+import com.c2kernel.utils.CastorHashMap;
+import com.c2kernel.utils.Logger;
+
+
+public class AggregationVertexFactory implements VertexFactory
+{
+ private Aggregation mAggregation = null;
+
+
+ @Override
+ public void setCreationContext(Object aggregation)
+ {
+ if (aggregation != null && aggregation instanceof Aggregation)
+ mAggregation = (Aggregation)aggregation;
+ }
+
+
+ @Override
+ public void create
+ (
+ GraphModelManager graphModelManager,
+ Point location,
+ TypeNameAndConstructionInfo typeNameAndConstructionInfo
+ )
+ {
+ if (typeNameAndConstructionInfo.mInfo.equals("AggregationMember")) {
+ try {
+ mAggregation.addMember(-1, new CastorHashMap(), "", new GraphPoint(location.x, location.y), 40, 40);
+ } catch (MembershipException ex) {
+ Logger.error(ex);
+ Logger.exceptionDialog(ex);
+ }
+ }
+ }
+}
+
diff --git a/src/main/java/com/c2kernel/collection/gui/model/AggregationVertexOutlineCreator.java b/src/main/java/com/c2kernel/collection/gui/model/AggregationVertexOutlineCreator.java
new file mode 100644
index 0000000..b28af2e
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/gui/model/AggregationVertexOutlineCreator.java
@@ -0,0 +1,44 @@
+package com.c2kernel.collection.gui.model;
+
+import com.c2kernel.graph.model.GraphPoint;
+import com.c2kernel.graph.model.Vertex;
+import com.c2kernel.graph.model.VertexOutlineCreator;
+
+
+public class AggregationVertexOutlineCreator implements VertexOutlineCreator
+{
+ @Override
+ public void setOutline(Vertex vertex)
+ {
+ GraphPoint centre = vertex.getCentrePoint();
+ int height = vertex.getHeight();
+ int width = vertex.getWidth();
+
+
+ if (height==0 || width==0)
+ vertex.setOutlinePoints
+ (
+ new GraphPoint[]
+ {
+ new GraphPoint(centre.x-20, centre.y-20),
+ new GraphPoint(centre.x+20, centre.y-20),
+ new GraphPoint(centre.x+20, centre.y+20),
+ new GraphPoint(centre.x-20, centre.y+20)
+
+ }
+ );
+ else
+
+ vertex.setOutlinePoints
+ (
+ new GraphPoint[]
+ {
+ new GraphPoint(centre.x-width/2, centre.y-height/2),
+ new GraphPoint(centre.x+width/2, centre.y-height/2),
+ new GraphPoint(centre.x+width/2, centre.y+height/2),
+ new GraphPoint(centre.x-width/2, centre.y+height/2)
+
+ }
+ );
+ }
+}
diff --git a/src/main/java/com/c2kernel/collection/gui/view/AggregationMemberRenderer.java b/src/main/java/com/c2kernel/collection/gui/view/AggregationMemberRenderer.java
new file mode 100644
index 0000000..6d41d20
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/gui/view/AggregationMemberRenderer.java
@@ -0,0 +1,125 @@
+package com.c2kernel.collection.gui.view;
+
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+
+import com.c2kernel.collection.Aggregation;
+import com.c2kernel.collection.AggregationMember;
+import com.c2kernel.graph.model.GraphPoint;
+import com.c2kernel.graph.model.Vertex;
+import com.c2kernel.graph.view.VertexRenderer;
+import com.c2kernel.utils.Logger;
+
+/**
+ * @version $Revision: 1.24 $ $Date: 2005/12/01 14:23:15 $
+ * @author $Author: abranson $
+ */
+
+public class AggregationMemberRenderer implements VertexRenderer
+{
+
+ private Aggregation mAggregation = null;
+
+ public AggregationMemberRenderer()
+ {
+ }
+
+ public void setAggregation(Aggregation agg)
+ {
+ mAggregation = agg;
+ }
+
+
+ @Override
+ public void draw(Graphics2D g2d, Vertex vertex)
+ {
+ GraphPoint centre = vertex.getCentrePoint();
+ GraphPoint[] outline = vertex.getOutlinePoints();
+ FontMetrics metrics = g2d.getFontMetrics();
+
+ AggregationMember memberPair = mAggregation.getMemberPair(vertex.getID());
+
+ try
+ {
+ String name = memberPair.getEntityName();
+
+ g2d.drawString( name,
+ centre.x-metrics.stringWidth(name)/2,
+ topYOfOutline(outline) );
+
+ g2d.drawImage
+ (
+ memberPair.getImage(),
+ centre.x - 8,
+ centre.y - 8,
+ null
+ );
+
+
+
+ // Draw the outline of the vertex
+ if(outline.length > 1)
+ {
+ for(int i=0; i<outline.length-1; i++)
+ {
+ g2d.drawLine
+ (
+ outline[i].x,
+ outline[i].y,
+ outline[i+1].x,
+ outline[i+1].y
+ );
+ }
+
+ g2d.drawLine
+ (
+ outline[outline.length-1].x,
+ outline[outline.length-1].y,
+ outline[0].x,
+ outline[0].y
+ );
+ }
+
+
+ }
+ catch (Exception ex)
+ {
+ Logger.error("AggregationMemberRenderer::draw() " + ex);
+ }
+ }
+
+
+ int topYOfOutline(GraphPoint[] outline)
+ {
+ int topY = outline[0].y;
+ int i = 0;
+
+
+ for(i=1; i<outline.length; i++)
+ {
+ if(outline[i].y < topY)
+ {
+ topY = outline[i].y;
+ }
+ }
+
+ return topY;
+ }
+
+ int bottomYOfOutline(GraphPoint[] outline)
+ {
+ int bottomY = outline[0].y;
+ int i = 0;
+
+
+ for(i=1; i<outline.length; i++)
+ {
+ if(outline[i].y > bottomY)
+ {
+ bottomY = outline[i].y;
+ }
+ }
+
+ return bottomY;
+ }
+}
diff --git a/src/main/java/com/c2kernel/collection/gui/view/CollectionFrame.java b/src/main/java/com/c2kernel/collection/gui/view/CollectionFrame.java
new file mode 100644
index 0000000..2d40436
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/gui/view/CollectionFrame.java
@@ -0,0 +1,41 @@
+package com.c2kernel.collection.gui.view;
+
+import java.awt.GridLayout;
+
+import javax.swing.JFrame;
+
+import com.c2kernel.collection.Aggregation;
+import com.c2kernel.gui.tabs.CollectionPane;
+
+
+/**
+ * @version $Revision: 1.10 $ $Date: 2003/04/06 15:06:36 $
+ * @author $Author: abranson $
+ */
+
+public class CollectionFrame extends JFrame
+{
+
+ private CollectionPane mCollectionPane = new CollectionPane();
+
+ public CollectionFrame()
+ {
+ createLayout();
+ }
+
+ public void setAggregation(Aggregation aggregation)
+ {
+ mCollectionPane.add(aggregation);
+ }
+
+
+ private void createLayout()
+ {
+ getContentPane().setLayout(new GridLayout(1, 1));
+
+ getContentPane().add(mCollectionPane);
+
+ setSize(1000, 1000);
+ setVisible(true);
+ }
+}
diff --git a/src/main/java/com/c2kernel/collection/gui/view/PropertyPanel.java b/src/main/java/com/c2kernel/collection/gui/view/PropertyPanel.java
new file mode 100644
index 0000000..f566d70
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/gui/view/PropertyPanel.java
@@ -0,0 +1,37 @@
+package com.c2kernel.collection.gui.view;
+
+import com.c2kernel.collection.Aggregation;
+import com.c2kernel.collection.AggregationMember;
+import com.c2kernel.collection.CollectionMember;
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.graph.model.Vertex;
+import com.c2kernel.graph.view.VertexPropertyPanel;
+
+public class PropertyPanel extends VertexPropertyPanel {
+
+ Aggregation mCollection;
+
+ public PropertyPanel() {
+ super();
+ }
+
+ public void setCollection(Aggregation collection) {
+ mCollection = collection;
+ }
+
+ @Override
+ public void setVertex(Vertex vert) {
+ try {
+ CollectionMember newMember = mCollection.getMember(vert.getID());
+ if (newMember instanceof AggregationMember) {
+ super.setVertex((AggregationMember)newMember);
+ return;
+ }
+ else
+ clear();
+ } catch (ObjectNotFoundException ex) {
+ clear();
+ selObjClass.setText("No Collection Member object found");
+ }
+ }
+}
diff --git a/src/main/java/com/c2kernel/collection/gui/view/SelectedMemberPanel.java b/src/main/java/com/c2kernel/collection/gui/view/SelectedMemberPanel.java
new file mode 100644
index 0000000..5b59b35
--- /dev/null
+++ b/src/main/java/com/c2kernel/collection/gui/view/SelectedMemberPanel.java
@@ -0,0 +1,164 @@
+package com.c2kernel.collection.gui.view;
+
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.JToggleButton;
+
+import com.c2kernel.collection.AggregationMember;
+import com.c2kernel.collection.MembershipException;
+import com.c2kernel.entity.proxy.EntityProxy;
+import com.c2kernel.graph.model.Vertex;
+import com.c2kernel.graph.view.SelectedVertexPanel;
+import com.c2kernel.gui.DomainKeyConsumer;
+import com.c2kernel.gui.MainFrame;
+import com.c2kernel.lookup.DomainPath;
+import com.c2kernel.lookup.EntityPath;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.utils.Language;
+
+/**************************************************************************
+ *
+ * $Revision: 1.10 $
+ * $Date: 2005/05/12 10:12:52 $
+ *
+ * Copyright (C) 2003 CERN - European Organization for Nuclear Research
+ * All rights reserved.
+ **************************************************************************/
+
+
+public class SelectedMemberPanel extends SelectedVertexPanel implements DomainKeyConsumer {
+
+ JLabel slotNumber = new JLabel();
+ JTextField memberKey = new JTextField(14);
+
+ JButton findButton = new JButton(Language.translate("Find"));
+ JToggleButton changeButton = new JToggleButton(Language.translate("Change"));
+ JButton removeButton = new JButton(Language.translate("Remove"));
+
+ SelectedMemberPanel me;
+ AggregationMember selectedMember = null;
+
+ public SelectedMemberPanel() {
+ me=this;
+ setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+
+ JPanel attrs = new JPanel(new GridLayout(3,2));
+ attrs.add(new JLabel(Language.translate("Slot Number:")));
+ attrs.add(slotNumber);
+ attrs.add(new JLabel(Language.translate("Assigned Member:")));
+ attrs.add(memberKey);
+ memberKey.setEditable(false);
+
+ add(attrs);
+ add(Box.createVerticalStrut(10));
+
+ findButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ae) {
+ String code = memberKey.getText();
+ if (code == null || code.length() == 0)
+ code = memberKey.getText().replace('/',' ');
+ MainFrame.itemFinder.pushNewKey(code);
+ }
+ });
+
+ changeButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ae) {
+ if (changeButton.getModel().isSelected()) {
+ MainFrame.status.setText(Language.translate("Please scan or type your barcode to assign in the top field"));
+ MainFrame.itemFinder.setConsumer(me, "Assign");
+ findButton.setEnabled(false);
+ }
+ else {
+ MainFrame.status.setText("");
+ MainFrame.itemFinder.clearConsumer(me);
+ if (selectedMember.getEntityKey() > -1) findButton.setEnabled(true);
+ }
+ }
+ });
+
+ removeButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ae) {
+ selectedMember.clearEntity();
+ selectedMember.getProperties().remove("Name");
+ select(selectedMember);
+ }
+ });
+
+ Box buttonBox = Box.createHorizontalBox();
+ buttonBox.add(findButton);
+ if (MainFrame.isAdmin) {
+ buttonBox.add(changeButton);
+ buttonBox.add(removeButton);
+ }
+
+ setButtons(false);
+ add(buttonBox);
+ }
+
+ @Override
+ public void select(Vertex vert) {
+ selectedMember = (AggregationMember)vert;
+ slotNumber.setText(String.valueOf(vert.getID()));
+ int memberId = selectedMember.getEntityKey();
+ String name = "Empty";
+ try {
+ EntityProxy member = Gateway.getProxyManager().getProxy(new EntityPath(memberId));
+ name = member.getName();
+ } catch (Exception e) { }
+ memberKey.setText(name);
+ setButtons(true);
+
+ revalidate();
+ }
+
+ @Override
+ public void clear() {
+ slotNumber.setText("");
+ memberKey.setText("");
+ setButtons(false);
+ revalidate();
+ }
+
+ public void setButtons(boolean state) {
+ findButton.setEnabled(state);
+ changeButton.getModel().setSelected(false);
+ changeButton.setEnabled(state);
+ removeButton.setEnabled(state);
+ MainFrame.itemFinder.clearConsumer(me);
+ }
+ /**
+ *
+ */
+ @Override
+ public void push(DomainPath key) {
+ MainFrame.status.setText("Assigning entity "+key.getSysKey()+" to slot "+selectedMember.getID());
+ try {
+ selectedMember.assignEntity(key.getSysKey());
+ select(selectedMember);
+ } catch (MembershipException ex) {
+ JOptionPane.showMessageDialog(null, "Product does not fit in this slot", "Error", JOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+ /**
+ *
+ */
+ @Override
+ public void push(String name) {
+ JOptionPane.showMessageDialog(null, "Product is not known in this centre", "Error", JOptionPane.ERROR_MESSAGE);
+ }
+
+}
+