4A Server -  2.0
 All Classes Namespaces Files Functions Variables Enumerator
AnnotType.java
Go to the documentation of this file.
1 /*
2  * Project: Server for annotations sharing
3  * Author: Ing. Jaroslav Dytrych idytrych@fit.vutbr.cz
4  * File: AnnotType.java
5  * Description: Class representing type of annotation
6  */
7 
8 /**
9  * @file AnnotType.java
10  *
11  * @brief Class representing type of annotation
12  */
13 
14 package cz.vutbr.fit.knot.annotations.entity;
15 
18 import java.io.Serializable;
19 import java.util.ArrayList;
20 import java.util.Collections;
21 import java.util.Iterator;
22 import java.util.List;
23 import javax.persistence.Basic;
24 import javax.persistence.CascadeType;
25 import javax.persistence.Column;
26 import javax.persistence.Entity;
27 import javax.persistence.FetchType;
28 import javax.persistence.GeneratedValue;
29 import javax.persistence.GenerationType;
30 import javax.persistence.Id;
31 import javax.persistence.JoinColumn;
32 import javax.persistence.JoinTable;
33 import javax.persistence.Lob;
34 import javax.persistence.ManyToMany;
35 import javax.persistence.NamedQueries;
36 import javax.persistence.NamedQuery;
37 import javax.persistence.OneToMany;
38 import javax.persistence.OneToOne;
39 import javax.persistence.Table;
40 
41 /**
42  * Class representing type of annotation
43  *
44  * @brief Class representing type of annotation
45  * @author idytrych
46  */
47 @Entity
48 @Table(name = "annotType")
49 @NamedQueries({
50  @NamedQuery(name = "AnnotType.findAll", query = "SELECT a FROM AnnotType a"),
51  @NamedQuery(name = "AnnotType.findByUri", query = "SELECT a FROM AnnotType a WHERE a.uri = :uri"),
52  @NamedQuery(name = "AnnotType.findByUriAndGroup", query = "SELECT a FROM AnnotType a WHERE a.uri = :uri AND a.groupId = :groupId"),
53  @NamedQuery(name = "AnnotType.findById", query = "SELECT a FROM AnnotType a WHERE a.id = :id"),
54  @NamedQuery(name = "AnnotType.findByName", query = "SELECT a FROM AnnotType a WHERE a.name = :name"),
55  @NamedQuery(name = "AnnotType.findByAncestor", query = "SELECT a FROM AnnotType a WHERE a.ancestor = :ancestor"),
56  @NamedQuery(name = "AnnotType.findByUserGroup", query = "SELECT a FROM AnnotType a WHERE a.groupId = :groupId"),
57  @NamedQuery(name = "AnnotType.findByNUA", query = "SELECT a FROM AnnotType a WHERE a.name = :name AND a.uri = :uri AND a.ancestor = :ancestor")})
58 public class AnnotType implements Serializable {
59  private static final long serialVersionUID = 1L;
60  /** Annotation type id */
61  @Id
62  @GeneratedValue(strategy = GenerationType.IDENTITY)
63  @Basic(optional = false)
64  @Column(name = "id")
65  private Integer id;
66  /** URI of type */
67  @Basic(optional = false)
68  @Column(name = "uri")
69  private String uri;
70  /** Name of type */
71  @Basic(optional = false)
72  @Column(name = "name")
73  private String name;
74  /** Id of primary ancestor of type (ancestor for old clients) */
75  @Basic(optional = true)
76  @Column(name = "ancestor", insertable=false, updatable=false)
77  private Integer ancestor;
78  /** Id of user group to which this type belongs */
79  @Basic(optional = true)
80  @Column(name = "groupId", insertable=false, updatable=false)
81  private Integer groupId;
82  /** Indicator of restricted attributes */
83  @Basic(optional = false)
84  @Column(name = "restrictedAtt")
85  private Boolean restrictedAtt;
86  /** URI in original ontology */
87  @Basic(optional = true)
88  @Column(name = "uriInOntology")
89  private String uriInOntology;
90  /** Comment */
91  @Basic(optional = true)
92  @Lob
93  @Column(name = "commentary")
94  private String comment;
95 
96  /** Attributes of annotation type */
97  @OneToMany(mappedBy = "annotationType", cascade = CascadeType.ALL,
98  targetEntity = AnnotTypeAttr.class, fetch = FetchType.EAGER)
99  private List<AnnotTypeAttr> attributes;
100  /** Primary ancestor of type (ancestor for old clients) */
101  @OneToOne(optional = true)
102  @JoinColumn(name = "ancestor", referencedColumnName = "id")
103  private AnnotType ancestorType;
104  /** User group to which this type belongs */
105  @OneToOne(optional = true)
106  @JoinColumn(name = "groupId", referencedColumnName = "id")
107  private UserGroup group;
108 
109  /** List of ancestors of this type */
110  @ManyToMany(cascade = CascadeType.MERGE)
111  @JoinTable(name = "typeAncestor",
112  joinColumns =
113  @JoinColumn(name = "type", referencedColumnName = "id"),
114  inverseJoinColumns =
115  @JoinColumn(name = "ancestor", referencedColumnName = "id"))
116  public List<AnnotType> ancestorTypes;
117 
118  /**
119  * Constructor
120  */
121  public AnnotType() {
122  }
123 
124  /**
125  * Constructor of reference objects for searching purposes - no initialization
126  * needed
127  *
128  * @param id Id of annotation type
129  */
130  public AnnotType(Integer id) {
131  this.id = id;
132  }
133 
134  /**
135  * Constructor
136  *
137  * @param uri URI of type of annotation
138  * @param name Name of type of annotation
139  * @param ancestorT Ancestor of type of annotation
140  * @param group User group to which type of annotation belongs
141  */
142  public AnnotType(String uri, String name, AnnotType ancestorT, UserGroup group) {
143  this.uri = uri;
144  this.name = name;
145  if (ancestorT != null) {
146  this.ancestor = ancestorT.getId();
147  } else {
148  this.ancestor = null;
149  }
150  this.ancestorType = ancestorT;
151  this.group = group;
152  this.attributes = new ArrayList<AnnotTypeAttr>();
153  this.ancestorTypes = new ArrayList<AnnotType>();
154  this.restrictedAtt = false;
155  this.uriInOntology = null;
156  this.comment = null;
157  }
158 
159  /**
160  * Gets id of type of annotation
161  *
162  * @return Returns id of type
163  */
164  public Integer getId() {
165  return id;
166  }
167 
168  /**
169  * Sets id of type of annotation
170  *
171  * @param id Id of type of annotation
172  */
173  public void setId(Integer id) {
174  this.id = id;
175  }
176 
177  /**
178  * Gets URI of type of annotation
179  *
180  * @return Returns URI of type of annotation
181  */
182  public String getUri() {
183  return uri;
184  }
185 
186  /**
187  * Sets URI of type of annotation
188  *
189  * @param uri URI of type of annotation
190  */
191  public void setUri(String uri) {
192  this.uri = uri;
193  }
194 
195  /**
196  * Gets name of type of annotation
197  *
198  * @return Returns name of type of annotation
199  */
200  public String getName() {
201  return name;
202  }
203 
204  /**
205  * Sets name of type of annotation
206  *
207  * @param name Name of type of annotation
208  */
209  public void setName(String name) {
210  this.name = name;
211  }
212 
213  /**
214  * Gets id of ancestor type of annotation
215  *
216  * @return Returns id of ancestor type of annotation
217  */
218  public Integer getAncestor() {
219  return ancestor;
220  }
221 
222  /**
223  * Sets id of ancestor type of annotation
224  *
225  * @param ancestor id of new ancestor
226  */
227  public void setAncestor(Integer ancestor) {
228  this.ancestor = ancestor;
229  }
230 
231  /**
232  * Sets ancestor type of annotation
233  *
234  * @param ancestorType Ancestor type of annotation
235  */
236  public void setAncestorType(AnnotType ancestorType) {
237  this.ancestorType = ancestorType;
238  }
239 
240  /**
241  * Gets list of ancestor types
242  *
243  * @return Returns list of ancestor types
244  */
245  public List<AnnotType> getAncestorTypes() {
246  return ancestorTypes;
247  }
248 
249  /**
250  * Sets list of ancestor types
251  *
252  * @param ancestorTypes List of ancestor types
253  */
254  public void setAncestorTypes(List<AnnotType> ancestorTypes) {
255  this.ancestorTypes = ancestorTypes;
256  }
257 
258  /**
259  * Gets list of ancestor types in ArrayList
260  *
261  * @return Returns ArrayList with ancestor types
262  */
263  public ArrayList<AnnotType> getAncestorTypesAL() {
264  return new ArrayList<AnnotType>(ancestorTypes);
265  }
266 
267  /**
268  * Adds ancestor to list of ancestor types
269  *
270  * @param ancestor Ancestor type
271  */
272  public void addAncestorType(AnnotType ancestor) {
273  if(ancestorTypes == null){
274  this.ancestorTypes = new ArrayList<AnnotType>();
275  }
276  if (ancestorTypes.indexOf(ancestor) < 0) { // type not yet in ancestor list
277  this.ancestorTypes.add(ancestor);
278  }
279  }
280 
281  /**
282  * Gets ancestor type of annotation
283  *
284  * @return Returns ancestor type of annotation
285  */
287  return ancestorType;
288  }
289 
290  /**
291  * Gets list of attributes
292  *
293  * @return Returns list of attributes
294  */
295  public List<AnnotTypeAttr> getAttributes() {
296  return attributes;
297  }
298 
299  /**
300  * Sets list of attributes
301  *
302  * @param attributes List of attributes
303  */
304  public void setAttributes(ArrayList<AnnotTypeAttr> attributes) {
305  this.attributes = attributes;
306  }
307 
308  /**
309  * Gets user group to which type of annotation belongs
310  *
311  * @return Returns user group to which type of annotation belongs
312  */
313  public UserGroup getGroup() {
314  return group;
315  }
316 
317  /**
318  * Sets user group to which type of annotation belongs
319  *
320  * @param group User group to which type of annotation belongs
321  */
322  public void setGroup(UserGroup group) {
323  this.group = group;
324  }
325 
326  /**
327  * Gets URI in original ontology
328  *
329  * @return Returns URI in original ontology
330  */
331  public String getUriInOntology() {
332  return uriInOntology;
333  }
334 
335  /**
336  * Sets URI in original ontology
337  *
338  * @param uriInOntology URI in original ontology
339  */
340  public void setUriInOntology(String uriInOntology) {
341  this.uriInOntology = uriInOntology;
342  }
343 
344  @Override
345  public int hashCode() {
346  int hash = 0;
347  hash += (id != null ? id.hashCode() : 0);
348  return hash;
349  }
350 
351  /**
352  * Compares this with other object and returns, whether objects are same type
353  * and have same id.
354  *
355  * @param object Object to compare with
356  * @return If object is same type and have same id, returns true, false otherwise
357  */
358  @Override
359  public boolean equals(Object object) {
360  if (!(object instanceof AnnotType)) {
361  return false;
362  }
363  AnnotType other = (AnnotType) object;
364  if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
365  return false;
366  }
367  return true;
368  }
369 
370  @Override
371  public String toString() {
372  return "cz.vutbr.fit.knot.annotations.entity.AnnotType[id=" + id + ",name=" + name + "ancestor=" + ancestor + "]";
373  }
374 
375  /**
376  * Returns serialized informations about type of annotation in XML
377  *
378  * @param withAncestors If true, list of ancestors will be serialized, if false, list will be omitted
379  * @return Returns serialized informations about type of annotation in XML
380  */
381  public String toXMLString(boolean withAncestors) {
382  // serialize ancestors
383  String serializedAnc = "";
384  if (withAncestors) { // if protocol version is greater then 1.0
385  for (Iterator<AnnotType> it = ancestorTypes.iterator(); it.hasNext();) {
386  AnnotType ancType = it.next();
387  serializedAnc = serializedAnc + "<ancestor uri=\"" + ancType.getUri() + "\"/>";
388  }
389  if (comment != null && !comment.isEmpty()) { // if comment is presented, it will be serialized
390  serializedAnc = serializedAnc + "<comment>"
391  + "<![CDATA["
392  + comment
393  + "]]>"
394  + "</comment>";
395  }
396  } // if protocol version is greater then 1.0
397  // create group attribute
398  String grString = "";
399  if (group != null) {
400  grString = " group=\"" + group.getUri() + "\"";
401  }
402  // create restrictedAttributes attribute
403  String rAString = "";
404  if (restrictedAtt) {
405  rAString = " restrictedAttributes=\"true\"";
406  }
407  if (attributes.isEmpty() && ancestorType == null) {
408  if (serializedAnc.equals("")) {
409  serializedAnc = "/";
410  } else {
411  serializedAnc = ">" + serializedAnc + "</type";
412  }
413  return "<type name=\"" + name + "\" ancestor=\"\" uri=\""
414  + uri + "\"" + grString + rAString + serializedAnc + ">";
415  } else if (attributes.isEmpty()) {
416  if (serializedAnc.equals("")) {
417  serializedAnc = "/";
418  } else {
419  serializedAnc = ">" + serializedAnc + "</type";
420  }
421  return "<type name=\"" + name + "\" ancestor=\"" + ancestorType.getUri()
422  + "\" uri=\"" + uri + "\"" + grString + rAString + serializedAnc + ">";
423  }
424  // serialize attributes
425  String att = "";
426  Collections.sort(attributes);
427  Iterator<AnnotTypeAttr> li = attributes.iterator();
428  AnnotTypeAttr at;
429  while (li.hasNext()) {
430  at = li.next();
431  att = att + at.toXMLString(withAncestors);
432  }
433 
434  if (ancestorType == null) {
435  return "<type name=\"" + name + "\" ancestor=\"\" uri=\"" + uri + "\"" + grString
436  + rAString + ">" + att + serializedAnc + "</type>";
437  }
438  return "<type name=\"" + name + "\" ancestor=\"" + ancestorType.getUri() + "\" uri=\""
439  + uri + "\"" + grString + rAString + ">"
440  + att + serializedAnc + "</type>";
441  } // toXMLString()
442 
443  /**
444  * Returns serialized informations about type of annotation in XML for
445  * protocol version 2.
446  *
447  * @param withAncestors If true, list of ancestors will be serialized, if false, list will be omitted
448  * @return Returns serialized informations about type of annotation in XML for
449  * protocol version 2
450  */
451  public String toXMLStringV2(boolean withAncestors) {
452  // serialize ancestors
453  StringBuilder serializedAnc = new StringBuilder();
454  if(this.ancestorType != null && withAncestors){
455  serializedAnc.append("<directAncestors primary=\"");
456  serializedAnc.append(ancestorType.getUri());
457  if(this.ancestorTypes != null && !this.ancestorTypes.isEmpty()){
458  serializedAnc.append("\">");
459  Iterator<AnnotType> ancestorsIt = this.ancestorTypes.iterator();
460  while(ancestorsIt.hasNext()){
461  serializedAnc.append("<ancestor uri=\"");
462  serializedAnc.append(ancestorsIt.next().getUri());
463  serializedAnc.append("\"/>");
464  }
465  serializedAnc.append("</directAncestors>");
466  }else{
467  serializedAnc.append("\"/>");
468  }
469  }
470 
471  // serialize attributes
472  StringBuilder serializedAttrs = new StringBuilder();
473  List<AnnotTypeAttr> attrList = getAttributes();
474  if(attrList != null && !attrList.isEmpty()){
475  serializedAttrs.append("<attributes>");
476  Iterator<AnnotTypeAttr> attrsIt = attrList.iterator();
477  while(attrsIt.hasNext()){
478  serializedAttrs.append(attrsIt.next().toXMLStringV2(true));
479  }
480  serializedAttrs.append("</attributes>");
481  }
482 
483  // serialize annotation attribute
484  StringBuilder serializedAnnotAttr = new StringBuilder();
485  serializedAnnotAttr.append("<type name=\"");
486  serializedAnnotAttr.append(this.name);
487  serializedAnnotAttr.append("\" uri=\"");
488  serializedAnnotAttr.append(this.uri);
489  serializedAnnotAttr.append("\" groupUri=\"");
490  serializedAnnotAttr.append(this.group.getUri());
491  serializedAnnotAttr.append("\" restrictedAttributes=\"");
492  serializedAnnotAttr.append(this.restrictedAtt.toString());
493  if(this.uriInOntology != null && !this.uriInOntology.isEmpty()){
494  serializedAnnotAttr.append("\" ontologyUri=\"");
495  serializedAnnotAttr.append(this.uriInOntology);
496  }
497  if(withAncestors || (this.comment != null && !this.comment.isEmpty())
498  || serializedAnc.length() > 0 || serializedAttrs.length() > 0){
499  serializedAnnotAttr.append("\">");
500  serializedAnnotAttr.append(serializedAnc.toString());
501  serializedAnnotAttr.append(serializedAttrs.toString());
502  if(this.comment != null && !this.comment.isEmpty()){
503  serializedAnnotAttr.append("<comment><![CDATA[");
504  serializedAnnotAttr.append(this.comment);
505  serializedAnnotAttr.append("]]></comment>");
506  }
507  serializedAnnotAttr.append("</type>");
508  }else{
509  serializedAnnotAttr.append("\"/>");
510  }
511 
512  return serializedAnnotAttr.toString();
513  }
514 
515  /**
516  * Returns serialized informations about type of annotation without attributes in XML for
517  * protocol version 2.
518  *
519  * @param withAncestors If true, list of ancestors will be serialized, if false, list will be omitted
520  * @return Returns serialized informations about type of annotation without attributes in XML for
521  * protocol version 2
522  */
523  public String toXMLStringWAV2(boolean withAncestors){
524  // serialize ancestors
525  StringBuilder serializedAnc = new StringBuilder();
526  if(this.ancestorType != null && withAncestors){
527  serializedAnc.append("<directAncestors primary=\"");
528  serializedAnc.append(ancestorType.getUri());
529  if(this.ancestorTypes != null && !this.ancestorTypes.isEmpty()){
530  serializedAnc.append("\">");
531  Iterator<AnnotType> ancestorsIt = this.ancestorTypes.iterator();
532  while(ancestorsIt.hasNext()){
533  serializedAnc.append("<ancestor uri=\"");
534  serializedAnc.append(ancestorsIt.next().getUri());
535  serializedAnc.append("\"/>");
536  }
537  serializedAnc.append("</directAncestors>");
538  }else{
539  serializedAnc.append("\"/>");
540  }
541  }
542 
543  // serialize annotation attribute
544  StringBuilder serializedAnnotAttr = new StringBuilder();
545  serializedAnnotAttr.append("<type name=\"");
546  serializedAnnotAttr.append(this.name);
547  serializedAnnotAttr.append("\" uri=\"");
548  serializedAnnotAttr.append(this.uri);
549  serializedAnnotAttr.append("\" groupUri=\"");
550  serializedAnnotAttr.append(this.group.getUri());
551  serializedAnnotAttr.append("\" restrictedAttributes=\"");
552  serializedAnnotAttr.append(this.restrictedAtt.toString());
553 
554  if(withAncestors || (this.comment != null && !this.comment.isEmpty())
555  || serializedAnc.length() > 0){
556  serializedAnnotAttr.append("\">");
557  serializedAnnotAttr.append(serializedAnc.toString());
558 
559  if(this.comment != null && !this.comment.isEmpty()){
560  serializedAnnotAttr.append("<comment><![CDATA[");
561  serializedAnnotAttr.append(this.comment);
562  serializedAnnotAttr.append("]]></comment>");
563  }
564 
565  serializedAnnotAttr.append("</type>");
566  }else{
567  serializedAnnotAttr.append("\"/>");
568  }
569 
570  return serializedAnnotAttr.toString();
571  }
572 
573  /**
574  * Returns serialized informations about type of annotation without attributes in XML
575  *
576  * @param withAncestors If true, list of ancestors will be serialized, if false, list will be omitted
577  * @return Returns serialized informations about type of annotation without attributes in XML
578  */
579  public String toXMLStringWA(boolean withAncestors) {
580  String grString = "";
581  if (group != null) {
582  grString = " group=\"" + group.getUri() + "\"";
583  }
584  String ending = "/";
585  if (withAncestors) {
586  ending = ">";
587  for (Iterator<AnnotType> it = ancestorTypes.iterator(); it.hasNext();) {
588  AnnotType ancType = it.next();
589  ending = ending + "<ancestor uri=\"" + ancType.getUri() + "\"/>";
590  }
591  ending = ending + "</type";
592  }
593  if (ancestorType == null) {
594  return "<type name=\"" + name + "\" ancestor=\"\" uri=\""
595  + uri + "\"" + grString + ending + ">";
596  } else {
597  return "<type name=\"" + name + "\" ancestor=\"" + ancestorType.getUri()
598  + "\" uri=\"" + uri + "\"" + grString + ending + ">";
599  }
600  } // toXMLStringWA()
601 
602  /**
603  * Generate URI of type of annotation from his name, ancestor and user group
604  * URI = base URI + "/g" + user group id + "/"
605  * + names of ancestors separated by "/"
606  * + "/" + name of type
607  *
608  * @return Generated URI of type of annotation
609  */
610  public String getGeneratedURI() {
611  String linearized = AppBean.getBaseTypeUri();
612  linearized = linearized + "g";
613  if (group != null) {
614  linearized = linearized + group.getId();
615  }
616  linearized = linearized + "/";
617  AnnotType ancT = ancestorType;
618  ArrayList<String> linArray = new ArrayList<String>();
619  linArray.add(MessageProcessor.replaceArrows(name));
620  while (ancT != null) {
621  linArray.add(ancT.getName());
622  ancT = ancT.getAncestorType();
623  }
624  // reverse iteration and creating linearized name
625  for(int i = linArray.size() - 1; i>= 0; i--){
626  linearized = linearized + linArray.get(i) + "/";
627  }
628  // trim last slash
629  linearized = linearized.substring(0, linearized.length() - 1);
630 
631  return linearized;
632  }
633 
634  /**
635  * Gets linearized name of type of annotation
636  * LN = names of ancestors separated by " -> "
637  * + " -> " + name of type
638  *
639  * @return Linearized name of type of annotation
640  */
641  public String getLinearizedName() {
642  String linearized = "";
643  AnnotType ancT = ancestorType;
644  ArrayList<String> linArray = new ArrayList<String>();
645  linArray.add(name);
646  while (ancT != null) {
647  linArray.add(ancT.getName());
648  ancT = ancT.getAncestorType();
649  }
650  // reverse iteration and creating linearized name
651  for(int i = linArray.size() - 1; i>= 0; i--){
652  linearized = linearized + linArray.get(i) + " -> ";
653  }
654  // trim last arrow
655  linearized = linearized.substring(0, linearized.length() - 4);
656 
657  return linearized;
658  }
659 
660  /**
661  * Converts linearized name of type of annotation to his URI
662  *
663  * @param linName Linearized name of type of annotation
664  * @return URI of given type of annotation
665  */
666  public String linearizedNameToUri(String linName) {
667  return AppBean.getBaseTypeUri() + MessageProcessor.replaceArrows(linName);
668  }
669 
670  /**
671  * Gets indicator of restricted attributes
672  * If true, new attributes can't be added.
673  *
674  * @return returns indicator of restricted attributes
675  */
676  public Boolean getRestrictedAtt() {
677  return restrictedAtt;
678  }
679 
680  /**
681  * Sets indicator of restricted attributes
682  * If true, new attributes can't be added.
683  *
684  * @param restrictedAtt Indicator of restricted attributes
685  */
686  public void setRestrictedAtt(Boolean restrictedAtt) {
687  this.restrictedAtt = restrictedAtt;
688  }
689 
690  /**
691  * Gets textual comment
692  *
693  * @return Returns textual comment
694  */
695  public String getComment() {
696  return comment;
697  }
698 
699  /**
700  * Sets textual comment
701  *
702  * @param comment Textual comment
703  */
704  public void setComment(String comment) {
705  this.comment = comment;
706  }
707 
708 } // class AnnotType
String toXMLStringWAV2(boolean withAncestors)
Definition: AnnotType.java:523
Class representing attribute of type of annotation.
Singleton for storing global variables.
Definition: AppBean.java:47
void setAncestorTypes(List< AnnotType > ancestorTypes)
Definition: AnnotType.java:254
String toXMLStringWA(boolean withAncestors)
Definition: AnnotType.java:579
void setRestrictedAtt(Boolean restrictedAtt)
Definition: AnnotType.java:686
Static class which parses and process XML with messages.
Class representing user group.
Definition: UserGroup.java:47
String toXMLStringV2(boolean withAncestors)
Definition: AnnotType.java:451
Class representing type of annotation.
Definition: AnnotType.java:58
void setUriInOntology(String uriInOntology)
Definition: AnnotType.java:340
void setAttributes(ArrayList< AnnotTypeAttr > attributes)
Definition: AnnotType.java:304
String toXMLString(boolean withAncestors)
Definition: AnnotType.java:381
AnnotType(String uri, String name, AnnotType ancestorT, UserGroup group)
Definition: AnnotType.java:142
void setAncestorType(AnnotType ancestorType)
Definition: AnnotType.java:236