[Yanel-commits] rev 43142 - public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet

michi at wyona.com michi at wyona.com
Fri Jun 5 15:56:16 CEST 2009


Author: michi
Date: 2009-06-05 15:56:16 +0200 (Fri, 05 Jun 2009)
New Revision: 43142

Modified:
   public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
Log:
append view descriptors refactored and some formatting

Modified: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2009-06-05 13:38:45 UTC (rev 43141)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java	2009-06-05 13:56:16 UTC (rev 43142)
@@ -362,44 +362,33 @@
             res = getResource(request, response);
             if (res != null) {
                 Element resourceElement = getResourceMetaData(res, doc, rootElement);
+                Element viewElement = (Element) resourceElement.appendChild(doc.createElement("view"));
                 if (ResourceAttributeHelper.hasAttributeImplemented(res, "Viewable", "1")) {
                     if (log.isDebugEnabled()) log.debug("Resource is viewable V1");
-                    Element viewElement = (Element) resourceElement.appendChild(doc.createElement("view"));
                     viewElement.setAttributeNS(NAMESPACE, "version", "1");
+                    appendViewDescriptors(doc, viewElement, ((ViewableV1) res).getViewDescriptors());
 
-                        // TODO: The same as for ViewableV2 ...
-                        ViewDescriptor[] vd = ((ViewableV1) res).getViewDescriptors();
-                        if (vd != null) {
-                            for (int i = 0; i < vd.length; i++) {
-                                Element descriptorElement = (Element) viewElement.appendChild(doc.createElement("descriptor"));
-                                if (vd[i].getMimeType() != null) { 
-                                    descriptorElement.appendChild(doc.createTextNode(vd[i].getMimeType()));
-                                }
-                                descriptorElement.setAttributeNS(NAMESPACE, "id", vd[i].getId());
-                            }
-                        } else {
-                            viewElement.appendChild(doc.createTextNode("No View Descriptors!"));
-                        }
-
-                        String viewId = request.getParameter(VIEW_ID_PARAM_NAME);
-                        try {
-                            view = ((ViewableV1) res).getView(request, viewId);
-                        } catch(org.wyona.yarep.core.NoSuchNodeException e) {
-                            do404(request, response, doc, e.getMessage());
-                            return;
-                        } catch(Exception e) {
-                            log.error(e.getMessage(), e);
-                            String message = e.toString();
-                            log.error(e.getMessage(), e);
-                            Element exceptionElement = (Element) rootElement.appendChild(doc.createElementNS(NAMESPACE, "exception"));
-                            exceptionElement.appendChild(doc.createTextNode(message));
-                            exceptionElement.setAttributeNS(NAMESPACE, "status", "500");
-                            response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
-                            setYanelOutput(request, response, doc);
-                            return;
+                    String viewId = request.getParameter(VIEW_ID_PARAM_NAME);
+                    try {
+                        view = ((ViewableV1) res).getView(request, viewId);
+                    } catch(org.wyona.yarep.core.NoSuchNodeException e) {
+                        do404(request, response, doc, e.getMessage());
+                        return;
+                    } catch(Exception e) {
+                        log.error(e.getMessage(), e);
+                        String message = e.toString();
+                        log.error(e.getMessage(), e);
+                        Element exceptionElement = (Element) rootElement.appendChild(doc.createElementNS(NAMESPACE, "exception"));
+                        exceptionElement.appendChild(doc.createTextNode(message));
+                        exceptionElement.setAttributeNS(NAMESPACE, "status", "500");
+                        response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+                        setYanelOutput(request, response, doc);
+                        return;
                     }
                 } else if (ResourceAttributeHelper.hasAttributeImplemented(res, "Viewable", "2")) {
                     if (log.isDebugEnabled()) log.debug("Resource is viewable V2");
+                    viewElement.setAttributeNS(NAMESPACE, "version", "2");
+                    appendViewDescriptors(doc, viewElement, ((ViewableV2) res).getViewDescriptors());
 
                     if (!((ViewableV2) res).exists()) {
                         //log.warn("No such ViewableV2 resource: " + res.getPath());
@@ -408,65 +397,48 @@
                         //return;
                     }
 
-                        String viewId = request.getParameter(VIEW_ID_PARAM_NAME);
-                        Element viewElement = (Element) resourceElement.appendChild(doc.createElement("view"));
-                        viewElement.setAttributeNS(NAMESPACE, "version", "2");
-                        ViewDescriptor[] vd = ((ViewableV2) res).getViewDescriptors();
-                        if (vd != null) {
-                            for (int i = 0; i < vd.length; i++) {
-                                Element descriptorElement = (Element) viewElement.appendChild(doc.createElement("descriptor"));
-                                if (vd[i].getMimeType() != null) {
-                                    descriptorElement.appendChild(doc.createTextNode(vd[i].getMimeType()));
-                                }
-                                descriptorElement.setAttributeNS(NAMESPACE, "id", vd[i].getId());
-                            }
-                        } else {
-                            viewElement.appendChild(doc.createTextNode("No View Descriptors!"));
-                        }
+                    size = ((ViewableV2) res).getSize();
+                    Element sizeElement = (Element) resourceElement.appendChild(doc.createElement("size"));
+                    sizeElement.appendChild(doc.createTextNode(String.valueOf(size)));
 
 
-                        size = ((ViewableV2) res).getSize();
-                        Element sizeElement = (Element) resourceElement.appendChild(doc.createElement("size"));
-                        sizeElement.appendChild(doc.createTextNode(String.valueOf(size)));
 
-
-
-                        try {
-                            String revisionName = request.getParameter(YANEL_RESOURCE_REVN);
-                            // NOTE: Check also if usecase is not roll-back, because roll-back is also using the yanel.resource.revision
-                            if (revisionName != null && ResourceAttributeHelper.hasAttributeImplemented(res, "Versionable", "2") && !isRollBack(request)) {
-                                view = ((VersionableV2) res).getView(viewId, revisionName);
-                            } else if (ResourceAttributeHelper.hasAttributeImplemented(res, "Workflowable", "1") && environment.getStateOfView().equals(StateOfView.LIVE)) {
-
-                                // TODO: Check if resource actually exists, because even it doesn't exist, the workflowable interfaces can return something although it doesn't really make sense. For example if a resource type is workflowable, but it has no workflow associated with it, then WorkflowHelper.isLive will nevertheless return true, whereas WorkflowHelper.getLiveView will throw an exception!
-                                // TODO: Check first on Viewable and sub-nest/move this "else if" into the "else" below!
-                                WorkflowableV1 workflowable = (WorkflowableV1)res;
-                                if (workflowable.isLive()) {
-                                    view = workflowable.getLiveView(viewId);
-                                } else {
-                                    String message = "The resource '" + res.getPath() + "' is WorkflowableV1, but has not been published yet. Instead the live version, the most recent version will be displayed!";
-                                    log.warn(message);
-                                    view = ((ViewableV2) res).getView(viewId);
-
-                                    // TODO: Maybe sending a 404 instead the most recent version should be configurable!
-                                    /*
-                                    do404(request, response, doc, message);
-                                    return;
-                                    */
-                                }
+                    String viewId = request.getParameter(VIEW_ID_PARAM_NAME);
+                    try {
+                        String revisionName = request.getParameter(YANEL_RESOURCE_REVN);
+                        // NOTE: Check also if usecase is not roll-back, because roll-back is also using the yanel.resource.revision
+                        if (revisionName != null && ResourceAttributeHelper.hasAttributeImplemented(res, "Versionable", "2") && !isRollBack(request)) {
+                            view = ((VersionableV2) res).getView(viewId, revisionName);
+                        } else if (ResourceAttributeHelper.hasAttributeImplemented(res, "Workflowable", "1") && environment.getStateOfView().equals(StateOfView.LIVE)) {
+                            // TODO: Check if resource actually exists, because even it doesn't exist, the workflowable interfaces can return something although it doesn't really make sense. For example if a resource type is workflowable, but it has no workflow associated with it, then WorkflowHelper.isLive will nevertheless return true, whereas WorkflowHelper.getLiveView will throw an exception!
+                            // TODO: Check first on Viewable and sub-nest/move this "else if" into the "else" below!
+                            WorkflowableV1 workflowable = (WorkflowableV1)res;
+                            if (workflowable.isLive()) {
+                                view = workflowable.getLiveView(viewId);
                             } else {
+                                String message = "The resource '" + res.getPath() + "' is WorkflowableV1, but has not been published yet. Instead the live version, the most recent version will be displayed!";
+                                log.warn(message);
                                 view = ((ViewableV2) res).getView(viewId);
+
+                                // TODO: Maybe sending a 404 instead the most recent version should be configurable!
+                                /*
+                                do404(request, response, doc, message);
+                                return;
+                                */
                             }
-                        } catch(org.wyona.yarep.core.NoSuchNodeException e) {
-                            String message = "" + e;
-                            log.warn(message);
-                            do404(request, response, doc, message);
-                            return;
-                        } catch(org.wyona.yanel.core.ResourceNotFoundException e) {
-                            String message = "" + e;
-                            log.warn(message);
-                            do404(request, response, doc, message);
-                            return;
+                        } else {
+                            view = ((ViewableV2) res).getView(viewId);
+                        }
+                    } catch(org.wyona.yarep.core.NoSuchNodeException e) {
+                        String message = "" + e;
+                        log.warn(message);
+                        do404(request, response, doc, message);
+                        return;
+                    } catch(org.wyona.yanel.core.ResourceNotFoundException e) {
+                        String message = "" + e;
+                        log.warn(message);
+                        do404(request, response, doc, message);
+                        return;
                     }
                 } else { // NO Viewable interface implemented!
                     String message = res.getClass().getName() + " is not viewable! (" + res.getPath() + ", " + res.getRealm() + ")";
@@ -2288,4 +2260,21 @@
         Element userManagerElement = (Element) identityManagerElement.appendChild(doc.createElementNS(NAMESPACE, "user-manager"));
         return resourceElement;
     }
+
+    /**
+     * Append view descriptors to meta
+     */
+    private void appendViewDescriptors(Document doc, Element viewElement, ViewDescriptor[] vd) {
+        if (vd != null) {
+            for (int i = 0; i < vd.length; i++) {
+                Element descriptorElement = (Element) viewElement.appendChild(doc.createElement("descriptor"));
+                if (vd[i].getMimeType() != null) {
+                    descriptorElement.appendChild(doc.createTextNode(vd[i].getMimeType()));
+                }
+                descriptorElement.setAttributeNS(NAMESPACE, "id", vd[i].getId());
+            }
+        } else {
+            viewElement.appendChild(doc.createTextNode("No View Descriptors!"));
+        }
+    }
 }



More information about the Yanel-commits mailing list