Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2010 eXo Platform SAS.
   *
   * This is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation; either version 2.1 of
   * the License, or (at your option) any later version.
   *
   * This software is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 package org.exoplatform.services.jcr.ext.script.groovy;
 
 
 
 import java.io.File;
 import java.net.URL;
 import java.util.List;

Author(s):
Andrey Parfonov
Version:
$Id: JcrGroovyClassLoaderProvider.java 3702 2010-12-22 10:24:13Z aparfonov $
 
 {
 
    public static class JcrGroovyClassLoader extends ExtendedGroovyClassLoader
    {
       public JcrGroovyClassLoader(ClassLoader classLoader)
       {
          super(classLoader);
       }
 
       public JcrGroovyClassLoader(GroovyClassLoader parent)
       {
          super(parent);
       }

      
 
       {
          return new JcrCompilationUnit(configcsthis);
       }
 
       public URL[] findDependencies(final SourceFolder[] sourcesfinal SourceFile[] filesthrows IOException
       {
          return findDependencies(sourcesfiles.null);
       }
 
       @SuppressWarnings("rawtypes")
       private URL[] findDependencies(SourceFolder[] sourcesSourceFile[] filesint phaseCompilerConfiguration config)
          throws IOException
       {
          CodeSource cs = new CodeSource(getCodeSource(), (java.security.cert.Certificate[])null);
          JcrGroovyResourceLoader actualLoader = null;
          URL[] roots = null;
          if (sources != null && sources.length > 0)
          {
             roots = new URL[sources.length];
             for (int i = 0; i < sources.lengthi++)
                roots[i] = sources[i].getPath();
             actualLoader = new JcrGroovyResourceLoader(roots);
          }
 
          final HierarchicalResourceLoader loader =
             new HierarchicalResourceLoader(actualLoaderJcrGroovyClassLoader.this.getResourceLoader());
          
         CompilationUnit cunit =
            new JcrCompilationUnit(configcsnew JcrGroovyClassLoader(
               JcrGroovyClassLoaderProvider.class.getClassLoader()) {
               public GroovyResourceLoader getResourceLoader()
               {
                  return loader;
               }
            });
         
         for (int i = 0; i < files.lengthi++)
            cunit.addSource(files[i].getPath());
         cunit.compile(phase);
         
         List classNodes = cunit.getAST().getClasses();
         List<URLdependencies = new ArrayList<URL>(classNodes.size());
         for (Iterator iter = classNodes.iterator(); iter.hasNext();)
         {
            ClassNode classNode = (ClassNode)iter.next();
            ModuleNode module = classNode.getModule();
            if (module != null)
            {
               SourceUnit currentSunit = module.getContext();
               if (currentSunit instanceof JcrSourceUnit)
                  dependencies.add(((JcrSourceUnit)currentSunit).getUrl());
            }
         }
         
         return dependencies.toArray(new URL[dependencies.size()]);
      }
   }
   public static class JcrCompilationUnit extends CompilationUnit
   {
      public JcrCompilationUnit()
      {
         super();
      }
      public JcrCompilationUnit(CompilerConfiguration configurationCodeSource securityGroovyClassLoader loader,
         GroovyClassLoader transformLoader)
      {
         super(configurationsecurityloadertransformLoader);
      }
      public JcrCompilationUnit(CompilerConfiguration configurationCodeSource securityGroovyClassLoader loader)
      {
         super(configurationsecurityloader);
      }
      public JcrCompilationUnit(CompilerConfiguration configuration)
      {
         super(configuration);
      }
      public JcrCompilationUnit(GroovyClassLoader loader)
      {
         super(loader);
      }

      
      @Override
      public SourceUnit addSource(URL url)
      {
         return addSource(new JcrSourceUnit(urlgetErrorCollector()));
      }
   }

   
Adapter for JCR like URLs.
   public static class JcrSourceUnit extends SourceUnit
   {
      private URL url;
      public JcrSourceUnit(File sourceCompilerConfiguration configurationGroovyClassLoader loaderErrorCollector er)
      {
         super(sourceconfigurationloaderer);
      }
      public JcrSourceUnit(String nameReaderSource sourceCompilerConfiguration flagsGroovyClassLoader loader,
         ErrorCollector er)
      {
         super(namesourceflagsloaderer);
      }
      public JcrSourceUnit(String nameString sourceCompilerConfiguration configurationGroovyClassLoader loader,
         ErrorCollector er)
      {
         super(namesourceconfigurationloaderer);
      }
      public JcrSourceUnit(URL sourceCompilerConfiguration configurationGroovyClassLoader loaderErrorCollector er)
      {
         /* jCR path is in fragment of URL:
          * jcr://repository/workspace#/path */
         super("jcr".equals(source.getProtocol()) ? source.getRef() : source.getPath(), new URLReaderSource(source,
            configuration), configurationloaderer);
         this. = source;
      }
      public URL getUrl()
      {
         return ;
      }
   }
   private static class HierarchicalResourceLoader implements GroovyResourceLoader
   {
      private final GroovyResourceLoader actual;
      private final GroovyResourceLoader parent;
   
         throws MalformedURLException
      {
         this. = actual;
         this. = parent;
      }
   
      public URL loadGroovySource(String filenamethrows MalformedURLException
      {
         URL resource = null;
         if ( != null)
            resource = .loadGroovySource(filename);
         if (resource == null &&  != null)
            resource = .loadGroovySource(filename);
         return resource;
      }
   }
   /* ========================================================================== */ 
   
   {
      super(SecurityHelper.doPrivilegedAction(new PrivilegedAction<JcrGroovyClassLoader>() {
         public JcrGroovyClassLoader run()
         {
            return new JcrGroovyClassLoader(JcrGroovyClassLoaderProvider.class.getClassLoader());
         }
      }));
   }

   
   {
      if (sources == null || sources.length == 0)
         return getGroovyClassLoader();
      URL[] roots = new URL[sources.length];
      for (int i = 0; i < sources.lengthi++)
         roots[i] = sources[i].getPath();
      final GroovyClassLoader parent = getGroovyClassLoader();
      JcrGroovyClassLoader classLoader = SecurityHelper.doPrivilegedAction(new PrivilegedAction<JcrGroovyClassLoader>() {
         public JcrGroovyClassLoader run()
         {
            return new JcrGroovyClassLoader(parent);
         }
      });
      classLoader.setResourceLoader(new JcrGroovyResourceLoader(roots));
      return classLoader;
   }
New to GrepCode? Check out our FAQ X