[Yanel-commits] rev 21998 - public/yanel/trunk/src/core/java/org/wyona/yanel/core

michi at wyona.com michi at wyona.com
Mon Jan 22 12:06:39 CET 2007


Author: michi
Date: 2007-01-22 12:06:38 +0100 (Mon, 22 Jan 2007)
New Revision: 21998

Modified:
   public/yanel/trunk/src/core/java/org/wyona/yanel/core/Resource.java
   public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceManager.java
Log:
check on resource configuration first

Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/core/Resource.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/core/Resource.java	2007-01-22 10:58:15 UTC (rev 21997)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/core/Resource.java	2007-01-22 11:06:38 UTC (rev 21998)
@@ -27,6 +27,7 @@
 
     protected ResourceTypeDefinition rtd;
     protected ResourceTypeIdentifier rti;
+    protected ResourceConfiguration rc;
     protected Yanel yanel;
     private Path path;
     protected Realm realm;
@@ -113,6 +114,10 @@
         this.rti = rti;
     }
 
+    public void setConfiguration(ResourceConfiguration rc) {
+        this.rc = rc;
+    }
+
     public HttpServletRequest getRequest() {
         return request;
     }

Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceManager.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceManager.java	2007-01-22 10:58:15 UTC (rev 21997)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceManager.java	2007-01-22 11:06:38 UTC (rev 21998)
@@ -73,16 +73,48 @@
     }
 
     /**
+     * Creates a new resource object in the given realm with the given path and the given type.
+     *
+     * @param path Path relative to realm (e.g. yanel.getMap().getPath(realm, request.getServletPath()))
+     */
+    public Resource getResource(HttpServletRequest request, HttpServletResponse response, Realm realm, Path path, ResourceConfiguration rc) throws Exception {
+        ResourceTypeDefinition rtd = rtRegistry.getResourceTypeDefinition(rc.getUniversalName());
+
+        String universalName = rtd.getResourceTypeUniversalName();
+        if (rtd != null) {
+            Resource resource = (Resource) Class.forName(rtd.getResourceTypeClassname()).newInstance();
+
+            resource.setRTD(rtd);
+            resource.setYanel(Yanel.getInstance());
+            resource.setRealm(realm);
+            resource.setPath(path);
+            resource.setConfiguration(rc);
+            resource.setRequest(request);
+            resource.setResponse(response);
+            
+            return resource;
+        } else {
+            log.error("No such resource type registered: " + universalName);
+            return null;
+        }
+    }
+
+    /**
      * Creates a new resource object in the given realm and with the given path.
      *
      * @param path Path relative to realm (e.g. yanel.getMap().getPath(realm, request.getServletPath()))
      */
-    public Resource getResource(HttpServletRequest request, HttpServletResponse response, 
-            Realm realm, Path path) throws Exception {
+    public Resource getResource(HttpServletRequest request, HttpServletResponse response, Realm realm, Path path) throws Exception {
+        if (realm.getRTIRepository().exists(path.getRCPath())) {
+        ResourceConfiguration rc = new ResourceConfiguration(realm.getRTIRepository().getReader(path.getRCPath()));
+        if (rc != null) return getResource(request, response, realm, path, rc);
+        }
+
+        // Fallback to deprecated RTI
+        log.warn("DEPRECATED: RTI should be replaced by ResourceConfiguration: " + realm + ", " + path);
         ResourceTypeIdentifier rti = getResourceTypeIdentifier(realm, path);
         ResourceTypeDefinition rtd = rtRegistry.getResourceTypeDefinition(rti.getUniversalName());
-        Resource resource = getResource(request, response, realm, path, rtd, rti);
-        return resource;
+        return getResource(request, response, realm, path, rtd, rti);
     }
 
     /**
@@ -100,6 +132,4 @@
             return new ResourceTypeIdentifier("<{http://www.wyona.org/yanel/resource/1.0}file/>", null);
         } 
     }
-    
-
 }




More information about the Yanel-commits mailing list