vgritsenko    02/02/08 19:32:05

  Modified:    src/java/org/apache/cocoon/components/language/programming/javascript
                        JavascriptLanguage.java
  Added:       lib/optional rhino-1.5r3.jar
               src/java/org/apache/cocoon/components/language/programming/javascript
                        CompiledJavascriptLanguage.java
                        JavascriptProgram.java
  Log:
  Javascript changes:
   - Upgrade rhino
   - Move compiled javascript to CompiledJavascriptLanguage
   - Add JavascriptProgram representing interpreted Javascripts Cocoon Programs
  
  Revision  Changes    Path
  1.1                  xml-cocoon2/lib/optional/rhino-1.5r3.jar
  
        <<Binary file>>
  
  
  1.5       +94 -63    
xml-cocoon2/src/java/org/apache/cocoon/components/language/programming/javascript/JavascriptLanguage.java
  
  Index: JavascriptLanguage.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/programming/javascript/JavascriptLanguage.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- JavascriptLanguage.java   4 Feb 2002 12:22:24 -0000       1.4
  +++ JavascriptLanguage.java   9 Feb 2002 03:32:05 -0000       1.5
  @@ -56,74 +56,105 @@
   package org.apache.cocoon.components.language.programming.javascript;
   
   import org.apache.cocoon.components.language.LanguageException;
  -import org.apache.cocoon.components.language.programming.java.JavaLanguage;
  -import org.mozilla.javascript.tools.jsc.Main;
  +import org.apache.cocoon.components.language.markup.xsp.java.XSLTExtension;
  +import 
