[Yanel-commits] rev 30983 - in public/yanel/contributions/resources/gallery/src: build java/org/wyona/yanel/impl/resources/gallery

michi at wyona.com michi at wyona.com
Wed Jan 30 16:32:26 CET 2008


Author: michi
Date: 2008-01-30 16:32:26 +0100 (Wed, 30 Jan 2008)
New Revision: 30983

Modified:
   public/yanel/contributions/resources/gallery/src/build/dependencies.xml
   public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/Gallery.java
   public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryResource.java
   public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/SimpleGallery.java
Log:
methods updated

Modified: public/yanel/contributions/resources/gallery/src/build/dependencies.xml
===================================================================
--- public/yanel/contributions/resources/gallery/src/build/dependencies.xml	2008-01-30 15:32:18 UTC (rev 30982)
+++ public/yanel/contributions/resources/gallery/src/build/dependencies.xml	2008-01-30 15:32:26 UTC (rev 30983)
@@ -10,7 +10,7 @@
       <dependency groupId="wyona-org-yanel" artifactId="yanel-core"
                   version="${yanel.source.version}"/>
         <dependency groupId="wyona-org-yanel" artifactId="yanel-impl" version="${yanel.source.version}"/>
-        
+        <dependency groupId="javax.servlet" artifactId="servlet-api" version="2.3"/>
     </artifact:dependencies>
 
     <artifact:dependencies pathId="maven2.resource.classpath" filesetId="maven2.resource.fileset">

Modified: public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/Gallery.java
===================================================================
--- public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/Gallery.java	2008-01-30 15:32:18 UTC (rev 30982)
+++ public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/Gallery.java	2008-01-30 15:32:26 UTC (rev 30983)
@@ -28,12 +28,12 @@
     Node createItem(GenericItem item);
     
     /**
-     * @return - success or failure
+     * @return - the removed item or <code>null</code> on failure
      * */
-    boolean removeItem(GenericItem item);
+    GalleryItem removeItem(GalleryItem item);
     
     /**
-     * @return - success or failure
+     * @return - the removed item or <code>null</code> on failure
      * */
-    boolean removeItem(String id);
+    GalleryItem removeItem(String id);
 }

Modified: public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryResource.java
===================================================================
--- public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryResource.java	2008-01-30 15:32:18 UTC (rev 30982)
+++ public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/GalleryResource.java	2008-01-30 15:32:26 UTC (rev 30983)
@@ -11,11 +11,8 @@
 import java.io.Writer;
 
 import org.apache.log4j.Logger;
-import org.wyona.yanel.core.Constants;
 import org.wyona.yanel.core.Path;
-import org.wyona.yanel.core.Resource;
 import org.wyona.yanel.core.api.attributes.ModifiableV2;
-import org.wyona.yanel.core.attributes.viewable.View;
 import org.wyona.yanel.core.util.PathUtil;
 import org.wyona.yanel.impl.resources.BasicXMLResource;
 import org.wyona.yarep.core.NoSuchNodeException;
@@ -30,8 +27,8 @@
     /**
      * On delete this parameter gives the item id for deletion
      * */
-    private static final String PARAM_REMOVE_ITEM_ID = "remove.item.id";
-    private static final String ATOM_VIEW_ID = "atom";
+    public static final String PARAM_REMOVE_ITEM_ID = "remove.item.id";
+    public static final String ATOM_VIEW_ID = "atom";
     
     /**
      * Property name for the collection where galleries are situated
@@ -40,12 +37,13 @@
     
     
     /**
-     * Takes the path from property, or respective to the requested resource
+     * Takes the path from property, or respective to the requested resource.
+     * The path should end with '/'
      * */
