]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/src/org/simantics/databoard/method/MethodTypeDefinition.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.databoard / src / org / simantics / databoard / method / MethodTypeDefinition.java
diff --git a/bundles/org.simantics.databoard/src/org/simantics/databoard/method/MethodTypeDefinition.java b/bundles/org.simantics.databoard/src/org/simantics/databoard/method/MethodTypeDefinition.java
new file mode 100644 (file)
index 0000000..124e9dc
--- /dev/null
@@ -0,0 +1,104 @@
+/*******************************************************************************\r
+ *  Copyright (c) 2010 Association for Decentralized Information Management in\r
+ *  Industry THTH ry.\r
+ *  All rights reserved. This program and the accompanying materials\r
+ *  are made available under the terms of the Eclipse Public License v1.0\r
+ *  which accompanies this distribution, and is available at\r
+ *  http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ *  Contributors:\r
+ *      VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.databoard.method;
+
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.Datatypes;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.type.Component;\r
+import org.simantics.databoard.type.Datatype;\r
+import org.simantics.databoard.type.UnionType;\r
+
+
+public class MethodTypeDefinition implements Comparable<MethodTypeDefinition> {
+\r
+       public static Binding BINDING = Bindings.getBindingUnchecked( MethodTypeDefinition.class );\r
+       
+       String name;
+       MethodType type;
+       
+       private transient int hash;     
+       
+       public MethodTypeDefinition(String name, MethodType type)
+       {
+               this.name = name;
+               this.type = type;
+               hash = name.hashCode() + type.hashCode()*7;
+       }
+
+       public String getName() {
+               return name;
+       }
+
+       public void setName(String name) {
+               this.name = name;
+               hash = name.hashCode() + type.hashCode()*7;
+       }
+       
+       public MethodType getType() {
+               return type;
+       }
+       
+       @Override
+       public String toString() {
+               Datatype void_ = Datatypes.getDatatypeUnchecked(void.class); 
+               StringBuilder sb = new StringBuilder();
+               
+               Datatype res = type.getResponseType();
+               Datatype req = type.getRequestType();
+               UnionType err = (UnionType) type.getErrorType();
+\r
+               sb.append("method ");\r
+               sb.append(name);\r
+               sb.append(" : ");\r
+               sb.append(req.toSingleLineString());\r
+               sb.append(" -> ");\r
+               
+               if (res.equals(void_))
+                       sb.append("void");
+               else
+                       sb.append(res.toSingleLineString());
+               
+               if (err.getComponentCount()>0) {
+                       sb.append(" throws ");
+                       for (int i=0; i<err.getComponentCount(); i++) {
+                               if (i>0) sb.append(", ");
+                               Component c = err.getComponent(i); 
+                               sb.append( c.name );
+                               sb.append( c.type.toSingleLineString() );
+                       }
+               }
+               return sb.toString();
+       }
+
+       @Override
+       public int hashCode() {
+               return hash;
+       }
+       
+       @Override
+       public boolean equals(Object obj) {
+               if (obj instanceof MethodTypeDefinition==false) return false;
+               MethodTypeDefinition other = (MethodTypeDefinition) obj;
+               return other.name.equals(name) && other.type.equals(type);
+       }
+
+       @Override
+       public int compareTo(MethodTypeDefinition o) {
+               int c = name.compareTo( o.getName() );
+               if (c!=0) return c;
+               c = type.compareTo( o.getType() );
+               return c;
+       }
+       
+}
+