You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by pk...@apache.org on 2014/02/14 18:07:55 UTC
svn commit: r1568358 - in /uima/ruta/branches/UIMA-3569:
example-projects/ruta-ep-example-extensions/
example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/
example-projects/ruta-ep-example-extensions/src/tes...
Author: pkluegl
Date: Fri Feb 14 17:07:54 2014
New Revision: 1568358
URL: http://svn.apache.org/r1568358
Log:
UIMA-3569
- introduced concept for language extension of blocks in core and ide
- added exemplary block construct that applies the rules in inverse order
- added test
Added:
uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlock.java (with props)
uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlockExtension.java (with props)
uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlockIDEExtension.java (with props)
uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleBlockTest.java (with props)
uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/resources/org/apache/uima/ruta/example/extensions/ExampleBlockTest.ruta
uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/extensions/IRutaBlockExtension.java (with props)
uima/ruta/branches/UIMA-3569/ruta-ep-ide/schema/blockExtension.exsd
uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/extensions/IIDEBlockExtension.java (with props)
Removed:
uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/RutaAutomataBlock.java
uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/RutaAutomataFactory.java
Modified:
uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/plugin.xml
uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/resources/org/apache/uima/ruta/example/extensions/TestEngine.xml
uima/ruta/branches/UIMA-3569/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaLexer.g
uima/ruta/branches/UIMA-3569/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/RutaBlock.java
uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/extensions/RutaExternalFactory.java
uima/ruta/branches/UIMA-3569/ruta-ep-addons/src/main/java/org/apache/uima/ruta/query/ui/QueryActionHandler.java
uima/ruta/branches/UIMA-3569/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java
uima/ruta/branches/UIMA-3569/ruta-ep-ide/plugin.xml
uima/ruta/branches/UIMA-3569/ruta-ep-ide/schema/conditionExtension.exsd
uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaLexer.g
uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g
uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaExtensionManager.java
uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywords.java
uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywordsManager.java
uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/builder/RutaBuilder.java
uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/parser/RutaSourceParser.java
uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBlock.java
uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ScriptFactory.java
Modified: uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/plugin.xml
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/plugin.xml?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/plugin.xml (original)
+++ uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/plugin.xml Fri Feb 14 17:07:54 2014
@@ -61,5 +61,12 @@ under the License.
engine="org.apache.uima.ruta.example.extensions.ExampleNumberFunctionExtension">
</condition>
</extension>
+ <extension
+ point="org.apache.uima.ruta.ide.blockExtension">
+ <block
+ class="org.apache.uima.ruta.example.extensions.ExampleBlockIDEExtension"
+ engine="org.apache.uima.ruta.example.extensions.ExampleBlockExtension">
+ </block>
+ </extension>
</plugin>
Added: uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlock.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlock.java?rev=1568358&view=auto
==============================================================================
--- uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlock.java (added)
+++ uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlock.java Fri Feb 14 17:07:54 2014
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.example.extensions;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.uima.cas.Type;
+import org.apache.uima.cas.text.AnnotationFS;
+import org.apache.uima.ruta.BlockApply;
+import org.apache.uima.ruta.RutaBlock;
+import org.apache.uima.ruta.RutaStatement;
+import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.ScriptApply;
+import org.apache.uima.ruta.rule.AbstractRule;
+import org.apache.uima.ruta.rule.AbstractRuleMatch;
+import org.apache.uima.ruta.rule.RuleApply;
+import org.apache.uima.ruta.rule.RuleMatch;
+import org.apache.uima.ruta.rule.RutaRule;
+import org.apache.uima.ruta.rule.RutaRuleElement;
+import org.apache.uima.ruta.visitor.InferenceCrowd;
+
+/**
+ * Exemplary implementation of a block extension, which applied its rules in reverse order.
+ *
+ */
+public class ExampleBlock extends RutaBlock {
+
+ public ExampleBlock(String name, RutaRule rule, List<RutaStatement> elements, RutaBlock parent,
+ String defaultNamespace) {
+ super(name, rule, elements, parent, defaultNamespace);
+ }
+
+ @Override
+ public ScriptApply apply(RutaStream stream, InferenceCrowd crowd) {
+ BlockApply result = new BlockApply(this);
+ crowd.beginVisit(this, result);
+ RuleApply apply = rule.apply(stream, crowd, true);
+ for (AbstractRuleMatch<? extends AbstractRule> eachMatch : apply.getList()) {
+ if (eachMatch.matched()) {
+ List<AnnotationFS> matchedAnnotations = ((RuleMatch) eachMatch).getMatchedAnnotations(null,
+ null);
+ if (matchedAnnotations == null || matchedAnnotations.isEmpty()) {
+ continue;
+ }
+ AnnotationFS each = matchedAnnotations.get(0);
+ if (each == null) {
+ continue;
+ }
+ List<Type> types = ((RutaRuleElement) rule.getRuleElements().get(0)).getMatcher().getTypes(
+ getParent() == null ? this : getParent(), stream);
+ for (Type eachType : types) {
+ RutaStream window = stream.getWindowStream(each, eachType);
+ List<RutaStatement> elements = new ArrayList<RutaStatement>(getElements());
+ Collections.reverse(elements);
+ for (RutaStatement element : elements) {
+ if (element != null) {
+ element.apply(window, crowd);
+ }
+ }
+ }
+ }
+ }
+ crowd.endVisit(this, result);
+ return result;
+ }
+
+
+
+
+}
Propchange: uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlock.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlockExtension.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlockExtension.java?rev=1568358&view=auto
==============================================================================
--- uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlockExtension.java (added)
+++ uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlockExtension.java Fri Feb 14 17:07:54 2014
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.example.extensions;
+
+import java.util.List;
+
+import org.apache.uima.ruta.RutaBlock;
+import org.apache.uima.ruta.RutaElement;
+import org.apache.uima.ruta.expression.RutaExpression;
+import org.apache.uima.ruta.extensions.IRutaBlockExtension;
+import org.apache.uima.ruta.extensions.RutaParseException;
+import org.apache.uima.ruta.verbalize.RutaVerbalizer;
+
+public class ExampleBlockExtension implements IRutaBlockExtension {
+
+ private final String[] knownExtensions = new String[] { "REVERSE" };
+
+ private final Class<?>[] extensions = new Class[] { ExampleBlock.class };
+
+ public String verbalize(RutaElement element, RutaVerbalizer verbalizer) {
+ if (element instanceof ExampleBlock) {
+ ExampleBlock b = (ExampleBlock) element;
+ String verbalize = verbalizer.verbalize(b, true);
+ verbalize.replaceFirst("BLOCK", verbalizeName(element));
+ return verbalize;
+ } else {
+ return "UnknownAction";
+ }
+ }
+
+ @Override
+ public RutaBlock createBlock(String name, List<RutaExpression> args, RutaBlock env)
+ throws RutaParseException {
+ return new ExampleBlock(name, null, null, env, name);
+ }
+
+
+ public String verbalizeName(RutaElement element) {
+ return knownExtensions[0];
+ }
+
+ public String[] getKnownExtensions() {
+ return knownExtensions;
+ }
+
+ public Class<?>[] extensions() {
+ return extensions;
+ }
+
+
+}
Propchange: uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlockExtension.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlockIDEExtension.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlockIDEExtension.java?rev=1568358&view=auto
==============================================================================
--- uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlockIDEExtension.java (added)
+++ uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlockIDEExtension.java Fri Feb 14 17:07:54 2014
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.example.extensions;
+
+import org.antlr.runtime.RecognitionException;
+import org.apache.uima.ruta.ide.core.extensions.IIDEConditionExtension;
+import org.apache.uima.ruta.ide.core.extensions.IRutaCheckerProblemFactory;
+import org.eclipse.dltk.ast.expressions.Expression;
+import org.eclipse.dltk.compiler.problem.IProblemReporter;
+
+public class ExampleBlockIDEExtension implements IIDEConditionExtension {
+ private final String[] strings = new String[] { "REVERSE" };
+
+ public String[] getKnownExtensions() {
+ return strings;
+ }
+
+ public boolean checkSyntax(Expression element, IRutaCheckerProblemFactory problemFactory,
+ IProblemReporter rep) throws RecognitionException {
+ // do not add additional checks in this example
+ return false;
+ }
+
+}
Propchange: uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/main/java/org/apache/uima/ruta/example/extensions/ExampleBlockIDEExtension.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleBlockTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleBlockTest.java?rev=1568358&view=auto
==============================================================================
--- uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleBlockTest.java (added)
+++ uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleBlockTest.java Fri Feb 14 17:07:54 2014
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.example.extensions;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.uima.cas.CAS;
+import org.apache.uima.cas.FSIterator;
+import org.apache.uima.cas.Type;
+import org.apache.uima.cas.text.AnnotationFS;
+import org.apache.uima.cas.text.AnnotationIndex;
+import org.apache.uima.ruta.engine.RutaEngine;
+import org.junit.Test;
+
+public class ExampleBlockTest {
+
+ @Test
+ public void test() {
+ String name = this.getClass().getSimpleName();
+ String namespace = this.getClass().getPackage().getName().replaceAll("\\.", "/");
+ CAS cas = null;
+ try {
+ cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION, namespace + "/test.txt", 50);
+ } catch (Exception e) {
+ e.printStackTrace();
+ assert (false);
+ }
+
+ Type t = null;
+ AnnotationIndex<AnnotationFS> ai = null;
+ FSIterator<AnnotationFS> iterator = null;
+
+ t = RutaTestUtils.getTestType(cas, 4);
+ ai = cas.getAnnotationIndex(t);
+ assertEquals(1, ai.size());
+ iterator = ai.iterator();
+ assertEquals("This is a test.", iterator.next().getCoveredText());
+
+ if (cas != null) {
+ cas.release();
+ }
+
+ }
+}
Propchange: uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/java/org/apache/uima/ruta/example/extensions/ExampleBlockTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/resources/org/apache/uima/ruta/example/extensions/ExampleBlockTest.ruta
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/resources/org/apache/uima/ruta/example/extensions/ExampleBlockTest.ruta?rev=1568358&view=auto
==============================================================================
--- uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/resources/org/apache/uima/ruta/example/extensions/ExampleBlockTest.ruta (added)
+++ uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/resources/org/apache/uima/ruta/example/extensions/ExampleBlockTest.ruta Fri Feb 14 17:07:54 2014
@@ -0,0 +1,20 @@
+PACKAGE uima.ruta.example;
+
+DECLARE T1, T2, T3, T4;
+
+//This is a test.
+REVERSE Document{}{
+ (CW T3){-> T4};
+ (SW T2){-> T3};
+ (SW T1){-> T2};
+ (SW PERIOD){-> T1};
+}
+
+
+
+
+
+
+
+
+
Modified: uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/resources/org/apache/uima/ruta/example/extensions/TestEngine.xml
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/resources/org/apache/uima/ruta/example/extensions/TestEngine.xml?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/resources/org/apache/uima/ruta/example/extensions/TestEngine.xml (original)
+++ uima/ruta/branches/UIMA-3569/example-projects/ruta-ep-example-extensions/src/test/resources/org/apache/uima/ruta/example/extensions/TestEngine.xml Fri Feb 14 17:07:54 2014
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
+
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -17,7 +18,6 @@
specific language governing permissions and limitations
under the License.
-->
-
<analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier">
<frameworkImplementation>org.apache.uima.java</frameworkImplementation>
<primitive>true</primitive>
@@ -210,7 +210,8 @@
<string>org.apache.uima.ruta.example.extensions.ExampleNumberFunctionExtension</string>
<string>org.apache.uima.ruta.example.extensions.ExampleStringFunctionExtension</string>
<string>org.apache.uima.ruta.example.extensions.ExampleTypeFunctionExtension</string>
- </array>
+ <string>org.apache.uima.ruta.example.extensions.ExampleBlockExtension</string>
+ </array>
</value>
</nameValuePair>
</configurationParameterSettings>
Modified: uima/ruta/branches/UIMA-3569/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaLexer.g
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaLexer.g?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaLexer.g (original)
+++ uima/ruta/branches/UIMA-3569/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaLexer.g Fri Feb 14 17:07:54 2014
@@ -332,7 +332,6 @@ ScriptString : 'SCRIPT';
EngineString : 'ENGINE';
UimafitString : 'UIMAFIT';
BlockString : 'BLOCK';
-AutomataBlockString : 'RULES';
TypeString : 'TYPE';
IntString : 'INT';
DoubleString : 'DOUBLE';
Modified: uima/ruta/branches/UIMA-3569/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g (original)
+++ uima/ruta/branches/UIMA-3569/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g Fri Feb 14 17:07:54 2014
@@ -56,13 +56,11 @@ import org.apache.uima.ruta.action.Abstr
import org.apache.uima.ruta.action.ActionFactory;
import org.apache.uima.ruta.condition.AbstractRutaCondition;
import org.apache.uima.ruta.condition.ConditionFactory;
-import org.apache.uima.ruta.RutaAutomataBlock;
import org.apache.uima.ruta.RutaBlock;
import org.apache.uima.ruta.RutaEnvironment;
import org.apache.uima.ruta.RutaModule;
import org.apache.uima.ruta.RutaScriptBlock;
import org.apache.uima.ruta.RutaScriptFactory;
-import org.apache.uima.ruta.RutaAutomataFactory;
import org.apache.uima.ruta.RutaStatement;
import org.apache.uima.ruta.expression.ExpressionFactory;
import org.apache.uima.ruta.expression.IRutaExpression;
@@ -97,7 +95,6 @@ import org.apache.uima.ruta.rule.quantif
private List vars = new ArrayList();
private int level = 0;
private RutaScriptFactory factory = new RutaScriptFactory();
-private RutaScriptFactory automataFactory = new RutaAutomataFactory();
private RutaExternalFactory external;
private String namespace;
private String moduleName;
@@ -302,6 +299,9 @@ public void setExternalFactory(RutaExter
private boolean isTypeFunctionExtension(String name) {
return external.getTypeFunctionExtensions().keySet().contains(name);
}
+ private boolean isBlockExtension(String name) {
+ return external.getBlockExtensions().keySet().contains(name);
+ }
@@ -367,7 +367,7 @@ statement returns [RutaStatement stmt =
| stmtVariable = variableDeclaration {stmt = stmtVariable;}
| stmtRule = simpleStatement {stmt = stmtRule;}
| stmtBlock = blockDeclaration {stmt = stmtBlock;}
- | stmtAutomata = automataDeclaration {stmt = stmtBlock;}
+ | stmtExternal = externalBlock {stmt = stmtExternal;}
)
;
@@ -556,7 +556,8 @@ level--;
}
;
-automataDeclaration returns [RutaBlock block = null]
+
+externalBlock returns [RutaBlock block = null]
options {
backtrack = true;
}
@@ -567,37 +568,35 @@ scope {
@init{
RutaRuleElement re = null;
RuleElementIsolator container = null;
-RutaScriptFactory oldFactory = factory;
-factory = automataFactory;
level++;
}
@after {
-factory = oldFactory;
level--;
}
:
-
- type = AutomataBlockString
- LPAREN
- id = Identifier
- RPAREN
- {block = factory.createAutomataBlock(id, re, body, $blockDeclaration[level - 1]::env);}
+ {isBlockExtension(input.LT(1).getText())}?
+ type = Identifier
+ (LPAREN
+ args = varArgumentList
+ RPAREN)?
+ {block = external.createExternalBlock(type, args, $blockDeclaration[level - 1]::env);}
{$blockDeclaration::env = block;
container = new RuleElementIsolator();}
+
re1 = ruleElementWithCA[container] {re = re1;}
+
{RutaRule rule = factory.createRule(re, block);
- if(block instanceof RutaAutomataBlock) {
- ((RutaAutomataBlock)block).setMatchRule(rule);
- }
- container.setContainer(rule);
- }
+ block.setRule(rule);
+ container.setContainer(rule);}
+
LCURLY body = statements RCURLY
{block.setElements(body);
- $blockDeclaration::env.getScript().addBlock(id.getText(),block);
-
+ // really needs to know of the block?
+ //$blockDeclaration::env.getScript().addBlock(type,block);
}
;
+
ruleElementWithCA[RuleElementContainer container] returns [RutaRuleElement re = null]
:
Modified: uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/RutaBlock.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/RutaBlock.java?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/RutaBlock.java (original)
+++ uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/RutaBlock.java Fri Feb 14 17:07:54 2014
@@ -93,4 +93,5 @@ public abstract class RutaBlock extends
return name;
}
+
}
Added: uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/extensions/IRutaBlockExtension.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/extensions/IRutaBlockExtension.java?rev=1568358&view=auto
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/extensions/IRutaBlockExtension.java (added)
+++ uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/extensions/IRutaBlockExtension.java Fri Feb 14 17:07:54 2014
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.extensions;
+
+import java.util.List;
+
+import org.apache.uima.ruta.RutaBlock;
+import org.apache.uima.ruta.expression.RutaExpression;
+
+public interface IRutaBlockExtension extends IRutaExtension {
+
+ RutaBlock createBlock(String name, List<RutaExpression> args, RutaBlock env)
+ throws RutaParseException;
+
+}
Propchange: uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/extensions/IRutaBlockExtension.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/extensions/RutaExternalFactory.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/extensions/RutaExternalFactory.java?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/extensions/RutaExternalFactory.java (original)
+++ uima/ruta/branches/UIMA-3569/ruta-core/src/main/java/org/apache/uima/ruta/extensions/RutaExternalFactory.java Fri Feb 14 17:07:54 2014
@@ -24,6 +24,7 @@ import java.util.List;
import java.util.Map;
import org.antlr.runtime.Token;
+import org.apache.uima.ruta.RutaBlock;
import org.apache.uima.ruta.action.AbstractRutaAction;
import org.apache.uima.ruta.condition.AbstractRutaCondition;
import org.apache.uima.ruta.expression.RutaExpression;
@@ -46,6 +47,8 @@ public class RutaExternalFactory {
private Map<String, IRutaNumberFunctionExtension> numberFunctionExtensions;
+ private Map<String, IRutaBlockExtension> blockExtensions;
+
public RutaExternalFactory() {
super();
conditionExtensions = new HashMap<String, IRutaConditionExtension>();
@@ -54,6 +57,7 @@ public class RutaExternalFactory {
stringFunctionExtensions = new HashMap<String, IRutaStringFunctionExtension>();
numberFunctionExtensions = new HashMap<String, IRutaNumberFunctionExtension>();
typeFunctionExtensions = new HashMap<String, IRutaTypeFunctionExtension>();
+ blockExtensions = new HashMap<String, IRutaBlockExtension>();
}
public AbstractRutaCondition createExternalCondition(Token id, List<RutaExpression> args)
@@ -122,6 +126,20 @@ public class RutaExternalFactory {
return null;
}
+ public RutaBlock createExternalBlock(Token type, List<RutaExpression> args, RutaBlock env)
+ throws RutaParseException {
+ if(type == null) {
+ return null;
+ }
+ String t = type.getText();
+ IRutaBlockExtension extension = blockExtensions.get(t);
+ if(extension != null) {
+ return extension.createBlock(t, args, env);
+ }
+ return null;
+ }
+
+
public void addExtension(String id, IRutaExtension extension) {
if (extension instanceof IRutaActionExtension) {
addActionExtension(id, (IRutaActionExtension) extension);
@@ -135,6 +153,8 @@ public class RutaExternalFactory {
addNumberFunctionExtension(id, (IRutaNumberFunctionExtension) extension);
} else if (extension instanceof IRutaTypeFunctionExtension) {
addTypeFunctionExtension(id, (IRutaTypeFunctionExtension) extension);
+ } else if (extension instanceof IRutaBlockExtension) {
+ addBlockExtension(id, (IRutaBlockExtension) extension);
}
}
@@ -161,6 +181,10 @@ public class RutaExternalFactory {
public void addTypeFunctionExtension(String id, IRutaTypeFunctionExtension extension) {
typeFunctionExtensions.put(id, extension);
}
+
+ public void addBlockExtension(String id, IRutaBlockExtension extension) {
+ blockExtensions.put(id, extension);
+ }
public boolean isInitialized() {
return !actionExtensions.isEmpty() || !conditionExtensions.isEmpty()
@@ -194,8 +218,8 @@ public class RutaExternalFactory {
public Map<String, IRutaTypeFunctionExtension> getTypeFunctionExtensions() {
return typeFunctionExtensions;
- }
-
+ }
+
public void setTypeFunctionExtensions(Map<String, IRutaTypeFunctionExtension> typeFunctionExtensions) {
this.typeFunctionExtensions = typeFunctionExtensions;
}
@@ -215,5 +239,14 @@ public class RutaExternalFactory {
public void setConditionExtensions(Map<String, IRutaConditionExtension> conditionExtensions) {
this.conditionExtensions = conditionExtensions;
}
+
+ public Map<String, IRutaBlockExtension> getBlockExtensions() {
+ return blockExtensions;
+ }
+
+ public void setBlockExtensions(Map<String, IRutaBlockExtension> blockExtensions) {
+ this.blockExtensions = blockExtensions;
+ }
+
}
Modified: uima/ruta/branches/UIMA-3569/ruta-ep-addons/src/main/java/org/apache/uima/ruta/query/ui/QueryActionHandler.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-addons/src/main/java/org/apache/uima/ruta/query/ui/QueryActionHandler.java?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-addons/src/main/java/org/apache/uima/ruta/query/ui/QueryActionHandler.java (original)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-addons/src/main/java/org/apache/uima/ruta/query/ui/QueryActionHandler.java Fri Feb 14 17:07:54 2014
@@ -48,6 +48,7 @@ import org.apache.uima.resource.metadata
import org.apache.uima.ruta.addons.RutaAddonsPlugin;
import org.apache.uima.ruta.engine.RutaEngine;
import org.apache.uima.ruta.extensions.IRutaActionExtension;
+import org.apache.uima.ruta.extensions.IRutaBlockExtension;
import org.apache.uima.ruta.extensions.IRutaBooleanFunctionExtension;
import org.apache.uima.ruta.extensions.IRutaConditionExtension;
import org.apache.uima.ruta.extensions.IRutaNumberFunctionExtension;
@@ -214,6 +215,8 @@ public class QueryActionHandler implemen
.getRutaStringFunctionExtensions();
IRutaTypeFunctionExtension[] typeFunctionExtensions = RutaExtensionManager.getDefault()
.getRutaTypeFunctionExtensions();
+ IRutaBlockExtension[] blockExtensions = RutaExtensionManager.getDefault()
+ .getRutaBlockExtensions();
List<String> languageExtensions = new ArrayList<String>();
@@ -235,6 +238,9 @@ public class QueryActionHandler implemen
for (IRutaTypeFunctionExtension each : typeFunctionExtensions) {
languageExtensions.add(each.getClass().getName());
}
+ for (IRutaBlockExtension each : blockExtensions) {
+ languageExtensions.add(each.getClass().getName());
+ }
ae.setConfigParameterValue(RutaEngine.PARAM_ADDITIONAL_EXTENSIONS,
languageExtensions.toArray(new String[0]));
Modified: uima/ruta/branches/UIMA-3569/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java (original)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java Fri Feb 14 17:07:54 2014
@@ -50,6 +50,7 @@ import org.apache.uima.ruta.ide.core.Rut
import org.apache.uima.ruta.ide.core.RutaKeywordsManager;
import org.apache.uima.ruta.ide.core.builder.RutaProjectUtils;
import org.apache.uima.ruta.ide.core.extensions.IIDEActionExtension;
+import org.apache.uima.ruta.ide.core.extensions.IIDEBlockExtension;
import org.apache.uima.ruta.ide.core.extensions.IIDEBooleanFunctionExtension;
import org.apache.uima.ruta.ide.core.extensions.IIDEConditionExtension;
import org.apache.uima.ruta.ide.core.extensions.IIDENumberFunctionExtension;
@@ -119,6 +120,8 @@ public class LanguageCheckerVisitor exte
private Map<String, IIDETypeFunctionExtension> typeFunctionExtensions;
+ private Map<String, IIDEBlockExtension> blockExtensions;
+
/**
* Mapping from short type name (e.g. {@code W}) to their disambiguated long type names (e.g.
* {@code org.apache.uima.ruta.type.W}).
@@ -179,6 +182,8 @@ public class LanguageCheckerVisitor exte
private String parentTypeInDeclaration;
+
+
public LanguageCheckerVisitor(IProblemReporter problemReporter, ISourceLineTracker linetracker,
ISourceModule sourceModule) {
super();
@@ -748,8 +753,11 @@ public class LanguageCheckerVisitor exte
if (s instanceof RutaBlock) {
RutaBlock b = (RutaBlock) s;
knownLocalVariables.push(new HashMap<String, Integer>());
- blocks.push(b.getName());
+ String name = b.getName();
+ blocks.push(name);
+ // TODO add syntax check for block extensions
}
+
return true;
}
@@ -1011,6 +1019,15 @@ public class LanguageCheckerVisitor exte
typeFunctionExtensions.put(string, each);
}
}
+ IIDEBlockExtension[] bextensions = RutaExtensionManager.getDefault()
+ .getIDEBlockExtensions();
+ for (IIDEBlockExtension each : bextensions) {
+ String[] knownExtensions = each.getKnownExtensions();
+ for (String string : knownExtensions) {
+ blockExtensions.put(string, each);
+ }
+ }
+
}
Modified: uima/ruta/branches/UIMA-3569/ruta-ep-ide/plugin.xml
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-ide/plugin.xml?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-ide/plugin.xml (original)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-ide/plugin.xml Fri Feb 14 17:07:54 2014
@@ -34,6 +34,7 @@ under the License.
<extension-point id="stringFunctionExtension" name="stringFunctionExtension" schema="schema/stringFunctionExtension.exsd"/>
<extension-point id="rutaSemanticHighlighting" name="rutaSemanticHighlighting" schema="schema/rutaSemanticHighlighting.exsd"/>
<extension-point id="rutaTestEngine" name="rutaTestEngine" schema="schema/rutaTestEngine.exsd"/>
+ <extension-point id="blockExtension" name="blockExtension" schema="schema/blockExtension.exsd"/>
<extension
id="nature"
point="org.eclipse.core.resources.natures">
Added: uima/ruta/branches/UIMA-3569/ruta-ep-ide/schema/blockExtension.exsd
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-ide/schema/blockExtension.exsd?rev=1568358&view=auto
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-ide/schema/blockExtension.exsd (added)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-ide/schema/blockExtension.exsd Fri Feb 14 17:07:54 2014
@@ -0,0 +1,112 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.apache.uima.ruta.ide" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.apache.uima.ruta.ide" id="blockExtension" name="blockExtension"/>
+ </appinfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="block" minOccurs="1" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="block">
+ <complexType>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.apache.uima.ruta.ide.core.extensions.IIDEBlockExtension"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="engine" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.apache.uima.ruta.extensions.IRutaBlockExtension"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="examples"/>
+ </appinfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="apiinfo"/>
+ </appinfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+
+</schema>
Modified: uima/ruta/branches/UIMA-3569/ruta-ep-ide/schema/conditionExtension.exsd
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-ide/schema/conditionExtension.exsd?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-ide/schema/conditionExtension.exsd (original)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-ide/schema/conditionExtension.exsd Fri Feb 14 17:07:54 2014
@@ -1,27 +1,9 @@
<?xml version='1.0' encoding='UTF-8'?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
+<!-- Schema file written by PDE -->
<schema targetNamespace="org.apache.uima.ruta.ide" xmlns="http://www.w3.org/2001/XMLSchema">
<annotation>
<appinfo>
- <meta.schema plugin="org.apache.uima.ruta.ruta.ide" id="conditionExtension" name="conditionExtension"/>
+ <meta.schema plugin="org.apache.uima.ruta.ide" id="conditionExtension" name="conditionExtension"/>
</appinfo>
<documentation>
[Enter description of this extension point.]
@@ -73,7 +55,7 @@ under the License.
</documentation>
<appinfo>
- <meta.attribute kind="java" basedOn=":org.apache.uima.ruta.ruta.ide.core.extensions.IIDEConditionExtension"/>
+ <meta.attribute kind="java" basedOn=":org.apache.uima.ruta.ide.core.extensions.IIDEConditionExtension"/>
</appinfo>
</annotation>
</attribute>
Modified: uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaLexer.g
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaLexer.g?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaLexer.g (original)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaLexer.g Fri Feb 14 17:07:54 2014
@@ -331,7 +331,6 @@ ScriptString : 'SCRIPT';
EngineString : 'ENGINE';
UimafitString : 'UIMAFIT';
BlockString : 'BLOCK';
-AutomataBlockString : 'RULES';
TypeString : 'TYPE';
IntString : 'INT';
DoubleString : 'DOUBLE';
Modified: uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g (original)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g Fri Feb 14 17:07:54 2014
@@ -28,6 +28,7 @@ options {
package org.apache.uima.ruta.ide.core.parser;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -85,6 +86,7 @@ import org.apache.uima.ruta.ide.parser.a
private Map<String, String> varTypeMap = new HashMap<String, String>();
private Map<String, String> lists = new HashMap<String, String>();
private Map<String, String> tables = new HashMap<String, String>();
+ private Collection<String> knownExternalBlocks = new ArrayList();
public int length;
public DLTKTokenConverter converter;
public DescriptorManager descriptor;
@@ -96,6 +98,14 @@ import org.apache.uima.ruta.ide.parser.a
private ScriptFactory scriptFactory = new ScriptFactory();
+ public void setKnownExternalBlocks(Collection<String> knownExternalBlocks) {
+ this.knownExternalBlocks = knownExternalBlocks;
+ }
+
+ private boolean isBlockExtension(String name) {
+ return knownExternalBlocks.contains(name);
+ }
+
public List<String> getVariables() {
return vars;
}
@@ -301,7 +311,7 @@ statement returns [List<Statement> stmts
( stmts1 = declaration {stmts.addAll(stmts1);}
| stmtVariable = variableDeclaration {stmts.addAll(stmtVariable);}
| stmt3 = blockDeclaration {stmts.add(stmt3);}
- //| stmt4 = tmRule {stmts.add(stmt4);}
+ | (externalBlock)=> stmt4 = externalBlock {stmts.add(stmt4);}
| stmt2 = simpleStatement {stmts.add(stmt2);}
@@ -551,7 +561,7 @@ level--;
}
:
- (declareToken = BlockString | declareToken = AutomataBlockString)
+ (declareToken = BlockString)
LPAREN
id = Identifier {addVariable(id.getText(), declareToken.getText());}
{
@@ -562,11 +572,38 @@ level--;
re1 = ruleElementWithCA
{
rule = scriptFactory.createRule(re1);
- scriptFactory.finalizeScriptBlock(block, rc, rule, body);}
+ scriptFactory.finalizeBlock(block, rc, rule, body);}
LCURLY body = statements rc = RCURLY
- {scriptFactory.finalizeScriptBlock(block, rc, rule, body);}
+ {scriptFactory.finalizeBlock(block, rc, rule, body);}
;
+externalBlock returns [RutaBlock block = null]
+options{
+ backtrack = true;
+}
+
+@init{
+RutaRule rule = null;
+
+}
+@after {
+
+}
+ :
+ {isBlockExtension(input.LT(1).getText())}?
+ (type = Identifier)
+ {block = scriptFactory.createExternalBlock(type, $blockDeclaration[level]::env);
+ $blockDeclaration::env = block;}
+ (LPAREN
+ args = varArgumentList {block.setArguments(args);}
+ RPAREN)?
+ re1 = ruleElementWithCA
+ {
+ rule = scriptFactory.createRule(re1);
+ scriptFactory.finalizeBlock(block, rc, rule, body);}
+ LCURLY body = statements rc = RCURLY
+ {scriptFactory.finalizeBlock(block, rc, rule, body);}
+ ;
ruleElementWithCA returns [RutaRuleElement re = null]
:
Modified: uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaExtensionManager.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaExtensionManager.java?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaExtensionManager.java (original)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaExtensionManager.java Fri Feb 14 17:07:54 2014
@@ -25,6 +25,7 @@ import java.util.List;
import org.apache.uima.ruta.extensions.IEngineLoader;
import org.apache.uima.ruta.extensions.IRutaActionExtension;
+import org.apache.uima.ruta.extensions.IRutaBlockExtension;
import org.apache.uima.ruta.extensions.IRutaBooleanFunctionExtension;
import org.apache.uima.ruta.extensions.IRutaConditionExtension;
import org.apache.uima.ruta.extensions.IRutaNumberFunctionExtension;
@@ -33,6 +34,7 @@ import org.apache.uima.ruta.extensions.I
import org.apache.uima.ruta.ide.RutaIdeCorePlugin;
import org.apache.uima.ruta.ide.core.extensions.ICompletionExtension;
import org.apache.uima.ruta.ide.core.extensions.IIDEActionExtension;
+import org.apache.uima.ruta.ide.core.extensions.IIDEBlockExtension;
import org.apache.uima.ruta.ide.core.extensions.IIDEBooleanFunctionExtension;
import org.apache.uima.ruta.ide.core.extensions.IIDEConditionExtension;
import org.apache.uima.ruta.ide.core.extensions.IIDENumberFunctionExtension;
@@ -269,6 +271,27 @@ public class RutaExtensionManager {
return result.toArray(new IIDETypeFunctionExtension[0]);
}
+ public IIDEBlockExtension[] getIDEBlockExtensions() {
+ Collection<IIDEBlockExtension> result = new ArrayList<IIDEBlockExtension>();
+ IExtension[] blockExtensions = Platform.getExtensionRegistry()
+ .getExtensionPoint(RutaIdeCorePlugin.PLUGIN_ID, "blockExtension").getExtensions();
+ for (IExtension extension : blockExtensions) {
+ IConfigurationElement[] configurationElements = extension.getConfigurationElements();
+ for (IConfigurationElement configurationElement : configurationElements) {
+ Object obj = null;
+ try {
+ obj = configurationElement.createExecutableExtension("class");
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ if (obj instanceof IIDEBlockExtension) {
+ result.add((IIDEBlockExtension) obj);
+ }
+ }
+ }
+ return result.toArray(new IIDEBlockExtension[0]);
+ }
+
public IRutaConditionExtension[] getRutaConditionExtensions() {
Collection<IRutaConditionExtension> result = new ArrayList<IRutaConditionExtension>();
IExtension[] conditionExtensions = Platform.getExtensionRegistry()
@@ -394,6 +417,27 @@ public class RutaExtensionManager {
}
return result.toArray(new IRutaTypeFunctionExtension[0]);
}
+
+ public IRutaBlockExtension[] getRutaBlockExtensions() {
+ Collection<IRutaBlockExtension> result = new ArrayList<IRutaBlockExtension>();
+ IExtension[] extensions = Platform.getExtensionRegistry()
+ .getExtensionPoint(RutaIdeCorePlugin.PLUGIN_ID, "blockExtension").getExtensions();
+ for (IExtension extension : extensions) {
+ IConfigurationElement[] configurationElements = extension.getConfigurationElements();
+ for (IConfigurationElement configurationElement : configurationElements) {
+ Object obj = null;
+ try {
+ obj = configurationElement.createExecutableExtension("engine");
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ if (obj instanceof IRutaBlockExtension) {
+ result.add((IRutaBlockExtension) obj);
+ }
+ }
+ }
+ return result.toArray(new IRutaBlockExtension[0]);
+ }
public IEngineLoader[] getEngineExtensions() {
Collection<IEngineLoader> result = new ArrayList<IEngineLoader>();
Modified: uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywords.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywords.java?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywords.java (original)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywords.java Fri Feb 14 17:07:54 2014
@@ -28,7 +28,7 @@ public class RutaKeywords implements IRu
private static String[] declaration = { "WORDLIST", "DECLARE", "BOOLEAN", "PACKAGE", "TYPE",
"TYPESYSTEM", "INT", "DOUBLE", "FLOAT", "STRING", "SCRIPT", "WORDTABLE", "ENGINE", "BLOCK",
- "RULES", "BOOLEANLIST", "INTLIST", "DOUBLELIST", "FLOATLIST", "STRINGLIST", "TYPELIST",
+ "BOOLEANLIST", "INTLIST", "DOUBLELIST", "FLOATLIST", "STRINGLIST", "TYPELIST",
"UIMAFIT", "IMPORT" , "FROM", "AS" };
private static String[] action = { "DEL", "CALL", "MARK", "MARKSCORE", "COLOR", "LOG", "REPLACE",
Modified: uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywordsManager.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywordsManager.java?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywordsManager.java (original)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/RutaKeywordsManager.java Fri Feb 14 17:07:54 2014
@@ -20,6 +20,7 @@
package org.apache.uima.ruta.ide.core;
import org.apache.uima.ruta.extensions.IRutaActionExtension;
+import org.apache.uima.ruta.extensions.IRutaBlockExtension;
import org.apache.uima.ruta.extensions.IRutaBooleanFunctionExtension;
import org.apache.uima.ruta.extensions.IRutaConditionExtension;
import org.apache.uima.ruta.extensions.IRutaNumberFunctionExtension;
@@ -107,6 +108,13 @@ public final class RutaKeywordsManager {
all[IRutaKeywords.TYPEFUNCTION] = RutaKeywords.append(all[IRutaKeywords.TYPEFUNCTION],
knownExtensions);
}
+ IRutaBlockExtension[] blockExtensions = RutaExtensionManager.getDefault()
+ .getRutaBlockExtensions();
+ for (IRutaBlockExtension each : blockExtensions) {
+ String[] knownExtensions = each.getKnownExtensions();
+ all[IRutaKeywords.DECLARATION] = RutaKeywords.append(all[IRutaKeywords.DECLARATION],
+ knownExtensions);
+ }
}
public static String[] getKeywords() {
Modified: uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/builder/RutaBuilder.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/builder/RutaBuilder.java?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/builder/RutaBuilder.java (original)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/builder/RutaBuilder.java Fri Feb 14 17:07:54 2014
@@ -25,6 +25,7 @@ import java.util.List;
import org.apache.uima.ruta.engine.RutaEngine;
import org.apache.uima.ruta.extensions.IEngineLoader;
import org.apache.uima.ruta.extensions.IRutaActionExtension;
+import org.apache.uima.ruta.extensions.IRutaBlockExtension;
import org.apache.uima.ruta.extensions.IRutaBooleanFunctionExtension;
import org.apache.uima.ruta.extensions.IRutaConditionExtension;
import org.apache.uima.ruta.extensions.IRutaNumberFunctionExtension;
@@ -193,6 +194,8 @@ public class RutaBuilder extends Abstrac
.getRutaStringFunctionExtensions();
IRutaTypeFunctionExtension[] typeFunctionExtensions = RutaExtensionManager.getDefault()
.getRutaTypeFunctionExtensions();
+ IRutaBlockExtension[] blockExtensions = RutaExtensionManager.getDefault()
+ .getRutaBlockExtensions();
IEngineLoader[] engineExtensions = RutaExtensionManager.getDefault().getEngineExtensions();
List<String> language = new ArrayList<String>();
@@ -216,6 +219,9 @@ public class RutaBuilder extends Abstrac
for (IRutaTypeFunctionExtension each : typeFunctionExtensions) {
language.add(each.getClass().getName());
}
+ for (IRutaBlockExtension each : blockExtensions) {
+ language.add(each.getClass().getName());
+ }
for (IEngineLoader each : engineExtensions) {
engines.add(each.getClass().getName());
}
Added: uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/extensions/IIDEBlockExtension.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/extensions/IIDEBlockExtension.java?rev=1568358&view=auto
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/extensions/IIDEBlockExtension.java (added)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/extensions/IIDEBlockExtension.java Fri Feb 14 17:07:54 2014
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.ide.core.extensions;
+
+public interface IIDEBlockExtension extends IRutaExtension {
+
+}
Propchange: uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/extensions/IIDEBlockExtension.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/parser/RutaSourceParser.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/parser/RutaSourceParser.java?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/parser/RutaSourceParser.java (original)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/core/parser/RutaSourceParser.java Fri Feb 14 17:07:54 2014
@@ -20,6 +20,9 @@
package org.apache.uima.ruta.ide.core.parser;
import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -28,7 +31,10 @@ import org.antlr.runtime.CharStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.Token;
import org.apache.uima.ruta.engine.RutaEngine;
+import org.apache.uima.ruta.extensions.IRutaBlockExtension;
import org.apache.uima.ruta.ide.core.IRutaKeywords;
+import org.apache.uima.ruta.ide.core.RutaExtensionManager;
+import org.apache.uima.ruta.ide.core.RutaKeywords;
import org.apache.uima.ruta.ide.core.RutaKeywordsManager;
import org.apache.uima.ruta.ide.core.builder.DescriptorManager;
import org.apache.uima.ruta.ide.parser.ast.RutaModuleDeclaration;
@@ -108,6 +114,14 @@ public class RutaSourceParser extends Ab
variables.add(each);
variableTypes.put(each, "TYPEFUNCTION");
}
+ Collection<String> knownExternalBlocks = new ArrayList<String>();
+ IRutaBlockExtension[] blockExtensions = RutaExtensionManager.getDefault()
+ .getRutaBlockExtensions();
+ for (IRutaBlockExtension each : blockExtensions) {
+ String[] knownExtensions = each.getKnownExtensions();
+ knownExternalBlocks.addAll(Arrays.asList(knownExtensions));
+ }
+ parser.setKnownExternalBlocks(knownExternalBlocks);
parser.addPredefinedType("Document");
parser.addPredefinedType("Annotation");
Modified: uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBlock.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBlock.java?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBlock.java (original)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBlock.java Fri Feb 14 17:07:54 2014
@@ -19,9 +19,12 @@
package org.apache.uima.ruta.ide.parser.ast;
+import java.util.List;
+
import org.apache.commons.lang3.StringUtils;
import org.eclipse.dltk.ast.ASTVisitor;
import org.eclipse.dltk.ast.declarations.MethodDeclaration;
+import org.eclipse.dltk.ast.expressions.Expression;
public class RutaBlock extends MethodDeclaration {
@@ -29,6 +32,8 @@ public class RutaBlock extends MethodDec
private String namespace;
+ private List<Expression> args;
+
public RutaBlock(String name, String namespace, int nameStart, int nameEnd, int declStart,
int declEnd) {
super(name, nameStart, nameEnd, declStart, declEnd);
@@ -46,6 +51,11 @@ public class RutaBlock extends MethodDec
if (rule != null) {
rule.traverse(visitor);
}
+ if(args != null) {
+ for (Expression each : args) {
+ each.traverse(visitor);
+ }
+ }
traverseChildNodes(visitor);
visitor.endvisit(this);
}
@@ -69,4 +79,10 @@ public class RutaBlock extends MethodDec
public String toString() {
return this.getClass().getSimpleName() + " : " + super.toString();
}
+
+
+ public void setArguments(List<Expression> args) {
+ this.args = args;
+
+ }
}
Modified: uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ScriptFactory.java
URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ScriptFactory.java?rev=1568358&r1=1568357&r2=1568358&view=diff
==============================================================================
--- uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ScriptFactory.java (original)
+++ uima/ruta/branches/UIMA-3569/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ScriptFactory.java Fri Feb 14 17:07:54 2014
@@ -39,8 +39,7 @@ public class ScriptFactory extends Abstr
public void resetRuleCounter() {
idCounter = 0;
}
-
-
+
public RutaRule createRule(RutaRuleElement element) {
List<Expression> elements = new ArrayList<Expression>();
elements.add(element);
@@ -49,7 +48,7 @@ public class ScriptFactory extends Abstr
public RutaRule createRule(List<Expression> elements, Token s, boolean updateCounter) {
RutaRule rule = new RutaRule(elements, idCounter);
- if(updateCounter) {
+ if (updateCounter) {
idCounter++;
}
if (s != null) {
@@ -58,7 +57,7 @@ public class ScriptFactory extends Abstr
}
return rule;
}
-
+
public RutaRule createRule(List<Expression> elements, Token s) {
return createRule(elements, s, true);
}
@@ -152,7 +151,7 @@ public class ScriptFactory extends Abstr
filterNullObjects(c);
filterNullObjects(a);
RutaRuleElement rutaRuleElement = new RutaRuleElement(bounds[0], bounds[1], null, null, c, a);
- if(w != null && w.getText().equals("#")) {
+ if (w != null && w.getText().equals("#")) {
rutaRuleElement.setWildcard(true);
}
return rutaRuleElement;
@@ -184,7 +183,7 @@ public class ScriptFactory extends Abstr
* @param id
* @param type
* @param rutaBlock
- * @return
+ * @return RutaBlock
*/
public RutaBlock createScriptBlock(Token id, Token type, RutaBlock rutaBlock) {
int[] bounds = getBounds(type, id);
@@ -200,7 +199,21 @@ public class ScriptFactory extends Abstr
}
}
- public void finalizeScriptBlock(RutaBlock block, Token rc, RutaRule rule, List<Statement> body) {
+ /**
+ * Creates an AST element for an external block construct
+ * @param type
+ * @param parent block
+ * @return new external block construct
+ */
+ public RutaBlock createExternalBlock(Token type, RutaBlock env) {
+ int[] bounds = getBounds(type);
+ int[] nameBounds = getBounds(type);
+ RutaBlock block = new RutaBlock(type.getText(), type.getText(), nameBounds[0], nameBounds[1],
+ bounds[0], bounds[1]);
+ return block;
+ }
+
+ public void finalizeBlock(RutaBlock block, Token rc, RutaRule rule, List<Statement> body) {
// taking care of null statements - errors should have been recognized
// in parser
filterNullObjects(body);