-    protected String getGalleryPath(){
+    public String getGalleryPath(){
         String collection = null;
         try {
-            collection = getConfiguration().getProperty(GALLERIES_COLLECTION_KEY);
+            collection = getResourceConfigProperty(GALLERIES_COLLECTION_KEY);
         } catch (Exception e) {
             log.warn(e, e);
         }
@@ -74,44 +72,59 @@
             return super.getContentXML(viewId);
         }
         
-        // Generate XML
+        // Generate content
+        String content = null;
         
-        Gallery gallery = new SimpleGallery(getRealm().getRepository(), getGalleryPath());
-        
-        InputStream result = null;
         if(viewId.equals(ATOM_VIEW_ID)){
-            // Create the Atom feed
-            StringBuffer feed = new StringBuffer("<?xml version='1.0' ?>"+"\n");
-            feed.append("<feed xmlns='http://www.w3.org/2005/Atom'>"+"\n");
+            Gallery gallery = new SimpleGallery(getRealm().getRepository(), getGalleryPath());
+            content = generateGalleryAtom(gallery);
             
-            feed.append("<id>"+gallery.getId()+"</id>"+"\n");
-            feed.append("<title>"+gallery.getTitle()+"</title>"+"\n");
-            feed.append("<updated>"+gallery.getUpdated()+"</updated>"+"\n");
+            // Avoid caching of the atom feed
+            // TODO: maybe cache/no-cache should be configurable for a resource?
+            /*
+             * Cache-control: no-cache
+             * Cache-control: no-store
+             * Pragma: no-cache
+             * Expires: 0
+             */
+            getEnvironment().getResponse().setHeader("Cache-control", "no-cache");
+            getEnvironment().getResponse().setHeader("Cache-control", "no-store");
+            getEnvironment().getResponse().setHeader("Pragma", "no-cache");
+            getEnvironment().getResponse().setHeader("Expires", "0");
+        }
+        
+        return new ByteArrayInputStream(content.getBytes());
+    }
+    
+    private String generateGalleryAtom(Gallery gallery){
+        StringBuffer feed = new StringBuffer("<?xml version='1.0' ?>"+"\n");
+        feed.append("<feed xmlns='http://www.w3.org/2005/Atom'>"+"\n");
+        
+        feed.append("<id>"+gallery.getId()+"</id>"+"\n");
+        feed.append("<title>"+gallery.getTitle()+"</title>"+"\n");
+        feed.append("<updated>"+gallery.getUpdated()+"</updated>"+"\n");
+        
+        for (int i = 0; i < gallery.size(); i++) {
+            feed.append("<entry>"+"\n");
             
-            for (int i = 0; i < gallery.size(); i++) {
-                feed.append("<entry>"+"\n");
-                
-                GalleryItem entry = gallery.getItem(i);
-                feed.append("<id>"+entry.getId()+"</id>"+"\n");
-                feed.append("<title>"+entry.getTitle()+"</title>"+"\n");
-                feed.append("<updated>"+entry.getUpdated()+"</updated>"+"\n");
-                
-                if(entry.getContent().isLinkedContent()){
-                    feed.append("<content type='"+entry.getContent().getContentType()+"' src='"+PathUtil.backToRealm(getPath())+entry.getContent().toString()+"'>"+"</content>"+"\n");
-                }else{
-                    feed.append("<content type='"+entry.getContent().getContentType()+"'>"+entry.getContent().toString()+"</content>"+"\n");
-                }
-                
-                feed.append("</entry>"+"\n");
+            GalleryItem entry = gallery.getItem(i);
+            feed.append("<id>"+entry.getId()+"</id>"+"\n");
+            feed.append("<title>"+entry.getTitle()+"</title>"+"\n");
+            feed.append("<updated>"+entry.getUpdated()+"</updated>"+"\n");
+            
+            if(entry.getContent().isLinkedContent()){
+                feed.append("<content type='"+entry.getContent().getContentType()+"' src='"+PathUtil.backToRealm(getPath())+entry.getContent().toString()+"'>"+"</content>"+"\n");
+            }else{
+                feed.append("<content type='"+entry.getContent().getContentType()+"'>"+entry.getContent().toString()+"</content>"+"\n");
             }
             
-            feed.append("</feed>");
-            
-            result = new ByteArrayInputStream(feed.toString().getBytes());
+            feed.append("</entry>"+"\n");
         }
         
-        return result;
+        feed.append("</feed>");
+        return feed.toString();
     }
+
     
     //--- Modifiable
     
@@ -126,7 +139,11 @@
         }else{
             // Remove the gallery
             try {
+                // Remove the images
                 getRealm().getRepository().getNode(getGalleryPath()).delete();
+                
+                // Remove gallery related browsing
+                getRealm().getRepository().getNode(PathUtil.getParent(getPath())).delete();
             } catch (NoSuchNodeException e) {
                 log.debug(e, e);
                 deleteOK = false;
@@ -143,25 +160,32 @@
         return deleteOK;
     }
     
+    // Don't understand
     public InputStream getInputStream() throws Exception {
         return getRealm().getRepository().getNode(getGalleryPath()).getInputStream();
     }
+    
+    // Don't understand
     public long getLastModified() throws Exception {
         return getRealm().getRepository().getNode(getGalleryPath()).getLastModified();
     }
     
+    // Don't understand
     public OutputStream getOutputStream() throws Exception {
         return getRealm().getRepository().getNode(getGalleryPath()).getOutputStream();
     }
     
+    // Don't understand
     public Reader getReader() throws Exception {
         return getRealm().getRepository().getReader(new Path(getGalleryPath()));
     }
     
+    // Don't understand
     public Writer getWriter() throws Exception {
         return getRealm().getRepository().getWriter(new Path(getGalleryPath()));
     }
     
+    // Don't understand
     public void write(InputStream in) throws Exception {
         // TODO Auto-generated method stub
         log.warn("TODO[normal]: implement!");

Modified: public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/SimpleGallery.java
===================================================================
--- public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/SimpleGallery.java	2008-01-30 15:32:18 UTC (rev 30982)
+++ public/yanel/contributions/resources/gallery/src/java/org/wyona/yanel/impl/resources/gallery/SimpleGallery.java	2008-01-30 15:32:26 UTC (rev 30983)
@@ -54,7 +54,7 @@
  * </p>
  */
 public class SimpleGallery extends GenericItemBase implements Gallery {
-    private static final String META_XML = "meta.xml";
+    public static final String META_XML = "meta.xml";
     private static final String ITEM_COLLECTION_PREFIX = "item-";
     
     private Repository repository = null;
@@ -165,7 +165,7 @@
                     Node [] imageData = children[i].getNodes();
                     for (int j = 0; j < imageData.length; j++) {
                         // Detect mime type
-                        String mimeType = children[i].getMimeType();
+                        String mimeType = imageData[j].getMimeType();
                         if(null == mimeType){
                             mimeType = MimeTypeUtil.guessMimeType(PathUtil.getSuffix(imageData[j].getName()));
                         }
@@ -247,7 +247,7 @@
         return imageItems.size();
     }
     
-    public final boolean removeItem(String id) {
+    public final GalleryItem removeItem(String id) {
         if(imageItems == null){
             imageItems = new ArrayList/*<Item>*/();
             loadRepository();
@@ -260,14 +260,14 @@
             }
         }
         
-        return false;
+        return null;
     }
     
     /**
      * Override the method in order to remove differently.
      * @param the [item-X] node inside gallery
      * */
-    public boolean removeItem(GenericItem item) {
+    public GalleryItem removeItem(GalleryItem item) {
         boolean deleteOK = true;
         
         Node n = null;
@@ -289,7 +289,11 @@
             deleteOK = false;
         }
         
-        return deleteOK;
+        if(deleteOK){
+            return item;
+        }else{
+            return null;
+        }
     }
     
     /**
@@ -306,7 +310,15 @@
 
         Node itemNode = null;
         try {
-            itemNode = getRepository().getNode(getPath()).addNode(ITEM_COLLECTION_PREFIX+size(), NodeType.COLLECTION);
+            Node galleryNode = getRepository().getNode(getPath());
+            String itemNodeName = null;
+            for (int i = size(); i < Integer.MAX_VALUE; i++) {
+                itemNodeName = ITEM_COLLECTION_PREFIX+i;
+                if(!galleryNode.hasNode(itemNodeName)){
+                    break;
+                }
+            }
+            itemNode = galleryNode.addNode(itemNodeName, NodeType.COLLECTION);
             
             // Fix the system properties
             item.setProperty(ID_KEY, itemNode.getUUID());
@@ -321,14 +333,18 @@
             StringBuffer sb = new StringBuffer("<?xml version='1.0'?>");
             sb.append("<meta>");
             
-            sb.append("<"+TITLE_KEY+"><![CDATA[");
-            sb.append(item.getProperty(TITLE_KEY));
-            sb.append("]]></"+TITLE_KEY+">");
+            if(item.getProperty(TITLE_KEY) != null){
+                sb.append("<"+TITLE_KEY+"><![CDATA[");
+                sb.append(item.getProperty(TITLE_KEY));
+                sb.append("]]></"+TITLE_KEY+">");
+            }
             
             // TODO: Other meta info
             
             sb.append("</meta>");
-            new PrintWriter(new OutputStreamWriter(metaXml.getOutputStream())).write(sb.toString());
+            PrintWriter pw = new PrintWriter(new OutputStreamWriter(metaXml.getOutputStream()));
+            pw.write(sb.toString());
+            pw.flush();
         } catch (Exception e) {
             log.warn("Could not create the item properly", e);
         }



More information about the Yanel-commits mailing list