incubator-connectors-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kwri...@apache.org
Subject svn commit: r1160751 - in /incubator/lcf/trunk/framework/script-engine/src/main/java/org/apache/manifoldcf/scriptengine: NewOperation.java ScriptParser.java
Date Tue, 23 Aug 2011 15:48:33 GMT
Author: kwright
Date: Tue Aug 23 15:48:33 2011
New Revision: 1160751

URL: http://svn.apache.org/viewvc?rev=1160751&view=rev
Log:
Add 'new' operation as a pluggable operation

Added:
    incubator/lcf/trunk/framework/script-engine/src/main/java/org/apache/manifoldcf/scriptengine/NewOperation.java
  (with props)
Modified:
    incubator/lcf/trunk/framework/script-engine/src/main/java/org/apache/manifoldcf/scriptengine/ScriptParser.java

Added: incubator/lcf/trunk/framework/script-engine/src/main/java/org/apache/manifoldcf/scriptengine/NewOperation.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/script-engine/src/main/java/org/apache/manifoldcf/scriptengine/NewOperation.java?rev=1160751&view=auto
==============================================================================
--- incubator/lcf/trunk/framework/script-engine/src/main/java/org/apache/manifoldcf/scriptengine/NewOperation.java
(added)
+++ incubator/lcf/trunk/framework/script-engine/src/main/java/org/apache/manifoldcf/scriptengine/NewOperation.java
Tue Aug 23 15:48:33 2011
@@ -0,0 +1,41 @@
+/* $Id$ */
+
+/**
+* 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.manifoldcf.scriptengine;
+
+/** Interface describing what a "new" operation needs to do.
+*/
+public interface NewOperation
+{
+  /** Parse and execute.  Parsing begins right after the "new" keyword and the operation
name token.
+  *@param sp is the script parser to use to help in the parsing.
+  *@param currentStream is the current token stream.
+  *@return the variable reference that got created.  Should never be null.
+  */
+  public VariableReference parseAndCreate(ScriptParser sp, TokenStream currentStream)
+    throws ScriptException;
+  
+  /** Parse and skip.  Parsing begins right after the "new" keyword and the operation name
token.
+  *@param sp is the script parser to use to help in the parsing.
+  *@param currentStream is the current token stream.
+  */
+  public void parseAndSkip(ScriptParser sp, TokenStream currentStream)
+    throws ScriptException;
+  
+}

Propchange: incubator/lcf/trunk/framework/script-engine/src/main/java/org/apache/manifoldcf/scriptengine/NewOperation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/lcf/trunk/framework/script-engine/src/main/java/org/apache/manifoldcf/scriptengine/NewOperation.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: incubator/lcf/trunk/framework/script-engine/src/main/java/org/apache/manifoldcf/scriptengine/ScriptParser.java
URL: http://svn.apache.org/viewvc/incubator/lcf/trunk/framework/script-engine/src/main/java/org/apache/manifoldcf/scriptengine/ScriptParser.java?rev=1160751&r1=1160750&r2=1160751&view=diff
==============================================================================
--- incubator/lcf/trunk/framework/script-engine/src/main/java/org/apache/manifoldcf/scriptengine/ScriptParser.java
(original)
+++ incubator/lcf/trunk/framework/script-engine/src/main/java/org/apache/manifoldcf/scriptengine/ScriptParser.java
Tue Aug 23 15:48:33 2011
@@ -32,6 +32,9 @@ public class ScriptParser
   /** A table of commands that we know how to deal with. */
   protected Map<String,Command> commands = new HashMap<String,Command>();
   
+  /** A table of "new" operations that we know how to deal with. */
+  protected Map<String,NewOperation> newOperations = new HashMap<String,NewOperation>();
+
   public ScriptParser()
   {
   }
@@ -45,6 +48,15 @@ public class ScriptParser
     commands.put(commandName,command);
   }
 
+  /** Add a "new" operation.
+  *@param operationName is the name of the operation.
+  *@param operation is the operation to create.
+  */
+  public void addNewOperation(String operationName, NewOperation operation)
+  {
+    newOperations.put(operationName,operation);
+  }
+  
   // Statement return codes
   protected static final int STATEMENT_NOTME = 0;
   protected static final int STATEMENT_ISME = 1;
@@ -704,6 +716,20 @@ public class ScriptParser
         return new VariableBoolean(false);
       else if (variableName.equals("null"))
         return new NullVariableReference();
+      else if (variableName.equals("new"))
+      {
+        // Parse the new operation name
+        t = currentStream.peek();
+        if (t == null || t.getToken() == null)
+          syntaxError(currentStream,"Missing 'new' operation name");
+        String operationName = t.getToken();
+        // Look up operation
+        NewOperation newOperation = newOperations.get(operationName);
+        if (newOperation == null)
+          syntaxError(currentStream,"New operation type is unknown");
+        currentStream.skip();
+        return newOperation.parseAndCreate(this,currentStream);
+      }
       else
       {
         // Look up variable reference in current context
@@ -793,6 +819,20 @@ public class ScriptParser
     if (t != null && t.getToken() != null)
     {
       currentStream.skip();
+      if (t.getToken().equals("new"))
+      {
+        // Parse the new operation name
+        t = currentStream.peek();
+        if (t == null || t.getToken() == null)
+          syntaxError(currentStream,"Missing 'new' operation name");
+        String operationName = t.getToken();
+        // Look up operation
+        NewOperation newOperation = newOperations.get(operationName);
+        if (newOperation == null)
+          syntaxError(currentStream,"New operation type is unknown");
+        currentStream.skip();
+        newOperation.parseAndSkip(this,currentStream);
+      }
       return true;
     }
     else if (t != null && t.getString() != null)



Mime
View raw message