diff WebServiceToolWorkflow/lib/SAWADLParser/src/edu/uga/cs/lsdis/meteors/wadls/ModelReferenceImpl.java @ 0:d5cd409b8a18 default tip

Migrated tool version 1.0.0 from old tool shed archive to new tool shed repository
author ganjoo
date Tue, 07 Jun 2011 18:00:50 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebServiceToolWorkflow/lib/SAWADLParser/src/edu/uga/cs/lsdis/meteors/wadls/ModelReferenceImpl.java	Tue Jun 07 18:00:50 2011 -0400
@@ -0,0 +1,217 @@
+package edu.uga.cs.lsdis.meteors.wadls;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.wadls.Application;
+import javax.wadls.ModelReference;
+import javax.wadls.WADLSException;
+
+/**
+ * This class represents a ModelReference.
+ * 
+ * @author Zixin Wu (wuzixin@uga.edu)
+ *
+ */
+public class ModelReferenceImpl implements ModelReference {
+
+	/**
+	 * The URI of the ontology used in the model reference
+	 */
+	protected URI namespace;
+	
+	/**
+	 * The parent WSDL-S element of this model reference
+	 */
+	protected Object parent;
+	
+	/**
+	 * The NS Prefix of the model reference
+	 */
+	protected String prefix;
+	
+	/**
+	 * The ontology concept of this model reference
+	 */
+	protected String concept;
+	
+	/**
+	 * Get the concept of this modelReference.
+	 * @return The concept of this modelReference.
+	 */
+	public String getConcept(){
+		return this.concept;
+	}
+
+	/**
+	 * Set the concept of this modelReference
+	 * @param concept The desired concept of this modelReference
+	 */
+	public void setConcept(String concept){
+		this.concept = concept;
+	}
+
+	/**
+	 * Get the prefix of this modelReference
+	 * @return The prefix  of this modelReference
+	 */
+	public String getPrefix(){
+		return this.prefix;
+	}
+
+	/**
+	 * Set the prefix of the ontology used in this modelReference
+	 * @param prefix The desired prefix of the ontology used in this modelReference
+	 */
+	public void setPrefix(String prefix){
+		this.prefix = prefix;
+	}
+
+	/**
+	 * Get the namespace of the ontology used in this modelReference
+	 * @return The namespace of the ontology used in this modelReference
+	 */
+	public URI getNamespace(){
+		return this.namespace;
+	}
+
+	/**
+	 * Set the namespace of the ontology used in this modelReference
+	 * @param nameSpace The desired namespace of the ontology used in this modelReference
+	 */
+	public void setNamespace(String nameSpace)
+			throws URISyntaxException{
+		//System.out.println("namespace is "+nameSpace);
+		this.namespace = new URI(nameSpace);
+	}
+
+	/**
+	 * Get the parent object of this modelReference
+	 * @return The parent object of this modelReference
+	 */
+	public Object getParent(){
+		return this.parent;
+	}
+
+	/**
+	 * Set the parent object of this modelReference
+	 * @param parent The desired parent object of this modelReference
+	 */
+	public void setParent(Object parent){
+		this.parent = parent;
+	}
+
+	/**
+	 * Return a formatted string representing this modelReference.
+	 * @return A formatted string representing this modelReference.
+	 */
+	public String value(){
+		if (this.concept == null || this.namespace == null)
+			return null;
+		return (this.namespace + "#" + this.concept);
+	}
+	
+	public String toString(){
+		if (this.concept == null)
+			return null;
+		if (this.prefix != null){		//use the prefix
+			return (this.prefix + "#" + this.concept);
+		}
+		else if (this.namespace != null){		//use the namespace
+			return (this.namespace + "#" + this.concept);
+		}
+		else
+			return null;
+	}
+	
+	public static List<ModelReference> getModelReferences(String mrefs, Application app) throws URISyntaxException, WADLSException {
+		String[] refs = mrefs.split(" ");
+		List<ModelReference> list = new ArrayList<ModelReference>(refs.length);
+		for(String ref : refs) {
+			ModelReference mr = app.createModelReference();
+			mr.valueOf(ref, app);
+			list.add(mr);
+		}
+		return list;
+	}
+	
+	public void valueOf(String modelReferenceAsString, Application app) throws URISyntaxException, WADLSException{
+		int    index        = modelReferenceAsString.indexOf('#');
+		String prefix       = (index != -1)
+									? modelReferenceAsString.substring(0, index)
+									: null;
+		String namespaceURI = prefix;
+		String localPart    = null;
+
+		//System.out.println("Namespace URI:"+namespaceURI);
+		//assume the user give prefix#localName
+		if (prefix != null){
+			//try to find a namespaceURI for that prefix
+			String tmpNamespaceURI = app.getNamespace(prefix);
+			//System.out.println("Temp Namespace URI:"+tmpNamespaceURI);
+			if(tmpNamespaceURI != null) {	//the user did give prefix
+				namespaceURI = tmpNamespaceURI.substring(0, tmpNamespaceURI.length());
+			}
+			else{							//the user gave namespaceURI instead of prefix
+				//try to find a prefix for that namespaceURI
+				prefix = app.getPrefix(namespaceURI);
+				if (prefix == null)
+					prefix = app.getPrefix(namespaceURI+"#");
+			}
+			localPart = modelReferenceAsString.substring(index + 1);
+		}
+		else if (!prefix.equals("")){		//no prefix or namespaceURI is given, but '#' is included
+			//use target namespace
+			namespaceURI = app.getTargetNamespace();
+			prefix = app.getPrefix(namespaceURI);
+			localPart = modelReferenceAsString.substring(1);
+		}
+		else{
+            throw new IllegalArgumentException(
+		                "No Namespace URI is provided for this modelReference: " +
+		                modelReferenceAsString
+		                + ".");
+		}
+
+		if (namespaceURI != null){
+			System.out.println("namespaceURI is "+namespaceURI);
+			this.setNamespace(namespaceURI);
+		    //System.out.println("Concept:"+localPart);
+			this.setConcept(localPart);
+			this.setPrefix(prefix);
+		}
+		else{
+			String faultCode = (prefix == null)
+			  ? WADLSException.NO_PREFIX_SPECIFIED
+			  : WADLSException.UNBOUND_PREFIX;
+
+			WADLSException wadlExc = new WADLSException(faultCode,
+		                         "Unable to determine " +
+		                         "namespace of '" +
+		                         modelReferenceAsString + "'.");
+
+			throw wadlExc;
+		}
+	}
+
+    /**
+     * Equals method  overriden to compare two modelreferences.
+     * We campare the namespace and the concept name (literally)
+     * @param obj
+     */
+    public boolean equals(Object obj) {
+        if (!(obj instanceof ModelReference)){
+            return false;
+        }else{
+            ModelReference ref = (ModelReference)obj;
+            return (concept.equals(ref.getConcept()) &&
+                    namespace.equals(ref.getNamespace()));
+        }
+    }
+    
+    public int hashCode(){
+    	return this.value().hashCode();
+    }
+}