You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2001/04/25 02:03:07 UTC

cvs commit: jakarta-jetspeed/src/java/org/apache/jetspeed/services/profiler ProfileManagerService.java ProfileManager.java JetspeedProfileManagerService.java

taylor      01/04/24 17:03:07

  Modified:    src/java/org/apache/jetspeed/services/profiler
                        ProfileManagerService.java ProfileManager.java
                        JetspeedProfileManagerService.java
  Log:
  - implemented NLS support using directories (not suffixes)
  - the anonymous directory is now hardcoded to psml/anon as per Santiago's suggestion
  - improved newAccount/creation of default resource
  - tested with customizer, seems to work for html
  - still need to test more for wml support
  
  Revision  Changes    Path
  1.8       +54 -8     jakarta-jetspeed/src/java/org/apache/jetspeed/services/profiler/ProfileManagerService.java
  
  Index: ProfileManagerService.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/profiler/ProfileManagerService.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ProfileManagerService.java	2001/03/07 06:49:00	1.7
  +++ ProfileManagerService.java	2001/04/25 00:03:06	1.8
  @@ -67,7 +67,7 @@
    * 
    * @see org.apache.jetspeed.om.profile.Profile
    * @author <a href="mailto:david@bluesunrise.com">David Sean Taylor</a>
  - * @version $Id: ProfileManagerService.java,v 1.7 2001/03/07 06:49:00 taylor Exp $
  + * @version $Id: ProfileManagerService.java,v 1.8 2001/04/25 00:03:06 taylor Exp $
    */
   
   public interface ProfileManagerService extends Service
  @@ -83,8 +83,8 @@
        * @param rundata the rundata object for the current request
        * @return a Profile object if found by the manager or null
        */
  -    public Profile getProfile(RunData rundata, CapabilityMap cm);
  -
  +    public Profile getProfile(RunData rundata, CapabilityMap cm)
  +        throws ProfileException;
        /**
         * sets a profile as the current profile for this session
         *
  @@ -100,7 +100,8 @@
        * @param rundata the rundata object for the current request
        * @return a new Profile object
        */
  -    public Profile getProfile(RunData rundata);
  +    public Profile getProfile(RunData rundata)
  +                throws ProfileException;
   
       /**
        * get the Profile object using the Rundata state and capability map
  @@ -109,7 +110,8 @@
        * @param rundata the rundata object for the current request
        * @return a new Profile object
        */
  -    public Profile getProfile(RunData data, MimeType mt);
  +    public Profile getProfile(RunData data, MimeType mt)
  +        throws ProfileException;
   
        /**
         * gets the current profile for this session
  @@ -117,7 +119,8 @@
         * @param rundata the rundata object for the current request
         * @param profile the profile object to set in the session context
         */
  -    public Profile getSessionProfile(RunData rundata);
  +    public Profile getSessionProfile(RunData rundata)
  +        throws ProfileException;
   
       /**
        *  create a user profile and its resources (psml) for a new user
  @@ -127,14 +130,15 @@
        * @return a new Profile object
        */
       public Profile createUserProfile(RunData rundata, String userName)
  -        throws IOException;
  +        throws IOException, ProfileException;
   
        /**
         * stores a cookie in response to the current resource
         *
         * @param rundata the rundata object for the current request
         */
  -     public DynamicURI makeDynamicURI( RunData data );
  +     public DynamicURI makeDynamicURI( RunData data )
  +        throws ProfileException;
   
        /**
         * stores a cookie in response to the current resource
  @@ -142,5 +146,47 @@
         * @param rundata the rundata object for the current request
         */
        public void storeCookie(RunData rundata);
  +
  +    /**
  +     *  turn on/off security checking when accessing profile resources
  +     *
  +     * @param flag indicates to turn security on with true, off with false.
  +     */
  +    public void setSecurity( boolean flag );
  +
  +    /**
  +     *  get status of security checking when accessing profile resources
  +     *
  +     * @return the security-checking status: true in on, false is off
  +     */
  +    public boolean getSecurity();
  +
  +    /**
  +     *  turn on/off NLS (language support) when accessing profile resources
  +     *
  +     * @param flag indicates to turn NLS on with true, off with false.
  +     */
  +    public void setLanguageProfiling( boolean flag );
  +
  +    /**
  +     *  get status of NLS (language support) when accessing profile resources
  +     *
  +     * @return the language profiling status: true in on, false is off
  +     */
  +    public boolean getLanguageProfiling();
  +
  +    /**
  +     *  turn on/off caching of resource names
  +     *
  +     * @param flag indicates to turn caching on with true, off with false.
  +     */
  +    public void setResourceNameCaching( boolean flag );
  +
  +    /**
  +     *  get status of caching of resource names
  +     *
  +     * @return the resource caching status: true in on, false is off
  +     */
  +    public boolean getResourceNameCaching();
   
   }
  
  
  
  1.8       +72 -9     jakarta-jetspeed/src/java/org/apache/jetspeed/services/profiler/ProfileManager.java
  
  Index: ProfileManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/profiler/ProfileManager.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ProfileManager.java	2001/03/07 06:48:59	1.7
  +++ ProfileManager.java	2001/04/25 00:03:06	1.8
  @@ -70,7 +70,7 @@
    * @see org.apache.jetspeed.services.profiler.Profiler
    * @see org.apache.jetspeed.services.profiler.ProfilerManagerService
    * @author <a href="mailto:david@bluesunrise.com">David Sean Taylor</a>
  - * @version $Id: ProfileManager.java,v 1.7 2001/03/07 06:48:59 taylor Exp $
  + * @version $Id: ProfileManager.java,v 1.8 2001/04/25 00:03:06 taylor Exp $
    */
   public class ProfileManager
   {
  @@ -79,7 +79,8 @@
        * Commodity method for getting a reference to the service
        * singleton
        */
  -    private static ProfileManagerService getService() {
  +    private static ProfileManagerService getService()
  +    {
           return (ProfileManagerService)TurbineServices
                   .getInstance()
                   .getService(ProfileManagerService.SERVICE_NAME);
  @@ -88,14 +89,18 @@
       /**
        * @see ProfileManagerService#getProfile
        */
  -    public static Profile getProfile(RunData rundata, CapabilityMap cm) {
  +    public static Profile getProfile(RunData rundata, CapabilityMap cm)
  +        throws ProfileException
  +    {
          return getService().getProfile( rundata, cm );
       }
   
       /**
        * @see ProfileManagerService#getProfile
        */
  -    public static Profile getProfile(RunData rundata) {
  +    public static Profile getProfile(RunData rundata)
  +        throws ProfileException
  +    {
          return getService().getProfile( rundata );
       }
   
  @@ -103,6 +108,7 @@
        * @see ProfileManagerService#getProfile
        */
       public static Profile getProfile(RunData data, MimeType mt)
  +        throws ProfileException
       {
           return getService().getProfile( data, mt );
       }
  @@ -110,14 +116,17 @@
       /**
        * @see ProfileManagerService#setSessionProfile
        */
  -    public static void setSessionProfile(RunData rundata, Profile profile) {
  +    public static void setSessionProfile(RunData rundata, Profile profile)
  +    {
           getService().setSessionProfile( rundata, profile );
       }
   
       /**
        * @see ProfileManagerService#getSessionProfile
        */
  -    public static Profile getSessionProfile(RunData rundata) {
  +    public static Profile getSessionProfile(RunData rundata)
  +        throws ProfileException
  +    {
           return getService().getSessionProfile( rundata );
       }
   
  @@ -125,7 +134,7 @@
        * @see ProfileManagerService#getSessionProfile
        */
       public static Profile createUserProfile(RunData rundata, String userName)
  -        throws IOException
  +        throws IOException, ProfileException
       {
           return getService().createUserProfile( rundata, userName );
       }
  @@ -133,12 +142,66 @@
       /**
        * @see ProfileManagerService#storeCookie
        */
  -    public static void storeCookie(RunData rundata) {
  +    public static void storeCookie(RunData rundata)
  +    {
          getService().storeCookie( rundata );
       }
   
  -     public static DynamicURI makeDynamicURI( RunData data ) {
  +    /**
  +     * @see ProfileManagerService#makeDynamicURI
  +     */
  +     public static DynamicURI makeDynamicURI( RunData data )
  +        throws ProfileException
  +     {
           return getService().makeDynamicURI( data );
        }
  +
  +    /**
  +     * @see ProfileManagerService#setSecurity
  +     */
  +    public void setSecurity( boolean flag )
  +    {
  +        getService().setSecurity(flag);
  +    }
  +
  +    /**
  +     * @see ProfileManagerService#getSecurity
  +     */
  +    public boolean getSecurity()
  +    {
  +        return getService().getSecurity();
  +    }
  +
  +    /**
  +     * @see ProfileManagerService#setLanguageProfiling
  +     */
  +    public void setLanguageProfiling( boolean flag )
  +    {
  +        getService().setLanguageProfiling(flag);
  +    }
  +
  +    /**
  +     * @see ProfileManagerService#getLanguageProfiling
  +     */
  +    public boolean getLanguageProfiling()
  +    {
  +        return getService().getLanguageProfiling();
  +    }
  +
  +    /**
  +     * @see ProfileManagerService#setResourceNameCaching
  +     */
  +    public void setResourceNameCaching( boolean flag )
  +    {
  +        getService().setResourceNameCaching(flag);
  +    }
  +
  +    /**
  +     * @see ProfileManagerService#getResourceNameCaching
  +     */
  +    public boolean getResourceNameCaching()
  +    {
  +        return getService().getResourceNameCaching();
  +    }
   
   }
  
  
  
  1.15      +209 -65   jakarta-jetspeed/src/java/org/apache/jetspeed/services/profiler/JetspeedProfileManagerService.java
  
  Index: JetspeedProfileManagerService.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/profiler/JetspeedProfileManagerService.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- JetspeedProfileManagerService.java	2001/04/20 07:34:34	1.14
  +++ JetspeedProfileManagerService.java	2001/04/25 00:03:06	1.15
  @@ -76,11 +76,18 @@
   import org.apache.turbine.util.DynamicURI;
   import org.apache.turbine.om.security.User;
   import org.apache.turbine.services.servlet.TurbineServlet;
  +import org.apache.turbine.services.localization.LocaleDetector;
  +import org.apache.turbine.services.resources.TurbineResources;
   
   //java stuff
  -import java.util.*;
  -import java.io.*;
  -import java.net.*;
  +import java.util.Map;
  +import java.util.HashMap;
  +import java.util.Enumeration;
  +import java.util.Locale;
  +import java.io.File;
  +import java.io.IOException;
  +import java.net.URL;
  +import java.net.MalformedURLException;
   import java.lang.reflect.Method;
   import javax.servlet.ServletConfig;
   
  @@ -93,8 +100,6 @@
    * <p>This service expects these properties to be set for correct operation:
    * <dl>
    *    <dt>root</dt><dd>The webapp rel. path to the root profiling directory</dd>
  - *    <dt>anon.dir</dt><dd>The webapp relative path to directory used for
  - *     anonymous access</dd>
    *    <dt>resource.default</dt><dd>The default resource filename</dd>
    *    <dt>resource.ext</dt><dd>The default resource filename extension</dd>
    *    <dt>security</dt><dd>Use security flag</dd>
  @@ -104,7 +109,7 @@
    *
    * @author <a href="mailto:david@bluesunrise.com">David Sean Taylor</a>
    * @author <a href="mailto:sgala@hisitech.com">Santiago Gala</a>
  - * @version $Id: JetspeedProfileManagerService.java,v 1.14 2001/04/20 07:34:34 taylor Exp $
  + * @version $Id: JetspeedProfileManagerService.java,v 1.15 2001/04/25 00:03:06 taylor Exp $
    */
   
   public class JetspeedProfileManagerService  extends TurbineBaseService
  @@ -119,16 +124,17 @@
       public final static String TEMP_USER                = "temp_user";
       // configuration keys
       private final static String CONFIG_ROOT             = ".root";
  -    private final static String CONFIG_ANON_DIR         = ".anon.dir";
       private final static String CONFIG_RESOURCE_DEFAULT = ".resource.default";
       private final static String CONFIG_RESOURCE_EXT     = ".resource.ext";
       private final static String CONFIG_SECURITY         = ".security";
       private final static String CONFIG_LANGUAGE         = ".language";
  +    private final static String CONFIG_NAMECACHE        = ".namecache";
   
       // resource path constants
       private static final String PATH_GROUP              = "group/";
       private static final String PATH_ROLE               = "role/";
       private static final String PATH_USER               = "user/";
  +    private static final String PATH_ANON               = "anon/";
       protected static final String PATH_SEPARATOR        = "/";
       private static final String PATH_EXTENSION_DELIMITER = ".";
   
  @@ -139,13 +145,14 @@
       private final static String MSG_MISSING_PARAMETER =
           "JetspeedProfilerService initialization failed. Missing parameter:";
   
  +
       // configuration parameters
  -     String root;               // the root psml resource directory
  -     String anonDir;            // the default anonymous directory
  -     String resourceDefault;    // the default name for a resource
  -     String resourceExt;        // the default extension for a resource
  -     boolean useSecurity;       // use security features
  -     boolean useLanguage;       // use extended language mapping features
  +     String root;                   // the root psml resource directory
  +     String resourceDefault;        // the default name for a resource
  +     String resourceExt;            // the default extension for a resource
  +     boolean useSecurity = false;   // use security features
  +     boolean useLanguage = true;    // use extended language mapping features
  +     boolean useNameCache = true;   // use the cache to check existence of resources
   
       // lookup a media type based on mime-type
       private Map mediaMap = null;
  @@ -203,6 +210,66 @@
       }
   
       /**
  +     *  turn on/off security checking when accessing profile resources
  +     *
  +     * @param flag indicates to turn security on with true, off with false.
  +     */
  +    public void setSecurity( boolean flag )
  +    {
  +        useSecurity = flag;
  +    }
  +
  +    /**
  +     *  get status of security checking when accessing profile resources
  +     *
  +     * @return the security-checking status: true in on, false is off
  +     */
  +    public boolean getSecurity()
  +    {
  +        return useSecurity;
  +    }
  +
  +    /**
  +     *  turn on/off NLS (language support) when accessing profile resources
  +     *
  +     * @param flag indicates to turn NLS on with true, off with false.
  +     */
  +    public void setLanguageProfiling( boolean flag )
  +    {
  +        useLanguage = flag;
  +    }
  +
  +    /**
  +     *  get status of NLS (language support) when accessing profile resources
  +     *
  +     * @return the language profiling status: true in on, false is off
  +     */
  +    public boolean getLanguageProfiling()
  +    {
  +        return useLanguage;
  +    }
  +
  +    /**
  +     *  turn on/off caching of resource names
  +     *
  +     * @param flag indicates to turn caching on with true, off with false.
  +     */
  +    public void setResourceNameCaching( boolean flag )
  +    {
  +        useNameCache = flag;
  +    }
  +
  +    /**
  +     *  get status of caching of resource names
  +     *
  +     * @return the resource caching status: true in on, false is off
  +     */
  +    public boolean getResourceNameCaching()
  +    {
  +        return useNameCache;
  +    }
  +
  +    /**
        *  get the Profile object using the Rundata state and capability map
        *  this is the mapping functionality of the profiler
        *
  @@ -211,6 +278,7 @@
        * @return a new Profile object
        */
       public Profile getProfile(RunData rundata, CapabilityMap cm)
  +        throws ProfileException
       {
           Profile profile = getResourceURL(rundata, cm, true);
           this.setSessionProfile(rundata, profile);
  @@ -225,6 +293,7 @@
        * @return a new Profile object
        */
       public Profile getProfile(RunData rundata)
  +        throws ProfileException
       {
           CapabilityMap cm = CapabilityMapFactory.getCapabilityMap( rundata );
           Profile profile = getResourceURL(rundata, cm, true);
  @@ -240,6 +309,7 @@
        * @return a new Profile object
        */
       public Profile getProfile(RunData data, MimeType mt)
  +        throws ProfileException
       {
           CapabilityMap cm = CapabilityMapFactory.getCapabilityMap(mt.toString());
           Profile profile = getResourceURL(data, cm, false);
  @@ -266,6 +336,7 @@
         * @param profile the profile object to set in the session context
         */
       public Profile getSessionProfile(RunData rundata)
  +        throws ProfileException
       {
           // store the current profile in the session
           Profile profile = (Profile)rundata.getUser().getTemp(KEY_SESSION_PROFILE);
  @@ -284,7 +355,7 @@
        * @return a new Profile object
        */
       public Profile createUserProfile(RunData rundata, String userName)
  -        throws IOException
  +        throws IOException, ProfileException
       {
           CapabilityMap cm = CapabilityMapFactory.getCapabilityMap( rundata );
           // FIXME: this needs to be handled better for users/groups/roles
  @@ -293,7 +364,7 @@
           // get the media type from the capability map or rundata
           String mediaType = getMediaType(rundata, cm);
           BaseProfile profile = new BaseProfile();
  -        // get the target profile: by group/role/user
  +        // get the target profile
           String path = getPath(rundata, mediaType, profile);
           String resource = getResource(rundata, profile);
           String finalPath = root + path + resource;
  @@ -302,24 +373,32 @@
           if (!file.exists())
           {
               // copy from first psml resource found in fallback path
  -            Profile fallbackProfile = getResourceURL(rundata, cm, true);
  -            String  fallbackURL = fallbackProfile.getURL();
  -            String fallbackReal = null;
  +            Profile sourceProfile = getResourceURL(rundata, cm, true);
  +            String  sourceURL = sourceProfile.getURL();
  +            String sourceReal = null;
               try
               {
  -                fallbackReal = new URL(fallbackURL).getFile();
  +                sourceReal = new URL(sourceURL).getFile();
               }
               catch (MalformedURLException e)
               {
  -                fallbackReal = fallbackURL;
  +                if (sourceURL.startsWith("file:"))
  +                    sourceReal = sourceURL.substring(5);
  +                else
  +                    sourceReal = sourceURL;
               }
  +
               // make the directories and then copy it
               String parent = file.getParent();
               File filePath = new File(parent);
               filePath.mkdirs();
  -            FileCopy.copy( fallbackReal, realPath );
  +            FileCopy.copy( sourceReal, realPath );
           }
  -        profile.setURL(finalPath);
  +        URL url = TurbineServlet.getResource( finalPath );
  +        if (url != null)
  +            profile.setURL(url.toString());
  +        else
  +            profile.setURL(finalPath);
           this.setSessionProfile(rundata, profile);
           return profile;
       }
  @@ -341,6 +420,7 @@
        * @param cm the <code>CapabilityMap</code> of the current requesting device
        */
       private Profile getResourceURL(RunData rundata, CapabilityMap cm, boolean fallback)
  +        throws ProfileException
       {
           // get the media type from the capability map or rundata
           String mediaType = getMediaType(rundata, cm);
  @@ -356,39 +436,51 @@
           String original = path + resource;
           if (fallback)
           {
  -            while( (finalPath = fallback(path, resource)) == "") {
  +            while( (finalPath = fallback(rundata, path, resource)) == "") {
                   int pt = path.lastIndexOf(PATH_SEPARATOR);
                   if (-1 == pt)
                   {
                       path = "";  // look in psml root
  -                    finalPath = fallback(path, resource);
  +                    finalPath = fallback(rundata, path, resource);
                       if (finalPath == "")
                       {
  -                        String error = "Failed to find resource for " + original;
  -                        Log.error(error);
  -                        return profile;
  -                        //throw new ProfileException(error);
  +                        String errorMessage = "Failed to find resource for " + original;
  +                        throw new ProfileException(errorMessage);
                       }
                       break; // found default resource in root
                   }
  +                int length = path.length();
  +                if (pt == length - 1 && length > 1)
  +                {
  +                    //pt = pt - 1;
  +                    path = path.substring(0, pt);
  +                    pt = path.lastIndexOf(PATH_SEPARATOR);
  +                }
                   path = path.substring(0, pt);
               }
           }
           else
           {
  -            finalPath = fallback(path, resource);
  +            finalPath = fallback(rundata, path, resource);
               if (finalPath.length() == 0)
               {
                   finalPath = root + original;
  -                String url = TurbineServlet.getResource( finalPath ).toString();
  -                profile.setURL(url);
  +                URL url = TurbineServlet.getResource( finalPath );
  +                if (url != null)
  +                    profile.setURL(url.toString());
  +                else
  +                    profile.setURL(finalPath);
                   return profile;
               }
           }
           // TODO: ACL security
   
  -        String url = TurbineServlet.getResource( finalPath ).toString();
  -        profile.setURL(url);
  +         URL url = TurbineServlet.getResource( finalPath );
  +         if (url != null)
  +             profile.setURL(url.toString());
  +         else
  +             profile.setURL(finalPath);
  +
           return profile;
       }
   
  @@ -402,7 +494,9 @@
       protected String getPath(RunData rundata, String mediaType, BaseProfile profile)
       {
           if (null == rundata)
  -            return anonDir;
  +        {
  +            return PATH_ANON;
  +        }
   
           User user = rundata.getUser();
   
  @@ -435,14 +529,7 @@
                   }
                   else  // anonymous
                   {
  -                    path.append( anonDir );
  -                    String userName = rundata.getParameters().getString( TEMP_USER );
  -                    if (userName != null)
  -                    {
  -                        path.append(PATH_USER);
  -                        path.append(userName);
  -                        path.append(PATH_SEPARATOR);
  -                    }
  +                   path.append( PATH_ANON );
                   }
   
               }
  @@ -487,12 +574,6 @@
   
           String param = rundata.getParameters().getString( PARAM_PAGE );
   
  -        // TODO: language specific resources
  -        if (useLanguage) {
  -            String language = rundata.getRequest().getHeader("Accept-Language");
  -            //System.out.println("Language = " + language );
  -        }
  -
           if (null == param) {
              // the default resource
               resource.append( resourceDefault );
  @@ -516,24 +597,92 @@
        * @parameter path to the resource
        * @return a String the modified path to the resource based on fallback
        */
  -    protected String fallback(String path, String resource)
  +    protected String fallback(RunData rundata, String path, String resource)
       {
           StringBuffer fullPath = new StringBuffer( root );
   
           fullPath.append(path);
           if (!path.endsWith(PATH_SEPARATOR))
               fullPath.append(PATH_SEPARATOR);
  +
  +        // search for language specific resources at each level
  +        if (useLanguage && rundata != null) {
  +            //String language = rundata.getRequest().getHeader("Accept-Language");
  +            //System.out.println("**** Language = " + language );
  +            Locale locale = (Locale)rundata.getUser().getTemp("locale");
  +            if (locale == null)
  +            {
  +                  // Get the locale store it in the user object
  +                  locale = LocaleDetector.getLocale(rundata);
  +                  if (locale == null)
  +                  {
  +                      locale = new Locale(
  +                               TurbineResources.getString("locale.default.language", "en"),
  +                               TurbineResources.getString("locale.default.country", "US"));
  +                  }
  +                  rundata.getUser().setTemp("locale", locale);
  +            }
  +            String language = locale.getLanguage();
  +            String country = locale.getCountry();
  +            int count = 0;
  +            StringBuffer langPath = new StringBuffer();
  +            langPath.append( fullPath.toString() );
  +            if ((language != null) && (language.length() > 0))
  +            {
  +                langPath.append(language).append("/");
  +                count++;
  +            }
  +            if ((country != null) && (country.length() > 0))
  +            {
  +                langPath.append(country).append("/");
  +                count++;
  +            }
  +            String basePath = langPath.toString();
  +            String realPath, workingPath;
  +
  +            for ( ; count > 0 ; count--)
  +            {
  +               workingPath = basePath + resource;
  +               realPath = TurbineServlet.getRealPath( workingPath );
  +               if (resourceExists(realPath))
  +                   return workingPath;
  +                int pt = basePath.lastIndexOf(PATH_SEPARATOR);
  +                int length = basePath.length();
  +                if (-1 == pt)
  +                    break;
  +                if (pt == length - 1 && length > 1)
  +                {
  +                    //pt = pt - 1;
  +                    basePath = basePath.substring(0, pt);
  +                    pt = basePath.lastIndexOf(PATH_SEPARATOR);
  +                }
  +                basePath = basePath.substring(0, pt);
  +                basePath = basePath + PATH_SEPARATOR;
  +            }
  +        }
  +
           fullPath.append(resource);
           String realPath = TurbineServlet.getRealPath( fullPath.toString() );
  -
  -        if (resourceMap.containsKey(realPath))
  +    
  +        if (resourceExists(realPath))
               return fullPath.toString();  // found as is
   
  -        // TODO: language fallback
  -
           return "";
       }
   
  +    /**
  +     * checks for the existence of a resource given a key
  +     *
  +     * @parameter key the resource name.
  +     */
  +    public boolean resourceExists(String resourceKey)
  +    {
  +        if (useNameCache == true)
  +        {
  +            return resourceMap.containsKey(resourceKey);
  +        }
  +        return (new File(resourceKey).exists());
  +    }
   
       /**
        * initialize the mime-type-to-media-type map
  @@ -613,16 +762,6 @@
           if (!root.endsWith(PATH_SEPARATOR))
               root = root + PATH_SEPARATOR;
   
  -        anonDir = JetspeedResources.getString(TurbineServices.SERVICE_PREFIX
  -                                               + ProfileManagerService.SERVICE_NAME
  -                                               + CONFIG_ANON_DIR);
  -        if (anonDir == null)
  -            anonDir = new String("");
  -        else {
  -            if (anonDir.startsWith(PATH_SEPARATOR))
  -                anonDir = anonDir.substring(1);
  -        }
  -
           resourceDefault = JetspeedResources.getString(TurbineServices.SERVICE_PREFIX
                                                  + ProfileManagerService.SERVICE_NAME
                                                  + CONFIG_RESOURCE_DEFAULT);
  @@ -649,7 +788,11 @@
           useLanguage = JetspeedResources.getBoolean(TurbineServices.SERVICE_PREFIX
                                                  + ProfileManagerService.SERVICE_NAME
                                                  + CONFIG_LANGUAGE,
  -                                               false);
  +                                               true);
  +        useNameCache = JetspeedResources.getBoolean(TurbineServices.SERVICE_PREFIX
  +                                               + ProfileManagerService.SERVICE_NAME
  +                                               + CONFIG_NAMECACHE,
  +                                               true);
       }
   
       /**
  @@ -727,9 +870,10 @@
         * @return new dynamic URI with full path
         */
       public DynamicURI makeDynamicURI( RunData data )
  +        throws ProfileException
       {
           DynamicURI uri = new DynamicURI( data );
  -        BaseProfile profile = (BaseProfile)ProfileManager.getSessionProfile(data);
  +        BaseProfile profile = (BaseProfile)getSessionProfile(data);
           String group = profile.getGroup();
           if (null != group)
               uri.addPathInfo(PARAM_GROUP, group);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jetspeed-dev-help@jakarta.apache.org