summaryrefslogtreecommitdiff
path: root/source/com/c2kernel/collection/Aggregation.java
blob: 72b8005ffbaa368bcfebd52440bdc018efd5abe4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package com.c2kernel.collection;

import java.util.Iterator;

import com.c2kernel.collection.gui.model.AggregationVertexOutlineCreator;
import com.c2kernel.graph.model.*;
import com.c2kernel.utils.*;

/**
 * @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");
        mMembers = new CollectionMemberList();
    }


    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 = (AggregationMember) 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 = (AggregationMember) mMembers.list.get(i);
            if (element.getID() == vertexID)
                return element;
    	}
    	return null;		
	}

    public void 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());
    }


    public void addMember(int entityKey, CastorHashMap props, String classProps) throws MembershipException 
    {
        addMember(entityKey, props, classProps, new GraphPoint(100,100*getCounter()), 20, 20);
    }
    
    public void addMember(int entityKey) throws MembershipException {
        throw new MembershipException("Aggregations cannot accept arbitrary members without type info");
        
    }

    public void removeMember(int memberId) throws MembershipException {
        for (Iterator iter = mMembers.list.iterator(); iter.hasNext();) {
            AggregationMember element = (AggregationMember)iter.next();
            if (element.getID() == memberId) {
                element.clearEntity();
                mLayout.removeVertex(getLayout().getVertexById(memberId));
                return;
            }
        }
        throw new MembershipException("Member "+memberId+" not found");
    }

}