1   package ixa.kaflib;
2   
3   import java.io.Serializable;
4   import java.util.ArrayList;
5   import java.util.List;
6   
7   public class Predicate extends IReferable implements Serializable {
8   
9       public static class Role implements Serializable {
10  
11          private String rid;
12          private String semRole;
13          private Span<Term> span;
14          private List<ExternalRef> externalReferences;
15          private List<String> flags;
16  
17          Role(String id, String semRole, Span span) {
18              this.rid = id;
19              this.semRole = semRole;
20              this.span = span;
21              this.externalReferences = new ArrayList<ExternalRef>();
22              this.flags = new ArrayList<String>();
23          }
24  
25          @Override
26          public String toString() {
27              return "Role{" +
28                      semRole + " -> " +
29                      span.getStr() +
30                      '}';
31          }
32  
33          public String getId() {
34              return this.rid;
35          }
36  
37          public void setId(String id) {
38              this.rid = id;
39          }
40  
41          public String getSemRole() {
42              return this.semRole;
43          }
44  
45          public void setSemRole(String semRole) {
46              this.semRole = semRole;
47          }
48  
49          public Span<Term> getSpan() {
50              return this.span;
51          }
52  
53          public void setSpan(Span<Term> span) {
54              this.span = span;
55          }
56  
57          public List<Term> getTerms() {
58              return this.span.getTargets();
59          }
60  
61          public void addTerm(Term term) {
62              this.span.addTarget(term);
63          }
64  
65          public void addTerm(Term term, boolean isHead) {
66              this.span.addTarget(term, isHead);
67          }
68  
69          public String getStr() {
70              String str = "";
71              for (Term term : this.span.getTargets()) {
72                  if (!str.isEmpty()) {
73                      str += " ";
74                  }
75                  str += term.getStr();
76              }
77              return str;
78          }
79  
80          public ExternalRef getExternalRef(String resource) {
81              for (ExternalRef ref : externalReferences) {
82                  if (ref.getResource().equalsIgnoreCase(resource)) {
83                      return ref;
84                  }
85              }
86              return null;
87          }
88  
89          public List<ExternalRef> getExternalRefs() {
90              return externalReferences;
91          }
92  
93          public void addExternalRef(ExternalRef externalRef) {
94              externalReferences.add(externalRef);
95          }
96  
97          public void addExternalRefs(List<ExternalRef> externalRefs) {
98              externalReferences.addAll(externalRefs);
99          }
100 
101         public List<String> getFlags() {
102             return this.flags;
103         }
104 
105         public void addFlag(String flag) {
106             if (!this.flags.contains(flag)) {
107                 this.flags.add(flag);
108             }
109         }
110 
111         public void removeFlag(String flag) {
112             this.flags.remove(flag);
113         }
114 
115     }
116 
117     private String id;
118     private String uri;
119     private String source;
120 
121     public String getSource() {
122         return source;
123     }
124 
125     public void setSource(String source) {
126         this.source = source;
127     }
128 
129     public boolean hasSource() {
130         return this.source != null;
131     }
132 
133     private double confidence;
134     private Span<Term> span;
135     private List<Role> roles;
136     private List<ExternalRef> externalReferences;
137     private List<String> flags;
138 
139     Predicate(String id, Span<Term> span) {
140         this.id = id;
141         this.span = span;
142         this.roles = new ArrayList<Role>();
143         this.confidence = -1.0f;
144         this.externalReferences = new ArrayList<ExternalRef>();
145         this.flags = new ArrayList<String>();
146     }
147 
148     public String getId() {
149         return this.id;
150     }
151 
152     public void setId(String id) {
153         this.id = id;
154     }
155 
156     public boolean hasUri() {
157         return (this.uri != null);
158     }
159 
160     public String getUri() {
161         return this.uri;
162     }
163 
164     public void setUri(String uri) {
165         this.uri = uri;
166     }
167 
168     public boolean hasConfidence() {
169         return confidence != -1.0f;
170     }
171 
172     public double getConfidence() {
173         return confidence;
174     }
175 
176     public void setConfidence(double confidence) {
177         this.confidence = confidence;
178     }
179 
180     public Span<Term> getSpan() {
181         return this.span;
182     }
183 
184     public void setSpan(Span<Term> span) {
185         this.span = span;
186     }
187 
188     public List<Term> getTerms() {
189         return this.span.getTargets();
190     }
191 
192     public void addTerm(Term term) {
193         this.span.addTarget(term);
194     }
195 
196     public void addTerm(Term term, boolean isHead) {
197         this.span.addTarget(term, isHead);
198     }
199 
200     public String getStr() {
201         String str = "";
202         if (!this.span.isEmpty()) {
203             Term target = this.span.getFirstTarget();
204             str += target.getId() + " " + target.getStr() + " ";
205         }
206         str += ":";
207         for (Role role : this.roles) {
208             if (!role.span.isEmpty()) {
209                 Term roleTarget = role.getSpan().getFirstTarget();
210                 str += " " + role.getSemRole() + "[" + roleTarget.getId() + " " + roleTarget.getStr() + "]";
211             }
212         }
213         return str;
214     }
215 
216     public String getSpanStr() {
217         String str = "";
218         for (Term term : this.span.getTargets()) {
219             if (!str.isEmpty()) {
220                 str += " ";
221             }
222             str += term.getStr();
223         }
224         return str;
225     }
226 
227     public ExternalRef getExternalRef(String resource) {
228         for (ExternalRef ref : externalReferences) {
229             if (ref.getResource().equalsIgnoreCase(resource)) {
230                 return ref;
231             }
232         }
233         return null;
234     }
235 
236     public List<ExternalRef> getExternalRefs() {
237         return externalReferences;
238     }
239 
240     public void addExternalRef(ExternalRef externalRef) {
241         externalReferences.add(externalRef);
242     }
243 
244     public void addExternalRefs(List<ExternalRef> externalRefs) {
245         externalReferences.addAll(externalRefs);
246     }
247 
248     public List<Role> getRoles() {
249         return this.roles;
250     }
251 
252     public void addRole(Role role) {
253         this.roles.add(role);
254     }
255 
256     public void removeRole(Role role) {
257         this.roles.remove(role);
258     }
259 
260     public List<String> getFlags() {
261         return this.flags;
262     }
263 
264     public void addFlag(String flag) {
265         if (!this.flags.contains(flag)) {
266             this.flags.add(flag);
267         }
268     }
269 
270     public void removeFlag(String flag) {
271         this.flags.remove(flag);
272     }
273 
274 }