Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2009 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.resource;
 
 
 import java.net.URI;
 import java.net.URL;
Created by The eXo Platform SAS .

Author(s):
Gennady Azarenkov
Version:
$Id: $
 
 
 public class UnifiedNodeReference
 {
 
    public static final String JCR_SCHEME = "jcr";
 
    private String userInfo;
 
    private String repository;
 
    private String workspace;
 
    private Identifier id;
 
    private String path;
 
    private static URLStreamHandler handler;
 
    private static final Log LOG = ExoLogger.getLogger("org.exoplatform.services.jcr.ext.resource.UnifiedNodeReference");
 
    {
       this(new URL(nullspecgetURLStreamHandler()));
    }
 
    public UnifiedNodeReference(final URL urlthrows URISyntaxException
    {
       this(url.toURI());
    }
 
    public UnifiedNodeReference(final URI urithrows URISyntaxException
    {
 
       String scheme = uri.getScheme();
       if (uri.getScheme() == null)
          scheme = ;
       if (!scheme.equals())
          throw new URISyntaxException(scheme"Only 'jcr' scheme is acceptable!");
 
        = uri.getUserInfo();
 
        = uri.getHost();
 
        = parseWorkpace(uri);
 
       String fragment = uri.getFragment();
       if (fragment != null)
       {
          if (fragment.startsWith("/"))
             this. = fragment;
          else
             this. = new Identifier(uri.getFragment());
       }
       else
          throw new URISyntaxException(fragment"Neither Path nor Identifier defined!");
 
    }
 
    public UnifiedNodeReference(final URI urifinal String defaultRepositoryfinal String defaultWorkspace)
       throws URISyntaxException
    {
      String scheme = uri.getScheme();
      if (uri.getScheme() == null)
         scheme = ;
      if (!scheme.equals())
         throw new URISyntaxException(scheme"Only 'jcr' scheme is acceptable!");
       = uri.getUserInfo();
       = uri.getHost();
      if ( == null)
          = defaultRepository;
       = parseWorkpace(uri);
      if ( == null || .length() == 0)
          = defaultWorkspace;
      String fragment = uri.getFragment();
      if (fragment != null)
      {
         if (fragment.startsWith("/"))
            this. = fragment;
         else
            this. = new Identifier(uri.getFragment());
      }
      else
         throw new URISyntaxException(fragment"Neither Path nor Identifier defined!");
   }
   public UnifiedNodeReference(final String repositoryfinal String workspacefinal Identifier identifier)
   {
      this. = repository;
      this. = workspace;
      this. = identifier;
   }
   public UnifiedNodeReference(final String repositoryfinal String workspacefinal String path)
   {
      this. = repository;
      this. = workspace;
      this. = path;
   }

   

Returns:
the repository name.
   public String getRepository()
   {
      return ;
   }

   

Returns:
the workspace name.
   public String getWorkspace()
   {
      return ;
   }

   

Returns:
the node identifier.
   {
      return ;
   }

   

Returns:
true if UUID used as node identifier.
   public boolean isIdentitifier()
   {
      return  != null;
   }

   

Returns:
the node path.
   public String getPath()
   {
      return ;
   }

   

Returns:
true if full path used as node identifier.
   public boolean isPath()
   {
      return  != null;
   }

   

Returns:
the user info part of URL, it looks like user:pass.
   public String getUserInfo()
   {
      return ;
   }

   

Returns:
the URI of node.
Throws:
java.net.URISyntaxException
   public URI getURI() throws URISyntaxException
   {
      if ( != null)
         return new URI(, -1, '/' + null.getString());
      else if ( != null)
         return new URI(, -1, '/' + null);
      throw new URISyntaxException("""Path or Idenfifier is not defined!");
   }

   

Returns:
the URL of node.
Throws:
java.net.MalformedURLException
   public URL getURL() throws MalformedURLException
   {
      URI uri;
      try
      {
         uri = getURI();
      }
      catch (URISyntaxException e)
      {
         throw new MalformedURLException();
      }
      try
      {
         return new URL(uri.toString());
      }
      catch (MalformedURLException e)
      {
         // If handler can't be found by java.net.URL#getStreamHandler()
         return new URL(nulluri.toString(), getURLStreamHandler());
      }
   }

   

Returns:
the handler for protocol jcr.
See also:
java.net.URLStreamHandler.
   public static URLStreamHandler getURLStreamHandler()
   {
      if ( != null)
         return ;
      // use Class#forName(), instead created by 'new' to be sure handler
      // was started and set required system property.
      // Usually this job must be done by java.net.URL, but it does
      // not work in web container. Under tomcat class of handler can't be found in
      // $CATALINA_HOME/lib/*.jar. Probably the same problem can be under AS.
      String packagePrefixList = PrivilegedSystemHelper.getProperty("java.protocol.handler.pkgs");
      if (packagePrefixList == null)
         return null;
      StringTokenizer packagePrefixIter = new StringTokenizer(packagePrefixList"|");
      while ( == null && packagePrefixIter.hasMoreTokens())
      {
         String packagePrefix = packagePrefixIter.nextToken().trim();
         try
         {
            String clsName = packagePrefix + "." +  + ".Handler";
            Class<?> cls = null;
            try
            {
               cls = Class.forName(clsName);
            }
            catch (ClassNotFoundException e1)
            {
               try
               {
                  // try do it with context ClassLoader
                  ClassLoader cl = Thread.currentThread().getContextClassLoader();
                  cls = cl.loadClass(clsName);
               }
               catch (ClassNotFoundException e2)
               {
                  // last chance, try use system ClasLoader
                  ClassLoader cl = ClassLoader.getSystemClassLoader();
                  if (cl != null)
                  {
                     cls = cl.loadClass(clsName);
                  }
               }
            }
            if (cls != null)
            {
                = (URLStreamHandler)cls.newInstance();
            }
         }
         catch (ExceptionInInitializerError e)
         {
            // exceptions can get thrown here if class not be loaded y system ClassLoader
            // or if class can't be instantiated.
            if (.isTraceEnabled())
                           {
               .trace("An exception occurred: " + e.getMessage());
            }
         }
         catch (SecurityException e)
         {
            // exceptions can get thrown here if class not be loaded y system ClassLoader
            // or if class can't be instantiated.
            if (.isTraceEnabled())
            {
               .trace("An exception occurred: " + e.getMessage());
            }
         }
         catch (ClassNotFoundException e)
         {
            // exceptions can get thrown here if class not be loaded y system ClassLoader
            // or if class can't be instantiated.
            if (.isTraceEnabled())
            {
               .trace("An exception occurred: " + e.getMessage());
            }
         }
         catch (InstantiationException e)
         {
            // exceptions can get thrown here if class not be loaded y system ClassLoader
            // or if class can't be instantiated.
            if (.isTraceEnabled())
            {
               .trace("An exception occurred: " + e.getMessage());
            }
         }
         catch (IllegalAccessException e)
         {
            // exceptions can get thrown here if class not be loaded y system ClassLoader
            // or if class can't be instantiated.
            if (.isTraceEnabled())
            {
               .trace("An exception occurred: " + e.getMessage());
            }
         }
      }
      return ;
   }
   private static String parseWorkpace(URI uri)
   {
      String path = uri.getPath();
      int sl = path.indexOf('/', 1);
      if (sl <= 0)
         return path.substring(1);
      return path.substring(1, sl);
   }
New to GrepCode? Check out our FAQ X