[Yanel-commits] rev 20258 - in public/yanel/trunk/src/core/java/org/wyona/yanel: core/api/attributes servlet

michi at wyona.com michi at wyona.com
Thu Nov 23 15:44:17 CET 2006


Author: michi
Date: 2006-11-23 15:44:16 +0100 (Thu, 23 Nov 2006)
New Revision: 20258

Added:
   public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/CreateUsecaseHelper.java
Modified:
   public/yanel/trunk/src/core/java/org/wyona/yanel/core/api/attributes/CreatableV2.java
   public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/YanelServlet.java
Log:
creator started

Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/core/api/attributes/CreatableV2.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/core/api/attributes/CreatableV2.java	2006-11-23 14:40:54 UTC (rev 20257)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/core/api/attributes/CreatableV2.java	2006-11-23 14:44:16 UTC (rev 20258)
@@ -27,4 +27,10 @@
      *
      */
     public String getPropertyType(String propertyName);
+
+    
+    /**
+     * creates the resource
+     */
+    public void create(String path);
 }

Added: public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/CreateUsecaseHelper.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/CreateUsecaseHelper.java	2006-11-23 14:40:54 UTC (rev 20257)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/CreateUsecaseHelper.java	2006-11-23 14:44:16 UTC (rev 20258)
@@ -0,0 +1,276 @@
+/*
+ * Copyright 2006 Wyona
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.wyona.org/licenses/APACHE-LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.wyona.yanel.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.net.URL;
+
+import org.apache.log4j.Logger;
+import org.w3c.dom.Element;
+import org.wyona.yanel.core.ResourceTypeDefinition;
+import org.wyona.yanel.core.Resource;
+import org.wyona.yanel.core.ResourceTypeRegistry;
+import org.wyona.yanel.core.Yanel;
+import org.wyona.yanel.core.map.Map;
+//import org.wyona.yanel.core.map.MapFactory;
+import org.wyona.yanel.core.api.attributes.ViewableV1;
+import org.wyona.yanel.core.api.attributes.ViewableV2;
+import org.wyona.yanel.core.api.attributes.CreatableV2;
+import org.wyona.yanel.core.util.ResourceAttributeHelper;
+import org.wyona.yarep.core.Path;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 
+ */
+public class CreateUsecaseHelper {
+
+    private static Logger log = Logger.getLogger("test");
+
+    /**
+     *
+     */
+    public HttpServletResponse create(HttpServletRequest request, HttpServletResponse response) throws IOException {
+
+        String createName = request.getParameter("create.name");
+        String resourceType = request.getParameter("resource.type");
+
+        if (resourceType == null) {
+            PrintWriter w = response.getWriter();
+            w.print(resourcesTypeSelectScreen(createName));
+        } else {
+            PrintWriter w = response.getWriter();
+            w.print(createResourceScreen(createName, resourceType));
+        }
+        return response;
+
+
+
+
+
+/*
+        String create = request.getParameter("create");
+        String path = request.getRequestURI();
+
+        
+        if (create != null && create.equals("create.resource")) {
+            
+            String[] PropertyNames = null;
+
+            ResourceTypeRegistry rtr = new ResourceTypeRegistry();
+            try {
+                Resource resource = rtr.newResource(resourceType);
+                if (resource != null) {
+                    if (ResourceAttributeHelper.hasAttributeImplemented(resource, "Creatable", "2")) {
+                        PropertyNames = ((CreatableV2) resource).getPropertyNames();
+                        
+                        for (int i = 0; i < PropertyNames.length; i++) {
+                            
+                            if(PropertyNames[i].equals("Name")){
+                                ((CreatableV2) resource).create(path+"/"+request.getParameter(PropertyNames[i]));
+                            }
+                        }
+                        
+                        try {
+                            String parent = request.getRequestURL().toString().substring(0,request.getRequestURL().toString().indexOf("?"));
+                            URL url = new URL(parent+"/"+createName);
+                            
+                            response.setHeader("Location", url.toString());
+                            response.setStatus(javax.servlet.http.HttpServletResponse.SC_MOVED_PERMANENTLY);
+                            return response;
+                        } catch (Exception e) {
+                            log.error(e);
+                        }
+
+                        return response;
+                    }
+
+                }
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                String message = e.toString();
+                log.error(e.getMessage(), e);
+                // Element exceptionElement = (Element)
+                // rootElement.appendChild(doc.createElement("exception"));
+                // exceptionElement.appendChild(doc.createTextNode(message));
+                // setYanelOutput(response, doc);
+                // response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                return response;
+            }
+            
+            
+
+        }
+        // if no resourceType is available it returns the resourcesSelectScreen
+        if (resourceType == null) {
+            String resourcesSelectScreen = this.resourcesTypeSelectScreen(createName);
+
+            PrintWriter w = response.getWriter();
+            w.print(resourcesSelectScreen);
+            return response;
+        } else {
+            String resourcesCreateScreen = this.createResourceScreen(createName, resourceType);
+            if (ResourceExistsHelper.resourceExists(path)) {
+                if (createName == null) {
+                    // make child of path, ask for name
+                    System.out.println("make child of path, ask for name. resourec " + path
+                            + " exists");
+                    createResourceScreen("", resourceType);
+                } else {
+                    // create child of request path with name createName
+                    System.out.println("create child of request path with name createName. resourec "
+                            + path + " exists");
+                    createResourceScreen(createName, resourceType);
+                }
+            } else {
+                // check if parent exists
+                String parent = "";
+                if (path.lastIndexOf("/") != -1) {
+                    parent = path.substring(0, path.lastIndexOf("/"));
+                }
+                if (ResourceExistsHelper.resourceExists(parent)) {
+                    createName = path.substring(path.lastIndexOf("/"), path.length());
+                    log.debug("the requested resource (" + path
+                            + ") does not exist, will create it");
+                    // build this path
+                    System.out.println("build this path. resource " + path + " exists");
+                    createResourceScreen(createName, resourceType);
+                } else {
+                    log.debug("the requested resource (" + path
+                            + ") does not exist, even not its parent ( " + parent
+                            + " ). please create the parent first");
+                    // build this path
+                    System.out.println("the requested resource (" + path
+                            + ") does not exist, even not its parent( " + parent
+                            + " ). please create the parent first");
+                }
+            }
+            PrintWriter w = response.getWriter();
+            w.print(resourcesCreateScreen);
+            return response;
+        }
+*/
+
+    }
+
+    /**
+     * @return A XHTML page with the resource selection screen
+     */
+    public String resourcesTypeSelectScreen(String createName) {
+        StringBuffer form = new StringBuffer();
+        form.append("<?xml version=\"1.0\"?>");
+        form.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
+        form.append("<body>");
+        form.append("<form>");
+        form.append("<input type=\"hidden\" name=\"yanel.usecase\" value=\"create\"/>");
+        if (createName != null) {
+            form.append("Name: <input type=\"text\" name=\"create.name\" value=\"" + createName + "\"/>");
+        } else {
+            form.append("Name: <input type=\"text\" name=\"create.name\"/>");
+        }
+        form.append("<br/>Resource Type: <select name=\"resource.type\">");
+
+        ResourceTypeRegistry rtr = new ResourceTypeRegistry();
+        ResourceTypeDefinition[] rtds = rtr.getResourceTypeDefinitions();
+        for (int i = 0; i < rtds.length; i++) {
+            try {
+                Resource resource = rtr.newResource(rtds[i].getResourceTypeUniversalName());
+                if (resource != null && ResourceAttributeHelper.hasAttributeImplemented(resource, "Creatable", "2")) {
+                    form.append("<option value=\"" + rtds[i].getResourceTypeUniversalName() + "\">" + rtds[i].getResourceTypeLocalName() + "</option>");
+                }
+            } catch(Exception e) {
+                log.error(e);
+            }
+        }
+
+        form.append("</select>");
+        form.append("<br/><input type=\"submit\" value=\"Proceed\"/>");
+        form.append("</form>");
+        form.append("</body>");
+        form.append("</html>");
+
+        return form.toString();
+    }
+
+    /**
+     * @return a html page with the resource selction screen as a string
+     */
+    public String createResourceScreen(String createName, String rti) {
+
+        String resourcesCreateScreen = null;
+        String[] PropertyNames = null;
+
+        ResourceTypeRegistry rtr = new ResourceTypeRegistry();
+
+        try {
+            Resource resource = rtr.newResource(rti);
+            if (resource != null) {
+                if (ResourceAttributeHelper.hasAttributeImplemented(resource, "Creatable", "2")) {
+                    PropertyNames = ((CreatableV2) resource).getPropertyNames();
+                    ((CreatableV2) resource).setProperty("Name", createName);
+
+                    StringBuffer form = new StringBuffer();
+                    form.append("<?xml version=\"1.0\"?>");
+                    form.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
+                    form.append("<body>");
+                    form.append("<h1>Create new resource</h1>");
+                    form.append("Name: " + createName + "<br/>");
+                    form.append("Resource Type: " + rti + "<br/><br/>");
+                    form.append("<form>");
+                    form.append("<input type=\"hidden\" name=\"yanel.usecase\" value=\"create\"/>");
+                    form.append("<input type=\"hidden\" name=\"resource.type\" value=\""+rti+"\"/>");
+                    form.append("<input type=\"hidden\" name=\"create.name\" value=\""+createName+"\"/>");
+
+                    form.append("<input type=\"hidden\" name=\"create\" value=\"create.resource\"/>");
+
+                    for (int i = 0; i < PropertyNames.length; i++) {
+                        form.append(PropertyNames[i] + ":<input name=\"" + PropertyNames[i]
+                                + "\" value=\""
+                                + ((CreatableV2) resource).getProperty(PropertyNames[i])
+                                + "\" size=\"60\">");
+                    }
+
+                    form.append("<input type=\"submit\" value=\"Create Resource\"/>");
+                    form.append("</form>");
+                    form.append("</body>");
+                    form.append("</html>");
+
+                    resourcesCreateScreen = form.toString();
+                    return resourcesCreateScreen;
+                }
+
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            String message = e.toString();
+            log.error(e.getMessage(), e);
+            // Element exceptionElement = (Element)
+            // rootElement.appendChild(doc.createElement("exception"));
+            // exceptionElement.appendChild(doc.createTextNode(message));
+            // setYanelOutput(response, doc);
+            // response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+            return message;
+        }
+
+        return resourcesCreateScreen;
+    }
+
+}

Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/YanelServlet.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/YanelServlet.java	2006-11-23 14:40:54 UTC (rev 20257)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/servlet/YanelServlet.java	2006-11-23 14:44:16 UTC (rev 20258)
@@ -28,6 +28,7 @@
 import org.wyona.yanel.core.map.Map;
 import org.wyona.yanel.core.map.Realm;
 
+import org.wyona.yanel.servlet.CreateUsecaseHelper;
 import org.wyona.yanel.util.ResourceAttributeHelper;
 
 import org.wyona.security.core.IdentityManagerFactory;
@@ -145,10 +146,12 @@
     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // Check if a new resource shall be created ...
         String yanelUsecase = request.getParameter("yanel.usecase");
+
         if(yanelUsecase != null && yanelUsecase.equals("create")) {
-            log.warn("TODO: Create usecase not implemented yet!");
+            CreateUsecaseHelper creator = new CreateUsecaseHelper();
+            creator.create(request, response);
+            return;
         }
-
         getContent(request, response);
     }
 




More information about the Yanel-commits mailing list