1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.deri.wsmo4j.logicalexpression;
19
20 import java.util.*;
21
22 import org.deri.wsmo4j.io.serializer.wsml.*;
23 import org.deri.wsmo4j.logicalexpression.util.*;
24 import org.omwg.logicalexpression.*;
25 import org.omwg.logicalexpression.Visitor;
26 import org.omwg.logicalexpression.terms.*;
27 import org.wsmo.common.*;
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 public class CompoundMoleculeImpl implements CompoundMolecule {
43
44 List <Molecule> molecules;
45
46 public CompoundMoleculeImpl(List <Molecule> molecules){
47 setOperands(new ArrayList <LogicalExpression> (molecules));
48 }
49
50 public List <AttributeConstraintMolecule> listAttributeConstraintMolecules() {
51 return filter(AttributeConstraintMolecule.class, null);
52 }
53
54 public List <AttributeInferenceMolecule> listAttributeInferenceMolecules() {
55 return filter(AttributeInferenceMolecule.class, null);
56 }
57
58 public List <AttributeValueMolecule> listAttributeValueMolecules() {
59 return filter(AttributeValueMolecule.class, null);
60 }
61
62 public List <AttributeConstraintMolecule> listAttributeConstraintMolecules(Term t) {
63 return filter(AttributeConstraintMolecule.class, t);
64 }
65
66 public List <AttributeInferenceMolecule> listAttributeInferenceMolecules(Term t) {
67 return filter(AttributeInferenceMolecule.class, t);
68 }
69
70 public List <AttributeValueMolecule> listAttributeValueMolecules(Term t) {
71 return filter(AttributeValueMolecule.class, t);
72 }
73
74 public List <MembershipMolecule> listMemberShipMolecules() {
75 return filter(MembershipMolecule.class, null);
76 }
77
78 public List <SubConceptMolecule> listSubConceptMolecules() {
79 return filter(SubConceptMolecule.class, null);
80 }
81
82 public List <LogicalExpression> listOperands() {
83 return new ArrayList <LogicalExpression> (Collections.unmodifiableList(molecules));
84 }
85
86 private List filter(Class clazz, Term attributeName){
87 List ret = new Vector();
88 Iterator i = molecules.iterator();
89 while (i.hasNext()){
90 Object o = i.next();
91 if (clazz.isInstance(o) &&
92 (attributeName == null ||
93 attributeName.equals(((AttributeMolecule)o).getAttribute()))){
94 ret.add(o);
95 }
96 }
97 return Collections.unmodifiableList(ret);
98 }
99
100 public void accept(Visitor v) {
101 v.visitCompoundMolecule(this);
102 }
103
104
105
106
107 public CompoundMoleculeImpl() {
108 super();
109
110 }
111
112
113 public boolean equals(Object o){
114 if (!(o instanceof CompoundMolecule)){
115 return false;
116 }
117 if (o==this){
118 return true;
119 }
120 CompoundMolecule cm = (CompoundMolecule)o;
121 if (cm.listOperands().size()!=molecules.size()){
122 return false;
123 }
124 Iterator i = cm.listOperands().iterator();
125 while (i.hasNext()){
126 Object molecule = i.next();
127 if (!molecules.contains(molecule)){
128 return false;
129 }
130 }
131 return true;
132 }
133
134 public String toString(){
135 return new LogExprSerializerWSML(null).serialize(this);
136 }
137
138
139
140
141 public void setOperands(List <LogicalExpression> operands) {
142 if (operands.size() < 2){
143 throw new IllegalArgumentException("Compound Molecules have to consist of at least 2 Molecules");
144 }
145 if (!SetUtil.allOfType(operands, Molecule.class)){
146 throw new IllegalArgumentException("Compound Molecule can only consist of Molecules");
147 }
148 Iterator i = operands.iterator();
149 Term t = ((Molecule)i.next()).getLeftParameter();
150 while (i.hasNext()){
151 Term tNext = ((Molecule)i.next()).getLeftParameter();
152 if (!tNext.equals(t)){
153 throw new IllegalArgumentException("Only Molecules with the same ID can be grouped to a Compound Molecule");
154 }
155 }
156
157 List <Molecule> temp = new ArrayList <Molecule> ();
158 for(LogicalExpression le : operands){
159 if (le instanceof Molecule){
160 temp.add((Molecule) le);
161 }
162 }
163
164 this.molecules = temp;
165 if (this.listMemberShipMolecules().size() !=0 &&
166 this.listSubConceptMolecules().size() != 0){
167 throw new IllegalArgumentException("Compound Molecules can have either memberOf or subConceptOf Satement not both!");
168 }
169 }
170
171
172
173
174
175
176
177 public String toString(TopEntity nsHolder) {
178 return new LogExprSerializerWSML(nsHolder).serialize(this);
179 }
180
181 public int hashCode() {
182 return CompoundMoleculeImpl.class.hashCode()+molecules.size();
183 }
184 }
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211