org.apache.cocoon.components.language.programming.AbstractProgrammingLanguage;
  +import org.apache.cocoon.components.language.programming.Program;
  +import org.apache.cocoon.components.language.programming.ProgrammingLanguage;
  +import org.apache.cocoon.util.ClassUtils;
  +import org.apache.cocoon.util.IOUtils;
   
  +import java.io.BufferedReader;
   import java.io.File;
  +import java.io.FileReader;
  +import java.io.IOException;
   
   /**
  - * The compiled Javascript (Rhino) programming language processor
  + * The interpreted Javascript programming language.
  + * Program in Javascript must have comment line as first line of file:
  + * <pre>
  + * // $Cocoon extends: org.apache.cocoon.components.language.xsp.JSGenerator$
  + * </pre>
  + * The class specified will be used as a Java wrapper interpreting javascript 
program.
    *
  - * @author <a href="mailto:[EMAIL PROTECTED]";>Ricardo Rocha</a>
  - * @version CVS $Id: JavascriptLanguage.java,v 1.4 2002/02/04 12:22:24 cziegeler 
Exp $
  + * @author <a href="mailto:[EMAIL PROTECTED]";>Vadim Gritsenko</a>
  + * @version CVS $Id: JavascriptLanguage.java,v 1.5 2002/02/09 03:32:05 vgritsenko 
Exp $
    */
  -public class JavascriptLanguage extends JavaLanguage
  -{
  -  /**
  -   * Return the language name
  -   *
  -   * @return The language name
  -   */
  -  public String getName() {
  -    return "javascript";
  -  }
  -
  -  /**
  -   * Return the language's canonical source file extension.
  -   *
  -   * @return The source file extension
  -   */
  -  public String getSourceExtension() {
  -    return "js";
  -  }
  -
  -  /**
  -   * Compile a source file yielding a loadable class file.
  -   *
  -   * @param filename The object program base file name
  -   * @param baseDirectory The directory containing the object program file
  -   * @param encoding The encoding expected in the source file or
  -   * <code>null</code> if it is the platform's default encoding
  -   * @exception LanguageException If an error occurs during compilation
  -   */
  -  protected void compile(
  -    String name, File baseDirectory, String encoding
  -  ) throws LanguageException {
  -    try {
  -      Main compiler = (Main) this.compilerClass.newInstance();
  -
  -      int pos = name.lastIndexOf(File.separatorChar);
  -      String filename = name.substring(pos + 1);
  -      String pathname =
  -        baseDirectory.getCanonicalPath() + File.separator +
  -        name.substring(0, pos).replace(File.separatorChar, '/');
  -      String packageName =
  -        name.substring(0, pos).replace(File.separatorChar, '.');
  -
  -      String[] args = {
  -        "-extends",
  -        "org.apache.cocoon.components.language.markup.xsp.javascript.JSGenerator",
  -        "-nosource",
  -        "-O", "9",
  -        "-package", packageName,
  -        new StringBuffer(pathname).append(File.separator)
  -              
.append(filename).append(".").append(this.getSourceExtension()).toString()
  -      };
  -
  -      compiler.main(args);
  -    } catch (Exception e) {
  -      getLogger().warn("JavascriptLanguage.compile", e);
  -      throw new LanguageException(e.getMessage());
  +public class JavascriptLanguage extends AbstractProgrammingLanguage implements 
ProgrammingLanguage {
  +
  +    public Program load(String filename, File baseDirectory, String encoding) 
throws LanguageException {
  +        // Does source file exist?
  +        File sourceFile = new File(baseDirectory,
  +                filename + "." + this.getSourceExtension());
  +        if (!sourceFile.exists()) {
  +            throw new LanguageException("Can't load program - File doesn't exist: "
  +                    + IOUtils.getFullFilename(sourceFile));
  +        }
  +        if (!sourceFile.isFile()) {
  +            throw new LanguageException("Can't load program - File is not a normal 
file: "
  +                    + IOUtils.getFullFilename(sourceFile));
  +        }
  +        if (!sourceFile.canRead()) {
  +            throw new LanguageException("Can't load program - File cannot be read: "
  +                    + IOUtils.getFullFilename(sourceFile));
  +        }
  +
  +        Class clazz = null;
  +        String className = null;
  +        BufferedReader r = null;
  +        try {
  +            r = new BufferedReader(new FileReader(sourceFile));
  +            className = r.readLine();
  +            if (className != null) {
  +                int i = className.indexOf("$Cocoon extends: ");
  +                if (i != -1) {
  +                    int j = className.indexOf("$", i + 1);
  +                    if (j != -1) {
  +                        className = className.substring(i + "$Cocoon extends: 
".length(), j);
  +                    } else {
  +                        className = null;
  +                    }
  +                } else {
  +                    className = null;
  +                }
  +            }
  +            if (className == null) {
  +                throw new LanguageException("Can't load program - Signature is not 
found: "
  +                        + IOUtils.getFullFilename(sourceFile));
  +            }
  +
  +            clazz = ClassUtils.loadClass(className);
  +        } catch (IOException e) {
  +            throw new LanguageException("Can't load program - Signature is not 
found: "
  +                    + IOUtils.getFullFilename(sourceFile));
  +        } catch (ClassNotFoundException e) {
  +            throw new LanguageException("Can't load program - Base class " + 
className + " is not found: "
  +                    + IOUtils.getFullFilename(sourceFile));
  +        } finally {
  +            if (r != null) try {
  +                r.close();
  +            } catch (IOException ignored) {
  +            }
  +        }
  +
  +        return new JavascriptProgram(sourceFile, clazz);
  +    }
  +
  +    protected void doUnload(Object program, String filename, File baseDir)
  +            throws LanguageException {
  +        System.out.println("IJavascriptLanguage: Unloading " + filename);
  +        // Do nothing. Source is already deleted by the AbstractProgrammingLanguage.
  +    }
  +
  +    public String quoteString(String constant) {
  +        return XSLTExtension.escapeString(constant);
  +    }
  +
  +    /**
  +     * Return the language's canonical source file extension.
  +     *
  +     * @return The source file extension
  +     */
  +    public String getSourceExtension() {
  +        return "js";
       }
  -  }
   }
  
  
  
  1.1                  
xml-cocoon2/src/java/org/apache/cocoon/components/language/programming/javascript/CompiledJavascriptLanguage.java
  
  Index: CompiledJavascriptLanguage.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache Cocoon" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.cocoon.components.language.programming.javascript;
  
  import org.apache.cocoon.components.language.LanguageException;
  import org.apache.cocoon.components.language.programming.java.JavaLanguage;
  
  import org.mozilla.javascript.tools.jsc.Main;
  
  import java.io.File;
  
  /**
   * The compiled Javascript (Rhino) programming language processor
   *
   * @author <a href="mailto:[EMAIL PROTECTED]";>Ricardo Rocha</a>
   * @version CVS $Id: CompiledJavascriptLanguage.java,v 1.1 2002/02/09 03:32:05 
vgritsenko Exp $
   */
  public class CompiledJavascriptLanguage extends JavaLanguage {
  
      /**
       * Return the language's canonical source file extension.
       *
       * @return The source file extension
       */
      public String getSourceExtension() {
          return "js";
      }
  
      /**
       * Compile a source file yielding a loadable class file.
       *
       * @param filename The object program base file name
       * @param baseDirectory The directory containing the object program file
       * @param encoding The encoding expected in the source file or
       * <code>null</code> if it is the platform's default encoding
       * @exception LanguageException If an error occurs during compilation
       */
      protected void compile(
              String name, File baseDirectory, String encoding
              ) throws LanguageException {
          try {
              Main compiler = (Main) this.compilerClass.newInstance();
  
              int pos = name.lastIndexOf(File.separatorChar);
              String filename = name.substring(pos + 1);
              String pathname =
                      baseDirectory.getCanonicalPath() + File.separator +
                      name.substring(0, pos).replace(File.separatorChar, '/');
              String packageName =
                      name.substring(0, pos).replace(File.separatorChar, '.');
  
              String[] args = {
                  "-extends",
                  "org.apache.cocoon.components.language.markup.xsp.JSGenerator",
                  "-nosource",
                  "-O", "9",
                  "-package", packageName,
                  "-o", filename + ".class",
                  pathname + File.separator + filename + "." + 
this.getSourceExtension()
              };
  
              compiler.main(args);
          } catch (Exception e) {
              getLogger().warn("JavascriptLanguage.compile", e);
              throw new LanguageException(e.getMessage());
          }
      }
  }
  
  
  
  1.1                  
xml-cocoon2/src/java/org/apache/cocoon/components/language/programming/javascript/JavascriptProgram.java
  
  Index: JavascriptProgram.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache Cocoon" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.cocoon.components.language.programming.javascript;
  
  import org.apache.avalon.framework.component.ComponentManager;
  import org.apache.avalon.framework.configuration.Configurable;
  import org.apache.avalon.framework.configuration.DefaultConfiguration;
  import org.apache.avalon.framework.context.Context;
  
  import org.apache.avalon.excalibur.component.ComponentHandler;
  import org.apache.avalon.excalibur.component.RoleManager;
  import org.apache.avalon.excalibur.logger.LogKitManager;
  
  import org.apache.cocoon.components.language.generator.CompiledComponent;
  import org.apache.cocoon.components.language.programming.Program;
  
  import java.io.File;
  
  public class JavascriptProgram implements Program {
  
      protected File file;
      protected Class clazz;
      protected DefaultConfiguration config;
  
      public JavascriptProgram(File file, Class clazz) {
          this.file = file;
          this.clazz = clazz;
  
          config = new DefaultConfiguration("", "GeneratorSelector");
          DefaultConfiguration child = new DefaultConfiguration("file", "");
          child.setValue(file.toString());
          config.addChild(child);
      }
  
      public String getName() {
          return file.toString();
      }
  
      public ComponentHandler getHandler(ComponentManager manager,
                                         Context context,
                                         RoleManager roles,
                                         LogKitManager logKitManager)
              throws Exception {
  
          return ComponentHandler.getComponentHandler(
                  clazz, config, manager, context, roles, logKitManager);
      }
  
      public CompiledComponent newInstance() throws Exception {
          CompiledComponent instance = (CompiledComponent) clazz.newInstance();
          if (instance instanceof Configurable)
              ((Configurable) instance).configure(config);
          return instance;
      }
  }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to