Utils.java
001 /*
002  *  Utils.java
003  *
004  *  Niraj Aswani, 09/March/07
005  *
006  *  $Id: Utils.html,v 1.0 2007/03/09 16:13:01 niraj Exp $
007  */
008 package gate.gui.ontology;
009 
010 import gate.creole.ontology.AllValuesFromRestriction;
011 import gate.creole.ontology.AnnotationProperty;
012 import gate.creole.ontology.CardinalityRestriction;
013 import gate.creole.ontology.DatatypeProperty;
014 import gate.creole.ontology.HasValueRestriction;
015 import gate.creole.ontology.InvalidURIException;
016 import gate.creole.ontology.Literal;
017 import gate.creole.ontology.MaxCardinalityRestriction;
018 import gate.creole.ontology.MinCardinalityRestriction;
019 import gate.creole.ontology.OClass;
020 import gate.creole.ontology.OInstance;
021 import gate.creole.ontology.OResource;
022 import gate.creole.ontology.OURI;
023 import gate.creole.ontology.Ontology;
024 import gate.creole.ontology.RDFProperty;
025 import gate.creole.ontology.Restriction;
026 import gate.creole.ontology.SomeValuesFromRestriction;
027 
028 import java.util.ArrayList;
029 import java.util.List;
030 import java.util.Set;
031 import java.util.regex.Pattern;
032 
033 /**
034  * This class provides various static utility methods which are used by
035  * the ontology editor.
036  
037  @author niraj
038  
039  */
040 public class Utils {
041 
042   /**
043    * Checks whether the provided name space is valid name space. In this
044    * version, the namespace must match the following java regular
045    * expression. <BR>
046    
047    * "[a-zA-Z]+(:)(/)+[a-zA-Z0-9\\-]+((\\.)[a-zA-Z0-9\\-]+)+((/)[a-zA-Z0-9\\.\\-_]+)*(#|/)"
048    */
049   public static boolean isValidNameSpace(String s) {
050     String s1 = new String(
051             "[a-zA-Z]+(:)(/)+[a-zA-Z0-9\\-]+((\\.)[a-zA-Z0-9\\-]+)+((/)[a-zA-Z0-9\\.\\-_]+)*(#|/|/#)");
052     Pattern pattern = Pattern.compile(s1);
053     return pattern.matcher(s).matches();
054   }
055 
056   /**
057    * Checks whether the provided resource name is a valid resource name
058    * In this version, the resource name must match the following java
059    * regular expression <BR>. "[a-zA-Z0-9_-]+"
060    */
061   public static boolean isValidOntologyResourceName(String s) {
062     String s1 = new String("[a-zA-Z0-9_-]+");
063     Pattern pattern = Pattern.compile(s1);
064     return pattern.matcher(s).matches();
065   }
066 
067   /**
068    * This method returns the details to be added.
069    */
070   @SuppressWarnings("deprecation")
071   public static List<Object> getDetailsToAdd(Object object) {
072     List<Object> toAdd = new ArrayList<Object>();
073     toAdd.add(object);
074     if(object instanceof Restriction) {
075       Restriction res = (Restriction)object;
076       toAdd.add(new KeyValuePair(res, "RESTRICTION TYPE",
077               gate.creole.ontology.Utils.getRestrictionName(res)false));
078       toAdd.add(new KeyValuePair(res.getOnPropertyValue()"ON PROPERTY", res
079               .getOnPropertyValue().getName()false));
080       String valueString = null;
081       String datatypeString = null;
082 
083       if(res instanceof CardinalityRestriction) {
084         valueString = ((CardinalityRestriction)res).getValue();
085         datatypeString = ((CardinalityRestriction)res).getDataType()
086                 .getXmlSchemaURIString();
087         toAdd.add(new KeyValuePair(res, "DATATYPE", datatypeString, false));
088         toAdd.add(new KeyValuePair(res, "VALUE", valueString, true));
089       }
090       else if(res instanceof MinCardinalityRestriction) {
091         valueString = ((MinCardinalityRestriction)res).getValue();
092         datatypeString = ((MinCardinalityRestriction)res).getDataType()
093                 .getXmlSchemaURIString();
094         toAdd.add(new KeyValuePair(res, "DATATYPE", datatypeString, false));
095         toAdd.add(new KeyValuePair(res, "VALUE", valueString, true));
096       }
097       else if(res instanceof MaxCardinalityRestriction) {
098         valueString = ((MaxCardinalityRestriction)res).getValue();
099         datatypeString = ((MaxCardinalityRestriction)res).getDataType()
100                 .getXmlSchemaURIString();
101         toAdd.add(new KeyValuePair(res, "DATATYPE", datatypeString, false));
102         toAdd.add(new KeyValuePair(res, "VALUE", valueString, false));
103       }
104       else if(res instanceof HasValueRestriction) {
105         Object value = ((HasValueRestriction)res).getHasValue()
106         if(value instanceof Literal) {
107           valueString = ((Literal)value).getValue();
108           datatypeString = ((DatatypeProperty)((HasValueRestriction)res)
109               .getOnPropertyValue()).getDataType().getXmlSchemaURIString();
110           toAdd.add(new KeyValuePair(res, "DATATYPE", datatypeString, false));
111           toAdd.add(new KeyValuePair(res, "VALUE", valueString, true));
112         else {
113           valueString = ((OResource)value).getONodeID().toString();
114           toAdd.add(new KeyValuePair((OResource)value, "VALUE", valueString, false));
115         }
116       }
117       else if(res instanceof AllValuesFromRestriction) {
118         valueString = ((AllValuesFromRestriction)res).getHasValue().getONodeID()
119                 .toString();
120         toAdd.add(new KeyValuePair(((AllValuesFromRestriction)res)
121                 .getHasValue()"VALUE", valueString, false));
122       }
123       else if(res instanceof SomeValuesFromRestriction) {
124         valueString = ((SomeValuesFromRestriction)res).getHasValue().getONodeID()
125                 .toString();
126         toAdd.add(new KeyValuePair(((SomeValuesFromRestriction)res)
127                 .getHasValue()"VALUE", valueString, false));
128       }
129     }
130     else if(object instanceof RDFProperty) {
131       RDFProperty prop = (RDFProperty)object;
132       if(prop instanceof DatatypeProperty) {
133         toAdd.add(new KeyValuePair(prop, "DATATYPE"((DatatypeProperty)prop)
134                 .getDataType().getXmlSchemaURIString()false));
135       }
136       else if(!(prop instanceof AnnotationProperty)) {
137         Set<OResource> set = prop.getRange();
138         if(set == null || set.isEmpty()) {
139           toAdd.add(new KeyValuePair(prop, "RANGE""[ALL CLASSES]"false));
140         }
141         else {
142           String key = "RANGE";
143           for(OResource res : set) {
144             toAdd.add(new KeyValuePair(res, key, res.getName()false));
145             key = "";
146           }
147         }
148       }
149     }
150     return toAdd;
151   }
152   
153   /** 
154    * Replacement for the deprecated method from gate.creole.ontology.Ontology.
155    
156    @param o Ontology to use
157    @param uri URI as a string of the resource to find
158    @return the resource as an OResource object
159    */
160   static OResource getOResourceFromMap(Ontology o, String uri) {
161     try {
162       OURI ouri = o.createOURI(uri);
163 
164       OClass c = o.getOClass(ouri);
165       if (c != null) {
166         return c;
167       }
168       OInstance i = o.getOInstance(ouri);
169       if (i != null) {
170         return i;
171       }
172       RDFProperty r = o.getProperty(ouri);
173       if (r != null) {
174         return r;
175       }
176     catch (InvalidURIException iue) {
177       // do nothing, we will just return null
178     }
179     return null;
180   }
181   
182   
183 }