]> gerrit.simantics Code Review - simantics/sysdyn.git/commitdiff
Merge changes from trunk
authorjkauttio <jkauttio@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Fri, 25 Apr 2014 13:20:31 +0000 (13:20 +0000)
committerjkauttio <jkauttio@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Fri, 25 Apr 2014 13:20:31 +0000 (13:20 +0000)
refs #2924

git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/branches@29355 ac1ea38d-2e2b-0410-8846-a27921b304fc

18 files changed:
dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/Array.java
dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/ElementwiseDivision.java [new file with mode: 0644]
dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/ElementwisePower.java [new file with mode: 0644]
dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/NodeClass.java
dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/Parser.java
dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/Power.java [new file with mode: 0644]
dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/parser/ModelParser.java
dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/parser/ModelicaParser.jj
dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/parser/ModelicaParser.jjt
dev-jkauttio/org.simantics.sysdyn.ui/plugin.xml
dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/Project.java
dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SharedOntology.java [new file with mode: 0644]
dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SharedOntologyImager.java [new file with mode: 0644]
dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SharedOntologyLabeler.java [new file with mode: 0644]
dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SharedOntologyNode.java [new file with mode: 0644]
dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodes/SCLModule.java
dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/ExportSharedOntologyHandler.java [new file with mode: 0644]
dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/NewSCLModuleHandler.java [new file with mode: 0644]

index 4544936274cd53fdc4bcebd8b3e900421320d939..a14e5ace2a686aa6b85a4ae985a4bf79bd0c63b3 100644 (file)
@@ -140,6 +140,20 @@ public class Array implements IExpression {
                }\r
                return result;\r
        }\r
+\r
+       public Array pow(double d) {\r
+               Array result = new Array();\r
+               for(Object o : elements) {\r
+               if(o instanceof Double) {\r
+                       result.addElement(Math.pow((Double)o,d));\r
+               } else if (o instanceof Array) {\r
+                       result.addElement(((Array)o).pow(d));\r
+               } else {\r
+                       throw new IllegalStateException();\r
+               }\r
+               }\r
+               return result;\r
+       }\r
        \r
        public boolean validateDimensions(int[] dimensions, int index) {\r
                if(elements.size() != dimensions[index]) return false;\r
@@ -220,7 +234,30 @@ public class Array implements IExpression {
                        } else if (l instanceof Array && r instanceof Array) {\r
                                Array arr = (Array)l;\r
                                Array otherArr = (Array)r;\r
-                               result.addElement(arr.add(otherArr));\r
+                               result.addElement(arr.mul(otherArr));\r
+                       } else {\r
+                               throw new IllegalStateException();\r
+                       }\r
+               }\r
+               return result;\r
+       }\r
+\r
+       public Array pow(Array other) {\r
+               Array result = new Array();\r
+               Collection<Object> lae = elements();\r
+               Collection<Object> rae = other.elements();\r
+               if(lae.size() != rae.size()) throw new IllegalStateException();\r
+               Iterator<Object> li = lae.iterator();\r
+               Iterator<Object> ri = rae.iterator();\r
+               for(int i=0;i<lae.size();i++) {\r
+                       Object l = li.next();\r
+                       Object r = ri.next();\r
+                       if(l instanceof Double && r instanceof Double) {\r
+                               result.addElement(Math.pow(((Double)l),((Double)r)));\r
+                       } else if (l instanceof Array && r instanceof Array) {\r
+                               Array arr = (Array)l;\r
+                               Array otherArr = (Array)r;\r
+                               result.addElement(arr.pow(otherArr));\r
                        } else {\r
                                throw new IllegalStateException();\r
                        }\r
diff --git a/dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/ElementwiseDivision.java b/dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/ElementwiseDivision.java
new file mode 100644 (file)
index 0000000..6968835
--- /dev/null
@@ -0,0 +1,78 @@
+/*******************************************************************************\r
+ * Copyright (c) 2013 Semantum Oy.\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
+ *     Semantum Oy - initial API and implementation\r
+ *******************************************************************************/\r
+package fi.semantum.sysdyn.solver;\r
+\r
+import java.util.Collection;\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+\r
+public class ElementwiseDivision implements IExpression {\r
+       \r
+    public IExpression exp1;\r
+    public IExpression exp2;\r
+    \r
+    public ElementwiseDivision(IExpression exp1, IExpression exp2) {\r
+       this.exp1 = exp1;\r
+       this.exp2 = exp2;\r
+    }\r
+    \r
+    @Override\r
+    public String toString() {\r
+       return exp1 + " / " + exp2;\r
+    }\r
+    \r
+       @Override\r
+       public Object evaluate(IEnvironment environment) {\r
+               Object left = exp1.evaluate(environment);\r
+               Object right = exp2.evaluate(environment);\r
+               if(left instanceof Array && right instanceof Array) {\r
+                       Array la = (Array)left;\r
+                       Array ra = (Array)right;\r
+                       Collection<Object> lae = la.elements();\r
+                       Collection<Object> rae = ra.elements();\r
+                       if(lae.size() != rae.size()) throw new UnsupportedOperationException();\r
+                       Iterator<Object> li = lae.iterator();\r
+                       Iterator<Object> ri = rae.iterator();\r
+                       Array result = new Array();\r
+                       for(int i=0;i<lae.size();i++) {\r
+                               double ld = (Double)li.next();\r
+                               double rd = (Double)ri.next();\r
+                               result.addElement(ld/rd);\r
+                       }\r
+                       return result;\r
+               } else throw new UnsupportedOperationException();\r
+       }\r
+       \r
+       @Override\r
+       public IExpression withBase(IFrame frame, String prefix) {\r
+               return new ElementwiseDivision(exp1.withBase(frame, prefix), exp2.withBase(frame, prefix));\r
+       }\r
+    \r
+       @Override\r
+       public Object getPossibleConstant() {\r
+               return null;\r
+       }\r
+       \r
+       @Override\r
+       public IExpression rewrite(IFrame frame, Map<String, VariableBase> copies) {\r
+               exp1 = exp1.rewrite(frame, copies);\r
+               exp2 = exp2.rewrite(frame, copies);\r
+               return this;\r
+       }\r
+\r
+       @Override\r
+       public void accept(ExpressionVisitor visitor) {\r
+               visitor.visit(this);\r
+               exp1.accept(visitor);\r
+               exp2.accept(visitor);\r
+       }\r
+       \r
+}\r
diff --git a/dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/ElementwisePower.java b/dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/ElementwisePower.java
new file mode 100644 (file)
index 0000000..6fac728
--- /dev/null
@@ -0,0 +1,78 @@
+/*******************************************************************************\r
+ * Copyright (c) 2013 Semantum Oy.\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
+ *     Semantum Oy - initial API and implementation\r
+ *******************************************************************************/\r
+package fi.semantum.sysdyn.solver;\r
+\r
+import java.util.Collection;\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+\r
+public class ElementwisePower implements IExpression {\r
+       \r
+    public IExpression exp1;\r
+    public IExpression exp2;\r
+    \r
+    public ElementwisePower(IExpression exp1, IExpression exp2) {\r
+       this.exp1 = exp1;\r
+       this.exp2 = exp2;\r
+    }\r
+    \r
+    @Override\r
+    public String toString() {\r
+       return exp1 + " ^ " + exp2;\r
+    }\r
+    \r
+       @Override\r
+       public Object evaluate(IEnvironment environment) {\r
+               Object left = exp1.evaluate(environment);\r
+               Object right = exp2.evaluate(environment);\r
+               if(left instanceof Array && right instanceof Array) {\r
+                       Array la = (Array)left;\r
+                       Array ra = (Array)right;\r
+                       Collection<Object> lae = la.elements();\r
+                       Collection<Object> rae = ra.elements();\r
+                       if(lae.size() != rae.size()) throw new UnsupportedOperationException();\r
+                       Iterator<Object> li = lae.iterator();\r
+                       Iterator<Object> ri = rae.iterator();\r
+                       Array result = new Array();\r
+                       for(int i=0;i<lae.size();i++) {\r
+                               double ld = (Double)li.next();\r
+                               double rd = (Double)ri.next();\r
+                               result.addElement(Math.pow(ld,rd));\r
+                       }\r
+                       return result;\r
+               } else throw new UnsupportedOperationException();\r
+       }\r
+       \r
+       @Override\r
+       public IExpression withBase(IFrame frame, String prefix) {\r
+               return new ElementwisePower(exp1.withBase(frame, prefix), exp2.withBase(frame, prefix));\r
+       }\r
+    \r
+       @Override\r
+       public Object getPossibleConstant() {\r
+               return null;\r
+       }\r
+       \r
+       @Override\r
+       public IExpression rewrite(IFrame frame, Map<String, VariableBase> copies) {\r
+               exp1 = exp1.rewrite(frame, copies);\r
+               exp2 = exp2.rewrite(frame, copies);\r
+               return this;\r
+       }\r
+\r
+       @Override\r
+       public void accept(ExpressionVisitor visitor) {\r
+               visitor.visit(this);\r
+               exp1.accept(visitor);\r
+               exp2.accept(visitor);\r
+       }\r
+       \r
+}\r
index 33415ec587043de52b068e1c94c8c4416ac8970f..81b86df71287487b91928ed8e5060a68d12bb5b4 100644 (file)
@@ -45,9 +45,11 @@ public enum NodeClass {
        logical_term,\r
        arithmetic_expression,\r
        term,\r
+       factor,\r
        if_expression,\r
        add_op,\r
        mul_op,\r
+       factor_op,\r
        rel_op,\r
        der_initial,\r
        output_expression_list,\r
index cbfac5e79952a71a6aaa3fba2ad92b6f5aa59aaf..175ea53cf0cae10453908f84e9dcb0ff96424b6b 100644 (file)
@@ -27,7 +27,7 @@ public class Parser {
        \r
 //     public IFrame currentFrame;\r
 \r
-       private int PRINT = 0;\r
+       private int PRINT = 1;\r
        \r
        public Object walk(SimpleNode n, int indent, IFrame model) {\r
                Object result = walk_(n, indent, model);\r
@@ -511,12 +511,26 @@ public class Parser {
                                        IExpression exp2 = (IExpression)walk((SimpleNode)n.jjtGetChild(i+1), indent+2, frame);\r
                                        if("*".equals(op)) term = new Multiplication(term, exp2);\r
                                        else if(".*".equals(op)) term = new ElementwiseProduct(term, exp2);\r
+                                       else if("./".equals(op)) term = new ElementwiseDivision(term, exp2);\r
                                        else if("/".equals(op)) term = new Division(term, exp2);\r
                                }\r
                                return term;\r
                        } else {\r
                                return walk((SimpleNode)n.jjtGetChild(0), indent+2, frame);\r
                        }\r
+               case factor:\r
+                       if(n.jjtGetNumChildren() > 1) {\r
+                               IExpression term = (IExpression)walk((SimpleNode)n.jjtGetChild(0), indent+2, frame);\r
+                               for(int i=1;i<n.jjtGetNumChildren();i+=2) {\r
+                                       String op = ((String)walk((SimpleNode)n.jjtGetChild(i), indent+2, model)).trim();\r
+                                       IExpression exp2 = (IExpression)walk((SimpleNode)n.jjtGetChild(i+1), indent+2, frame);\r
+                                       if("^".equals(op)) term = new Power(term, exp2);\r
+                                       else if(".^".equals(op)) term = new ElementwisePower(term, exp2);\r
+                               }\r
+                               return term;\r
+                       } else {\r
+                               return walk((SimpleNode)n.jjtGetChild(0), indent+2, frame);\r
+                       }                       \r
                case if_expression:\r
                        if(n.jjtGetNumChildren() == 3) {\r
                                IExpression exp1 = (IExpression)walk((SimpleNode)n.jjtGetChild(0), indent+2, frame);\r
@@ -528,6 +542,8 @@ public class Parser {
                        return n.op;\r
                case mul_op:\r
                        return n.op;\r
+               case factor_op:\r
+                       return n.op;\r
                case rel_op:\r
                        return n.op;\r
                case der_initial:\r
diff --git a/dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/Power.java b/dev-jkauttio/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/Power.java
new file mode 100644 (file)
index 0000000..d25a0d0
--- /dev/null
@@ -0,0 +1,74 @@
+/*******************************************************************************\r
+ * Copyright (c) 2013 Semantum Oy.\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
+ *     Semantum Oy - initial API and implementation\r
+ *******************************************************************************/\r
+package fi.semantum.sysdyn.solver;\r
+\r
+import java.util.Map;\r
+\r
+import fi.semantum.sysdyn.solver.IExpression.ExpressionVisitor;\r
+\r
+public class Power implements IExpression {\r
+       \r
+    public IExpression exp1;\r
+    public IExpression exp2;\r
+    \r
+    public Power(IExpression exp1, IExpression exp2) {\r
+       this.exp1 = exp1;\r
+       this.exp2 = exp2;\r
+    }\r
+    \r
+    @Override\r
+    public String toString() {\r
+       return exp1 + " ^ " + exp2;\r
+    }\r
+    \r
+       @Override\r
+       public Object evaluate(IEnvironment environment) {\r
+               Object left = exp1.evaluate(environment);\r
+               Object right = exp2.evaluate(environment);\r
+               if(left instanceof Double && right instanceof Double) {\r
+                       return Math.pow(((Double)left),((Double)right));\r
+               } \r
+               else if(left instanceof Array && right instanceof Array) {\r
+                       Array la = (Array)left;\r
+                       Array ra = (Array)right;\r
+                       return la.pow(ra);\r
+               }\r
+               else if (left instanceof Array && right instanceof Double) return ((Array)left).pow((Double)right);\r
+               else if (left instanceof Double && right instanceof Array) return ((Array)right).pow((Double)left);\r
+               throw new IllegalStateException();\r
+               \r
+       }\r
+       \r
+       @Override\r
+       public IExpression withBase(IFrame frame, String prefix) {\r
+               return new Power(exp1.withBase(frame, prefix), exp2.withBase(frame, prefix));\r
+       }\r
+    \r
+       @Override\r
+       public Object getPossibleConstant() {\r
+               return null;\r
+       }\r
+       \r
+       @Override\r
+       public IExpression rewrite(IFrame frame, Map<String, VariableBase> copies) {\r
+               exp1 = exp1.rewrite(frame, copies);\r
+               exp2 = exp2.rewrite(frame, copies);\r
+               return this;\r
+       }\r
+       \r
+       @Override\r
+       public void accept(ExpressionVisitor visitor) {\r
+               visitor.visit(this);\r
+               exp1.accept(visitor);\r
+               exp2.accept(visitor);\r
+       }\r
+       \r
+}\r
index 29ef1f1e0e8041c877a79f8f6c54a8e63a7ba241..de6a2b2501c89ac425f6bbf506c750e48278c6a3 100644 (file)
@@ -3686,6 +3686,9 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
         break;\r
       case 85:\r
         jj_consume_token(85);\r
+                                                                                               jjtree.closeNodeScope(jjtn000, true);\r
+                                                                                               jjtc000 = false;\r
+                                                                                               jjtn000.op = "./";\r
         break;\r
       default:\r
         jj_la1[105] = jj_gen;\r
@@ -4655,13 +4658,13 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     if (jj_scan_token(62)) return true;\r
     Token xsp;\r
     xsp = jj_scanpos;\r
-    if (jj_3R_165()) jj_scanpos = xsp;\r
+    if (jj_3R_166()) jj_scanpos = xsp;\r
     if (jj_scan_token(63)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_85() {\r
-    if (jj_3R_95()) return true;\r
+  private boolean jj_3R_129() {\r
+    if (jj_scan_token(49)) return true;\r
     return false;\r
   }\r
 \r
@@ -4670,36 +4673,17 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_129() {\r
-    if (jj_scan_token(49)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_152() {\r
+  private boolean jj_3R_153() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
     if (jj_scan_token(68)) jj_scanpos = xsp;\r
     if (jj_scan_token(IDENT)) return true;\r
     xsp = jj_scanpos;\r
-    if (jj_3R_160()) jj_scanpos = xsp;\r
-    while (true) {\r
-      xsp = jj_scanpos;\r
-      if (jj_3R_161()) { jj_scanpos = xsp; break; }\r
-    }\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_42() {\r
-    if (jj_3R_43()) return true;\r
-    Token xsp;\r
+    if (jj_3R_161()) jj_scanpos = xsp;\r
     while (true) {\r
       xsp = jj_scanpos;\r
-      if (jj_3R_50()) { jj_scanpos = xsp; break; }\r
+      if (jj_3R_162()) { jj_scanpos = xsp; break; }\r
     }\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_51()) jj_scanpos = xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_52()) jj_scanpos = xsp;\r
     return false;\r
   }\r
 \r
@@ -4709,13 +4693,13 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_158() {\r
+  private boolean jj_3R_159() {\r
     if (jj_scan_token(58)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_106() {\r
-    if (jj_scan_token(7)) return true;\r
+  private boolean jj_3R_77() {\r
+    if (jj_scan_token(68)) return true;\r
     return false;\r
   }\r
 \r
@@ -4724,11 +4708,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_77() {\r
-    if (jj_scan_token(68)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_60() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
@@ -4741,12 +4720,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_71() {\r
-    if (jj_scan_token(21)) return true;\r
-    if (jj_3R_85()) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_46() {\r
     if (jj_3R_60()) return true;\r
     return false;\r
@@ -4766,42 +4739,28 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_163() {\r
-    if (jj_scan_token(70)) return true;\r
+  private boolean jj_3R_123() {\r
+    if (jj_scan_token(74)) return true;\r
     return false;\r
   }\r
 \r
   private boolean jj_3R_146() {\r
-    if (jj_3R_154()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_123() {\r
-    if (jj_scan_token(74)) return true;\r
+    if (jj_3R_155()) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3_4() {\r
-    if (jj_scan_token(IDENT)) return true;\r
-    if (jj_scan_token(88)) return true;\r
-    if (jj_scan_token(40)) return true;\r
+  private boolean jj_3R_164() {\r
+    if (jj_scan_token(70)) return true;\r
     return false;\r
   }\r
 \r
   private boolean jj_3R_145() {\r
     if (jj_scan_token(66)) return true;\r
-    if (jj_3R_153()) return true;\r
+    if (jj_3R_154()) return true;\r
     if (jj_scan_token(67)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3_3() {\r
-    if (jj_scan_token(IDENT)) return true;\r
-    if (jj_scan_token(88)) return true;\r
-    if (jj_scan_token(58)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_144() {\r
     if (jj_scan_token(62)) return true;\r
     if (jj_3R_47()) return true;\r
@@ -4809,42 +4768,18 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3_2() {\r
-    if (jj_scan_token(IDENT)) return true;\r
-    if (jj_scan_token(88)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_156() {\r
-    if (jj_scan_token(87)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_142() {\r
-    if (jj_3R_151()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_143() {\r
     if (jj_3R_152()) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3_1() {\r
-    if (jj_scan_token(IDENT)) return true;\r
-    if (jj_3R_41()) return true;\r
-    if (jj_3R_42()) return true;\r
-    if (jj_scan_token(35)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_141() {\r
-    if (jj_scan_token(33)) return true;\r
+  private boolean jj_3R_157() {\r
+    if (jj_scan_token(87)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_137() {\r
-    if (jj_scan_token(UNSIGNED_NUMBER)) return true;\r
+  private boolean jj_3R_143() {\r
+    if (jj_3R_153()) return true;\r
     return false;\r
   }\r
 \r
@@ -4885,6 +4820,16 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
+  private boolean jj_3R_137() {\r
+    if (jj_scan_token(UNSIGNED_NUMBER)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_141() {\r
+    if (jj_scan_token(33)) return true;\r
+    return false;\r
+  }\r
+\r
   private boolean jj_3R_140() {\r
     if (jj_scan_token(6)) return true;\r
     return false;\r
@@ -4895,11 +4840,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_108() {\r
-    if (jj_scan_token(26)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_138() {\r
     if (jj_scan_token(UNSIGNED_INTEGER)) return true;\r
     return false;\r
@@ -4915,9 +4855,9 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_154() {\r
+  private boolean jj_3R_155() {\r
     if (jj_scan_token(64)) return true;\r
-    if (jj_3R_164()) return true;\r
+    if (jj_3R_165()) return true;\r
     if (jj_scan_token(65)) return true;\r
     return false;\r
   }\r
@@ -4928,22 +4868,17 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_105() {\r
-    if (jj_scan_token(34)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_153() {\r
-    if (jj_3R_162()) return true;\r
+  private boolean jj_3R_154() {\r
+    if (jj_3R_163()) return true;\r
     Token xsp;\r
     while (true) {\r
       xsp = jj_scanpos;\r
-      if (jj_3R_163()) { jj_scanpos = xsp; break; }\r
+      if (jj_3R_164()) { jj_scanpos = xsp; break; }\r
     }\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_157() {\r
+  private boolean jj_3R_158() {\r
     if (jj_3R_60()) return true;\r
     return false;\r
   }\r
@@ -4953,14 +4888,14 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_151() {\r
+  private boolean jj_3R_152() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
-    if (jj_3R_157()) {\r
-    jj_scanpos = xsp;\r
     if (jj_3R_158()) {\r
     jj_scanpos = xsp;\r
-    if (jj_3R_159()) return true;\r
+    if (jj_3R_159()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_160()) return true;\r
     }\r
     }\r
     if (jj_3R_74()) return true;\r
@@ -4972,62 +4907,21 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_101() {\r
+  private boolean jj_3R_147() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
-    if (jj_scan_token(30)) jj_scanpos = xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_scan_token(47)) jj_scanpos = xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_105()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_106()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_scan_token(61)) {\r
-    jj_scanpos = xsp;\r
-    if (jj_scan_token(24)) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_107()) {\r
+    if (jj_3R_156()) {\r
     jj_scanpos = xsp;\r
-    if (jj_scan_token(38)) {\r
-    jj_scanpos = xsp;\r
-    if (jj_scan_token(37)) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_108()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_scan_token(17)) {\r
-    jj_scanpos = xsp;\r
-    if (jj_scan_token(95)) {\r
-    jj_scanpos = xsp;\r
-    if (jj_scan_token(96)) return true;\r
-    }\r
-    }\r
-    }\r
-    }\r
-    }\r
-    }\r
-    }\r
-    }\r
-    }\r
+    if (jj_3R_157()) return true;\r
     }\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_155() {\r
+  private boolean jj_3R_156() {\r
     if (jj_scan_token(86)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_147() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_155()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_156()) return true;\r
-    }\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_119() {\r
     if (jj_3R_134()) return true;\r
     Token xsp;\r
@@ -5042,20 +4936,15 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_113() {\r
-    if (jj_3R_118()) return true;\r
-    if (jj_3R_112()) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_104() {\r
     if (jj_3R_114()) return true;\r
     if (jj_3R_103()) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_148() {\r
-    if (jj_scan_token(82)) return true;\r
+  private boolean jj_3R_113() {\r
+    if (jj_3R_118()) return true;\r
+    if (jj_3R_112()) return true;\r
     return false;\r
   }\r
 \r
@@ -5068,13 +4957,18 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     jj_scanpos = xsp;\r
     if (jj_3R_150()) {\r
     jj_scanpos = xsp;\r
-    if (jj_scan_token(85)) return true;\r
+    if (jj_3R_151()) return true;\r
     }\r
     }\r
     }\r
     return false;\r
   }\r
 \r
+  private boolean jj_3R_148() {\r
+    if (jj_scan_token(82)) return true;\r
+    return false;\r
+  }\r
+\r
   private boolean jj_3R_110() {\r
     if (jj_3R_60()) return true;\r
     return false;\r
@@ -5090,17 +4984,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_70() {\r
-    if (jj_scan_token(31)) return true;\r
-    if (jj_3R_47()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_132() {\r
-    if (jj_scan_token(78)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_131() {\r
     if (jj_scan_token(56)) return true;\r
     return false;\r
@@ -5122,8 +5005,8 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3_7() {\r
-    if (jj_3R_44()) return true;\r
+  private boolean jj_3R_132() {\r
+    if (jj_scan_token(78)) return true;\r
     return false;\r
   }\r
 \r
@@ -5133,8 +5016,13 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_111() {\r
-    if (jj_3R_118()) return true;\r
+  private boolean jj_3R_117() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_130()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_131()) return true;\r
+    }\r
     return false;\r
   }\r
 \r
@@ -5143,16 +5031,29 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_117() {\r
+  private boolean jj_3R_111() {\r
+    if (jj_3R_118()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_116() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
-    if (jj_3R_130()) {\r
+    if (jj_3R_127()) {\r
     jj_scanpos = xsp;\r
-    if (jj_3R_131()) return true;\r
+    if (jj_3R_128()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_129()) return true;\r
+    }\r
     }\r
     return false;\r
   }\r
 \r
+  private boolean jj_3R_127() {\r
+    if (jj_scan_token(5)) return true;\r
+    return false;\r
+  }\r
+\r
   private boolean jj_3R_103() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
@@ -5165,25 +5066,12 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_127() {\r
-    if (jj_scan_token(5)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_121() {\r
-    if (jj_scan_token(72)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_116() {\r
+  private boolean jj_3R_115() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
-    if (jj_3R_127()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_128()) {\r
+    if (jj_scan_token(16)) {\r
     jj_scanpos = xsp;\r
-    if (jj_3R_129()) return true;\r
-    }\r
+    if (jj_scan_token(23)) return true;\r
     }\r
     return false;\r
   }\r
@@ -5210,13 +5098,8 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_115() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_scan_token(16)) {\r
-    jj_scanpos = xsp;\r
-    if (jj_scan_token(23)) return true;\r
-    }\r
+  private boolean jj_3R_121() {\r
+    if (jj_scan_token(72)) return true;\r
     return false;\r
   }\r
 \r
@@ -5269,27 +5152,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_58() {\r
-    if (jj_scan_token(IDENT)) return true;\r
-    if (jj_3R_74()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_57() {\r
-    if (jj_3R_73()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_56() {\r
-    if (jj_3R_72()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_55() {\r
-    if (jj_3R_71()) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_86() {\r
     if (jj_3R_96()) return true;\r
     Token xsp;\r
@@ -5300,8 +5162,8 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_54() {\r
-    if (jj_3R_70()) return true;\r
+  private boolean jj_3R_92() {\r
+    if (jj_scan_token(27)) return true;\r
     return false;\r
   }\r
 \r
@@ -5315,16 +5177,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_92() {\r
-    if (jj_scan_token(27)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3_8() {\r
-    if (jj_3R_45()) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_59() {\r
     if (jj_3R_75()) return true;\r
     Token xsp;\r
@@ -5333,8 +5185,8 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_172() {\r
-    if (jj_3R_47()) return true;\r
+  private boolean jj_3R_66() {\r
+    if (jj_3R_80()) return true;\r
     return false;\r
   }\r
 \r
@@ -5344,16 +5196,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_66() {\r
-    if (jj_3R_80()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_61() {\r
-    if (jj_3R_59()) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_47() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
@@ -5364,36 +5206,8 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_68() {\r
-    if (jj_scan_token(14)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_44() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3_8()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_54()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_55()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_56()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_57()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_58()) return true;\r
-    }\r
-    }\r
-    }\r
-    }\r
-    }\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_161() {\r
-    if (jj_scan_token(68)) return true;\r
-    if (jj_scan_token(IDENT)) return true;\r
+  private boolean jj_3R_61() {\r
+    if (jj_3R_59()) return true;\r
     return false;\r
   }\r
 \r
@@ -5408,56 +5222,19 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_64() {\r
-    if (jj_scan_token(21)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_49() {\r
-    if (jj_scan_token(STRING)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3_6() {\r
     if (jj_scan_token(IDENT)) return true;\r
     if (jj_scan_token(88)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_41() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_49()) jj_scanpos = xsp;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_90() {\r
     if (jj_scan_token(55)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_126() {\r
-    if (jj_scan_token(77)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_45() {\r
-    if (jj_3R_59()) return true;\r
-    if (jj_scan_token(88)) return true;\r
-    if (jj_3R_47()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_81() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_scan_token(46)) jj_scanpos = xsp;\r
-    if (jj_scan_token(4)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_88() {\r
-    if (jj_scan_token(46)) return true;\r
+  private boolean jj_3R_89() {\r
+    if (jj_scan_token(36)) return true;\r
     return false;\r
   }\r
 \r
@@ -5467,36 +5244,18 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_89() {\r
-    if (jj_scan_token(36)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_80() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_88()) jj_scanpos = xsp;\r
-    if (jj_scan_token(45)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_94() {\r
     if (jj_scan_token(13)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_65() {\r
-    if (jj_scan_token(52)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_98() {\r
     if (jj_3R_101()) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_171() {\r
-    if (jj_scan_token(69)) return true;\r
+  private boolean jj_3R_65() {\r
+    if (jj_scan_token(52)) return true;\r
     return false;\r
   }\r
 \r
@@ -5510,18 +5269,8 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_169() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_171()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_172()) return true;\r
-    }\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_167() {\r
-    if (jj_scan_token(71)) return true;\r
+  private boolean jj_3R_91() {\r
+    if (jj_scan_token(51)) return true;\r
     return false;\r
   }\r
 \r
@@ -5533,16 +5282,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_91() {\r
-    if (jj_scan_token(51)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_160() {\r
-    if (jj_3R_166()) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_84() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
@@ -5566,32 +5305,11 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_166() {\r
-    if (jj_scan_token(66)) return true;\r
-    if (jj_3R_169()) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_82() {\r
     if (jj_3R_89()) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_63() {\r
-    if (jj_scan_token(71)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_48() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_63()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_64()) return true;\r
-    }\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_69() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
@@ -5605,21 +5323,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_162() {\r
-    if (jj_3R_47()) return true;\r
-    Token xsp;\r
-    while (true) {\r
-      xsp = jj_scanpos;\r
-      if (jj_3R_167()) { jj_scanpos = xsp; break; }\r
-    }\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_125() {\r
-    if (jj_scan_token(76)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_53() {\r
     if (jj_3R_69()) return true;\r
     return false;\r
@@ -5640,57 +5343,19 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_173() {\r
-    if (jj_scan_token(IDENT)) return true;\r
-    if (jj_scan_token(88)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_159() {\r
-    if (jj_scan_token(46)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_170() {\r
-    if (jj_3R_173()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_168() {\r
-    if (jj_3R_170()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3_10() {\r
-    if (jj_3R_47()) return true;\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_48()) jj_scanpos = xsp;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_52() {\r
     if (jj_3R_68()) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_165() {\r
-    if (jj_3R_164()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_164() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3_10()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_168()) return true;\r
-    }\r
+  private boolean jj_3R_51() {\r
+    if (jj_scan_token(59)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_51() {\r
-    if (jj_scan_token(59)) return true;\r
+  private boolean jj_3_5() {\r
+    if (jj_scan_token(57)) return true;\r
+    if (jj_3R_43()) return true;\r
     return false;\r
   }\r
 \r
@@ -5710,14 +5375,357 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3_5() {\r
-    if (jj_scan_token(57)) return true;\r
-    if (jj_3R_43()) return true;\r
+  private boolean jj_3R_95() {\r
+    if (jj_scan_token(IDENT)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_95() {\r
+  private boolean jj_3R_85() {\r
+    if (jj_3R_95()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_42() {\r
+    if (jj_3R_43()) return true;\r
+    Token xsp;\r
+    while (true) {\r
+      xsp = jj_scanpos;\r
+      if (jj_3R_50()) { jj_scanpos = xsp; break; }\r
+    }\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_51()) jj_scanpos = xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_52()) jj_scanpos = xsp;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_106() {\r
+    if (jj_scan_token(7)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_71() {\r
+    if (jj_scan_token(21)) return true;\r
+    if (jj_3R_85()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3_4() {\r
+    if (jj_scan_token(IDENT)) return true;\r
+    if (jj_scan_token(88)) return true;\r
+    if (jj_scan_token(40)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3_3() {\r
+    if (jj_scan_token(IDENT)) return true;\r
+    if (jj_scan_token(88)) return true;\r
+    if (jj_scan_token(58)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3_2() {\r
+    if (jj_scan_token(IDENT)) return true;\r
+    if (jj_scan_token(88)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3_1() {\r
     if (jj_scan_token(IDENT)) return true;\r
+    if (jj_3R_41()) return true;\r
+    if (jj_3R_42()) return true;\r
+    if (jj_scan_token(35)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_108() {\r
+    if (jj_scan_token(26)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_105() {\r
+    if (jj_scan_token(34)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_101() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_scan_token(30)) jj_scanpos = xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_scan_token(47)) jj_scanpos = xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_105()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_106()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_scan_token(61)) {\r
+    jj_scanpos = xsp;\r
+    if (jj_scan_token(24)) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_107()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_scan_token(38)) {\r
+    jj_scanpos = xsp;\r
+    if (jj_scan_token(37)) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_108()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_scan_token(17)) {\r
+    jj_scanpos = xsp;\r
+    if (jj_scan_token(95)) {\r
+    jj_scanpos = xsp;\r
+    if (jj_scan_token(96)) return true;\r
+    }\r
+    }\r
+    }\r
+    }\r
+    }\r
+    }\r
+    }\r
+    }\r
+    }\r
+    }\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_70() {\r
+    if (jj_scan_token(31)) return true;\r
+    if (jj_3R_47()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3_7() {\r
+    if (jj_3R_44()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_58() {\r
+    if (jj_scan_token(IDENT)) return true;\r
+    if (jj_3R_74()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_57() {\r
+    if (jj_3R_73()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_56() {\r
+    if (jj_3R_72()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_55() {\r
+    if (jj_3R_71()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_54() {\r
+    if (jj_3R_70()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3_8() {\r
+    if (jj_3R_45()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_173() {\r
+    if (jj_3R_47()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_68() {\r
+    if (jj_scan_token(14)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_44() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3_8()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_54()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_55()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_56()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_57()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_58()) return true;\r
+    }\r
+    }\r
+    }\r
+    }\r
+    }\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_162() {\r
+    if (jj_scan_token(68)) return true;\r
+    if (jj_scan_token(IDENT)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_64() {\r
+    if (jj_scan_token(21)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_49() {\r
+    if (jj_scan_token(STRING)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_41() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_49()) jj_scanpos = xsp;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_81() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_scan_token(46)) jj_scanpos = xsp;\r
+    if (jj_scan_token(4)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_45() {\r
+    if (jj_3R_59()) return true;\r
+    if (jj_scan_token(88)) return true;\r
+    if (jj_3R_47()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_126() {\r
+    if (jj_scan_token(77)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_88() {\r
+    if (jj_scan_token(46)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_80() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_88()) jj_scanpos = xsp;\r
+    if (jj_scan_token(45)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_172() {\r
+    if (jj_scan_token(69)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_168() {\r
+    if (jj_scan_token(71)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_170() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_172()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_173()) return true;\r
+    }\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_161() {\r
+    if (jj_3R_167()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_48() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_63()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_64()) return true;\r
+    }\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_63() {\r
+    if (jj_scan_token(71)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_167() {\r
+    if (jj_scan_token(66)) return true;\r
+    if (jj_3R_170()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_125() {\r
+    if (jj_scan_token(76)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_163() {\r
+    if (jj_3R_47()) return true;\r
+    Token xsp;\r
+    while (true) {\r
+      xsp = jj_scanpos;\r
+      if (jj_3R_168()) { jj_scanpos = xsp; break; }\r
+    }\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_174() {\r
+    if (jj_scan_token(IDENT)) return true;\r
+    if (jj_scan_token(88)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_160() {\r
+    if (jj_scan_token(46)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_171() {\r
+    if (jj_3R_174()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_151() {\r
+    if (jj_scan_token(85)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_169() {\r
+    if (jj_3R_171()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3_10() {\r
+    if (jj_3R_47()) return true;\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_48()) jj_scanpos = xsp;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_165() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3_10()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_169()) return true;\r
+    }\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_166() {\r
+    if (jj_3R_165()) return true;\r
     return false;\r
   }\r
 \r
index 2ba477f3a85ed3191fba293a9daa363f0c2c499d..190ea2f86aa97874f7044825e92805dd3d47b0e5 100644 (file)
@@ -2365,6 +2365,11 @@ void mul_op() : {/*@bgen(jjtree) mul_op */
                                                                  jjtc000 = false;\r
                                                                }\r
 /*@egen*/ { jjtn000.op = ".*";} | "./"/*@bgen(jjtree)*/\r
+                                                                                             {\r
+                                                                                               jjtree.closeNodeScope(jjtn000, true);\r
+                                                                                               jjtc000 = false;\r
+                                                                                             }\r
+/*@egen*/  { jjtn000.op = "./";}/*@bgen(jjtree)*/\r
     } finally {\r
       if (jjtc000) {\r
         jjtree.closeNodeScope(jjtn000, true);\r
index 0296fd88e30c78d960d9ee2e7c6a664ca2a8556a..2fc5f9ce5e00c77b55e4b20a7179a72f980cbe65 100644 (file)
@@ -652,7 +652,7 @@ void term() : {
 \r
 void mul_op() : {\r
 } {\r
-    "*" { jjtThis.op = "*";} | "/" { jjtThis.op = "/";} | ".*" { jjtThis.op = ".*";} | "./"\r
+    "*" { jjtThis.op = "*";} | "/" { jjtThis.op = "/";} | ".*" { jjtThis.op = ".*";} | "./"  { jjtThis.op = "./";}\r
 }\r
 \r
 void factor() : {\r
index eadf6cee2c29e63d23762751e8816ebe32fe0ac8..2a6233242e008079586ae574eafc85bb95a6d436 100644 (file)
                   style="push">\r
             </command>\r
             -->\r
+            <command\r
+                  commandId="org.simantics.sysdyn.ui.newSCLModule"\r
+                  icon="platform:/plugin/com.famfamfam.silk/icons/script.png"\r
+                  id="org.simantics.sysdyn.ui.newSCLModule"\r
+                  label="SCL Module"\r
+                  style="push">\r
+               <visibleWhen\r
+                     checkEnabled="true">\r
+                  <with\r
+                        variable="selection">\r
+                     <test\r
+                           args="org.simantics.sysdyn.ui.browser.nodes.SCLModulesFolder"\r
+                           property="org.simantics.sysdyn.ui.nodeClass">\r
+                     </test>\r
+                  </with>\r
+               </visibleWhen>\r
+            </command>\r
             <command\r
                   commandId="org.simantics.sysdyn.ui.newModuleNode"\r
                   id="org.simantics.sysdyn.ui.browser.newModule"\r
          <menu\r
                id="org.simantics.export"\r
                label="Export">\r
+            <command\r
+                  commandId="org.simantics.sysdyn.ui.exportSharedOntology"\r
+                  icon="platform:/plugin/com.famfamfam.silk/icons/application_form.png"\r
+                  id="org.simantics.sysdyn.ui.exportSharedOntology"\r
+                  label="Shared Library"\r
+                  style="push">\r
+               <visibleWhen\r
+                     checkEnabled="true">\r
+                  <with\r
+                        variable="selection">\r
+                     <or>\r
+                        <test\r
+                              args="org.simantics.sysdyn.ui.browser.contributions.SharedOntologyNode"\r
+                              property="org.simantics.sysdyn.ui.nodeClass">\r
+                        </test>\r
+                     </or>\r
+                  </with>\r
+               </visibleWhen>\r
+            </command>\r
             <command\r
                   commandId="org.simantics.sysdyn.ui.exportModel"\r
                   label="Model"\r
                            property="org.simantics.graph.resourceType"\r
                            value="true">\r
                      </test>\r
+                     <test\r
+                           args="http://www.simantics.org/Layer0-0.0/SCLModule"\r
+                           property="org.simantics.graph.resourceType"\r
+                           value="true">\r
+                     </test>\r
                   </or>\r
                </with>\r
             </visibleWhen>\r
                            property="org.simantics.graph.resourceType"\r
                            value="true">\r
                      </test>\r
+                     <test\r
+                           args="http://www.simantics.org/Layer0-0.0/SCLModule"\r
+                           property="org.simantics.graph.resourceType"\r
+                           value="true">\r
+                     </test>\r
                   </or>\r
                </with>\r
             </visibleWhen>\r
    </extension>\r
    <extension\r
          point="org.eclipse.ui.commands">\r
+      <command\r
+            id="org.simantics.sysdyn.ui.newSCLModule"\r
+            name="New SCL Module">\r
+      </command>\r
+      <command\r
+            id="org.simantics.sysdyn.ui.exportSharedOntology"\r
+            name="Export Shared Library">\r
+      </command>\r
       <command\r
             id="org.simantics.sysdyn.ui.trend.view.pin"\r
             name="Pin Trend">\r
             class="org.simantics.sysdyn.ui.trend.TrendToSvg"\r
             commandId="org.simantics.sysdyn.ui.trend.view.svg">\r
       </handler>\r
+      <handler\r
+            class="org.simantics.sysdyn.ui.handlers.NewSCLModuleHandler"\r
+            commandId="org.simantics.sysdyn.ui.newSCLModule">\r
+         <activeWhen>\r
+            <with\r
+                  variable="selection">\r
+               <or>\r
+                  <test\r
+                        args="org.simantics.sysdyn.ui.browser.nodes.SCLModulesFolder"\r
+                        property="org.simantics.sysdyn.ui.nodeClass">\r
+                  </test>\r
+               </or>\r
+            </with>\r
+         </activeWhen>\r
+      </handler>\r
       <handler\r
             class="org.simantics.sysdyn.ui.handlers.ShowModuleHandler"\r
             commandId="org.simantics.sysdyn.ui.showModule">\r
                         args="org.simantics.sysdyn.ui.browser.nodes.AbstractChartNode"\r
                         property="org.simantics.sysdyn.ui.nodeClass">\r
                   </test>\r
+                  <test\r
+                        args="org.simantics.sysdyn.ui.browser.nodes.SCLModule"\r
+                        property="org.simantics.sysdyn.ui.nodeClass">\r
+                  </test>\r
                   <!--\r
                   <test\r
                         args="org.simantics.document.workbench.browser_old.DocumentationNode"\r
                         args="org.simantics.sysdyn.ui.browser.nodes.ModuleNode"\r
                         property="org.simantics.sysdyn.ui.nodeClass">\r
                   </test>\r
+                  <test\r
+                        args="org.simantics.sysdyn.ui.browser.nodes.SCLModule"\r
+                        property="org.simantics.sysdyn.ui.nodeClass">\r
+                  </test>\r
                   <!--\r
                   <test\r
                         args="org.simantics.document.workbench.browser_old.DocumentationNode"\r
             </with>\r
          </activeWhen>\r
       </handler>\r
+      <handler\r
+            class="org.simantics.sysdyn.ui.handlers.ExportSharedOntologyHandler"\r
+            commandId="org.simantics.sysdyn.ui.exportSharedOntology">\r
+         <activeWhen>\r
+            <with\r
+                  variable="selection">\r
+               <or>\r
+                  <test\r
+                        args="org.simantics.sysdyn.ui.browser.contributions.SharedOntologyNode"\r
+                        property="org.simantics.sysdyn.ui.nodeClass">\r
+                  </test>\r
+               </or>\r
+            </with>\r
+         </activeWhen>\r
+      </handler>      \r
    </extension>\r
    <extension\r
          point="org.eclipse.ui.importWizards">\r
                class="org.simantics.sysdyn.ui.browser.contributions.Model"\r
                preference="2.0">\r
          </implementation>\r
+         <implementation\r
+               class="org.simantics.sysdyn.ui.browser.contributions.SharedOntology"\r
+               preference="2.0">\r
+         </implementation>\r
          <implementation\r
                class="org.simantics.sysdyn.ui.browser.contributions.Experiment"\r
                preference="1.0">\r
          point="org.simantics.browsing.ui.common.labelerBinding">\r
       <binding\r
             browseContext="http://www.simantics.org/Sysdyn-0.0/Browser">\r
+         <implementation\r
+               class="org.simantics.sysdyn.ui.browser.contributions.SharedOntologyLabeler"\r
+               preference="3.0">\r
+         </implementation>\r
          <implementation\r
                class="org.simantics.sysdyn.ui.browser.contributions.ConfigurationLabeler"\r
                preference="2.0">\r
          point="org.simantics.browsing.ui.common.imagerBinding">\r
       <binding\r
             browseContext="http://www.simantics.org/Sysdyn-0.0/Browser">\r
+         <implementation\r
+               class="org.simantics.sysdyn.ui.browser.contributions.SharedOntologyImager"\r
+               preference="3.0">\r
+         </implementation>\r
          <implementation\r
                class="org.simantics.browsing.ui.swt.ImageDescriptorProviderAdapter"\r
                preference="1.0">\r
index 5506660f0de9eb7c25bb9149ff341c4afbcc48f4..ee58e8e8a704dbc5f0697ef0e082dc2c15a9a765 100644 (file)
@@ -13,7 +13,9 @@ package org.simantics.sysdyn.ui.browser.contributions;
 \r
 import java.util.ArrayList;\r
 import java.util.Collection;\r
+import java.util.Collections;\r
 \r
+import org.simantics.Simantics;\r
 import org.simantics.browsing.ui.common.node.AbstractNode;\r
 import org.simantics.browsing.ui.graph.contributor.viewpoint.ViewpointContributor;\r
 import org.simantics.db.ReadGraph;\r
@@ -21,6 +23,7 @@ import org.simantics.db.Resource;
 import org.simantics.db.common.request.ObjectsWithType;\r
 import org.simantics.db.exception.DatabaseException;\r
 import org.simantics.layer0.Layer0;\r
+import org.simantics.project.ontology.ProjectResource;\r
 import org.simantics.sysdyn.SysdynResource;\r
 \r
 public class Project extends ViewpointContributor<Resource> {\r
@@ -40,6 +43,12 @@ public class Project extends ViewpointContributor<Resource> {
                 e.printStackTrace();\r
             }\r
         }\r
+        \r
+        ProjectResource PROJ = ProjectResource.getInstance(graph);\r
+        if(!graph.isInstanceOf(project, PROJ.Project)) return Collections.emptyList();\r
+        Collection<Resource> ontologies = Simantics.applySCL("Simantics/SharedOntologies", "traverseSharedOntologies", graph, graph.getRootLibrary());\r
+        for(Resource o : ontologies) result.add(new SharedOntologyNode(o));\r
+\r
         return result;\r
 \r
     }\r
diff --git a/dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SharedOntology.java b/dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SharedOntology.java
new file mode 100644 (file)
index 0000000..9645b36
--- /dev/null
@@ -0,0 +1,38 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010, 2011 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.sysdyn.ui.browser.contributions;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+\r
+import org.simantics.browsing.ui.common.node.AbstractNode;\r
+import org.simantics.browsing.ui.graph.contributor.viewpoint.ViewpointContributor;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.sysdyn.ui.browser.nodes.SCLModulesFolder;\r
+\r
+public class SharedOntology  extends ViewpointContributor<SharedOntologyNode> {\r
+\r
+    @Override\r
+    public Collection<?> getContribution(ReadGraph graph, SharedOntologyNode model)\r
+    throws DatabaseException {\r
+        ArrayList<AbstractNode<Resource>> result = new ArrayList<AbstractNode<Resource>>();\r
+        result.add(new SCLModulesFolder(model.data));\r
+        return result;\r
+    }\r
+\r
+    @Override\r
+    public String getViewpointId() {\r
+        return "Standard";\r
+    }\r
+}\r
diff --git a/dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SharedOntologyImager.java b/dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SharedOntologyImager.java
new file mode 100644 (file)
index 0000000..44155c2
--- /dev/null
@@ -0,0 +1,24 @@
+package org.simantics.sysdyn.ui.browser.contributions;\r
+\r
+import java.net.MalformedURLException;\r
+import java.net.URL;\r
+\r
+import org.eclipse.jface.resource.ImageDescriptor;\r
+import org.simantics.browsing.ui.swt.ImagerContributor;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.exception.DatabaseException;\r
+\r
+public class SharedOntologyImager extends ImagerContributor<SharedOntologyNode> {\r
+\r
+    @Override\r
+    public ImageDescriptor getDescriptor(ReadGraph graph, SharedOntologyNode node) throws DatabaseException {\r
+       \r
+        try {\r
+               return ImageDescriptor.createFromURL(new URL("platform:/plugin/com.famfamfam.silk/icons/folder.png"));\r
+        } catch (MalformedURLException e) {\r
+               e.printStackTrace();\r
+        }\r
+        return null;\r
+        \r
+    }\r
+}\r
diff --git a/dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SharedOntologyLabeler.java b/dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SharedOntologyLabeler.java
new file mode 100644 (file)
index 0000000..1868c6f
--- /dev/null
@@ -0,0 +1,19 @@
+package org.simantics.sysdyn.ui.browser.contributions;\r
+\r
+import org.simantics.browsing.ui.graph.contributor.labeler.LabelerContributor;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.exception.DatabaseException;\r
+\r
+public class SharedOntologyLabeler extends LabelerContributor<SharedOntologyNode> {\r
+\r
+    @Override\r
+    public String getLabel(ReadGraph graph, SharedOntologyNode node) throws DatabaseException {\r
+       return graph.getURI(node.data);\r
+    }\r
+    \r
+    @Override\r
+    public int getCategory(ReadGraph graph, SharedOntologyNode node) throws DatabaseException {\r
+       return -1;\r
+    }\r
+\r
+}\r
diff --git a/dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SharedOntologyNode.java b/dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SharedOntologyNode.java
new file mode 100644 (file)
index 0000000..2013ec2
--- /dev/null
@@ -0,0 +1,25 @@
+package org.simantics.sysdyn.ui.browser.contributions;\r
+\r
+import org.simantics.browsing.ui.common.node.AbstractNode;\r
+import org.simantics.browsing.ui.common.node.DeleteException;\r
+import org.simantics.browsing.ui.common.node.IDeletableNode;\r
+import org.simantics.browsing.ui.common.node.IModifiableNode;\r
+import org.simantics.browsing.ui.content.Labeler.Modifier;\r
+import org.simantics.db.Resource;\r
+\r
+public class SharedOntologyNode extends AbstractNode<Resource> implements IDeletableNode, IModifiableNode {\r
+\r
+    public SharedOntologyNode(Resource data) {\r
+        super(data);\r
+    }\r
+    \r
+    @Override\r
+    public void delete() throws DeleteException {\r
+    }\r
+\r
+       @Override\r
+       public Modifier getModifier(String columnId) {\r
+               return null;\r
+       }\r
+\r
+}\r
index 0a102065948c0587600d6a36db8ae93fab7cb16e..c695ca63c248b630796104300e30c0e81a16aff6 100644 (file)
 package org.simantics.sysdyn.ui.browser.nodes;\r
 \r
 import org.simantics.browsing.ui.common.node.AbstractNode;\r
+import org.simantics.browsing.ui.common.node.DeleteException;\r
+import org.simantics.browsing.ui.common.node.IDeletableNode;\r
+import org.simantics.browsing.ui.common.node.IModifiableNode;\r
+import org.simantics.browsing.ui.content.Labeler.Modifier;\r
+import org.simantics.browsing.ui.graph.impl.LabelModifier;\r
 import org.simantics.db.Resource;\r
+import org.simantics.db.Session;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.common.request.WriteRequest;\r
+import org.simantics.db.exception.CancelTransactionException;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.util.RemoverUtil;\r
+import org.simantics.layer0.Layer0;\r
+import org.simantics.ui.SimanticsUI;\r
+import org.simantics.utils.ui.ExceptionUtils;\r
 \r
-public class SCLModule extends AbstractNode<Resource> {\r
+public class SCLModule extends AbstractNode<Resource> implements IDeletableNode, IModifiableNode {\r
 \r
     public SCLModule(Resource resource) {\r
         super(resource);\r
     }\r
 \r
+    @Override\r
+    public void delete() throws DeleteException {\r
+        try {\r
+            SimanticsUI.getSession().syncRequest(new WriteRequest() {\r
+                @Override\r
+                public void perform(WriteGraph graph) throws DatabaseException, CancelTransactionException {\r
+                    RemoverUtil.remove(graph, data);\r
+                }\r
+            });\r
+        } catch (DatabaseException e) {\r
+            ExceptionUtils.logAndShowError(e);\r
+        }    \r
+\r
+    }\r
+\r
+    @Override\r
+    public Modifier getModifier(String columnId) {\r
+        Session session = SimanticsUI.getSession();\r
+        return new LabelModifier(session, data, session.getService(Layer0.class).HasName);\r
+    }\r
+    \r
 }\r
diff --git a/dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/ExportSharedOntologyHandler.java b/dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/ExportSharedOntologyHandler.java
new file mode 100644 (file)
index 0000000..b322db1
--- /dev/null
@@ -0,0 +1,33 @@
+package org.simantics.sysdyn.ui.handlers;\r
+\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+import org.simantics.modeling.ModelingUtils;\r
+import org.simantics.sysdyn.ui.browser.contributions.SharedOntologyNode;\r
+import org.simantics.utils.ui.AdaptionUtils;\r
+\r
+public class ExportSharedOntologyHandler  extends AbstractHandler {\r
+\r
+    /**\r
+     * Assumes to be called from a node with SysdynModel, Library or SysdynModelicaFunction as its resource\r
+     */\r
+       @Override\r
+       public Object execute(ExecutionEvent event) throws ExecutionException {\r
+\r
+        ISelection sel = HandlerUtil.getCurrentSelection(event);\r
+        \r
+        @SuppressWarnings("unchecked")\r
+               SharedOntologyNode node = AdaptionUtils.adaptToSingle(sel, SharedOntologyNode.class);\r
+        if (node == null)\r
+            return null;\r
+\r
+        ModelingUtils.exportSharedOntologyWithUI(node.data);\r
+\r
+        return null;\r
+        \r
+       }\r
+\r
+}\r
diff --git a/dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/NewSCLModuleHandler.java b/dev-jkauttio/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/NewSCLModuleHandler.java
new file mode 100644 (file)
index 0000000..f5f58be
--- /dev/null
@@ -0,0 +1,47 @@
+package org.simantics.sysdyn.ui.handlers;\r
+\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.ui.handlers.HandlerUtil;\r
+import org.simantics.browsing.ui.common.node.AbstractNode;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.common.request.WriteRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.modeling.ModelingUtils;\r
+import org.simantics.ui.SimanticsUI;\r
+import org.simantics.utils.ui.AdaptionUtils;\r
+\r
+public class NewSCLModuleHandler  extends AbstractHandler {\r
+\r
+    /**\r
+     * Assumes to be called from a node with SysdynModel, Library or SysdynModelicaFunction as its resource\r
+     */\r
+       @Override\r
+       public Object execute(ExecutionEvent event) throws ExecutionException {\r
+\r
+        ISelection sel = HandlerUtil.getCurrentSelection(event);\r
+        \r
+        @SuppressWarnings("unchecked")\r
+               AbstractNode<Resource> node = AdaptionUtils.adaptToSingle(sel, AbstractNode.class);\r
+        if (node == null)\r
+            return null;\r
+\r
+        final Resource parent = node.data;\r
+        \r
+        SimanticsUI.getSession().asyncRequest(new WriteRequest() {\r
+               \r
+            @Override\r
+            public void perform(WriteGraph graph) throws DatabaseException {\r
+               ModelingUtils.createSCLModule(graph, parent);\r
+            }\r
+            \r
+        });\r
+        \r
+        return null;\r
+        \r
+       }\r
+\r
+}\r