Hi Luciano,

Here I am attaching a patch (for the simplicity to understand, this doesn't
have all my previous changes).

This has the implementation of an AlbumAgregator ( as this is an attempt to
understand what you meant, I didn't change AlbumAgregator in photark
package.Hence I just created it in photark-jcr package temporary) and some
related changes in JCRAlbumImpl and JCRGalleryImpl, from which I understood
from you and Andrino's conversation.

Is this what you meant ? As this is not fully completed, I didn't updated
the JIRA.( Because if I have mis understood what you said, it is no point of
going in this approach further. )


Regards
/subash
Index: src/main/java/org/apache/photark/jcr/services/JCRGalleryImpl.java
===================================================================
--- src/main/java/org/apache/photark/jcr/services/JCRGalleryImpl.java	(revision 1004586)
+++ src/main/java/org/apache/photark/jcr/services/JCRGalleryImpl.java	(working copy)
@@ -162,6 +162,87 @@
         }
     }
 
+      public void addAlbum(String albumName,String albumType) {
+
+        try {
+            //init part
+            Session session = repositoryManager.getSession();
+            Node rootNode = session.getRootNode();
+
+            if(!rootNode.hasNode("org.apache.photark.remote.albums")) {
+               Node ralbums = rootNode.addNode("org.apache.photark.remote.albums");
+
+                  if(!ralbums.hasNode("picasa")) {
+                    ralbums.addNode("picasa");
+
+                  }
+
+                  if(!ralbums.hasNode("flicker")) {
+                   ralbums.addNode("flicker");
+
+                  }
+
+            }
+
+            if(!rootNode.hasNode("org.apache.photark.local.albums")) {
+
+              rootNode.addNode("org.apache.photark.local.albums");
+
+            }
+
+
+          //adding albums to local JCR
+
+            if((albumType != null) && (albumType.equals("picasa"))) {
+
+               Node picasa = rootNode.getNode("org.apache.photark.remote.albums").getNode("picasa");
+
+                if(picasa.hasNode(albumName)) {
+                  logger.info("This album is already in gallery");
+                  return;
+
+                }
+
+               picasa.addNode(albumName);
+               session.save();
+
+
+            } else  if((albumType != null) && (albumType.equals("flicker"))) {
+               Node flicker = rootNode.getNode("org.apache.photark.remote.albums").getNode("flicker");
+
+                if(flicker.hasNode(albumName)) {
+                  logger.info("This album is already in gallery");
+                  return;
+
+                }
+
+               flicker.addNode(albumName);
+               session.save();
+
+            } else if((albumType != null) && (albumType.equals("local"))) {
+
+                Node local = rootNode.getNode("org.apache.photark.local.albums");
+
+                 if(local.hasNode(albumName)) {
+                 logger.info("This album is already in gallery");
+                 return;
+
+                 }
+
+                 local.addNode(albumName);
+                 session.save();
+
+            }
+
+                // TODO create a separate album List to store remote albums
+
+        } catch (RepositoryException e) {
+            e.printStackTrace();
+        } finally {
+
+        }
+    }
+
     public boolean hasAlbum(String albumName) {
         try {
             Session session = repositoryManager.getSession();
Index: src/main/java/org/apache/photark/jcr/services/JCRAlbumImpl.java
===================================================================
--- src/main/java/org/apache/photark/jcr/services/JCRAlbumImpl.java	(revision 1004586)
+++ src/main/java/org/apache/photark/jcr/services/JCRAlbumImpl.java	(working copy)
@@ -44,9 +44,11 @@
 
     private String gallery;
     private String name;
+    private String type;
     private String location;
     private boolean initialized;
     private static Map<String, Album> albums = new HashMap<String, Album>();
+    
 
     public synchronized static Album createAlbum(JCRRepositoryManager repositoryManager, String name ) {
         if (!albums.containsKey(name)) {
@@ -60,6 +62,12 @@
         this.name = name;
     }
 
+     public JCRAlbumImpl(JCRRepositoryManager repositoryManager, String name,String type) {
+        this.repositoryManager = repositoryManager;
+        this.name = name;
+        this.type = type;
+    }
+
     /**
      * Initialize the gallery service
      *   - During initialization, check for local images and create a JCR album 
@@ -126,6 +134,10 @@
         return name;
     }
 
+    public String getType(){
+       return type;
+    }
+
     @Property
     public void setName(String name) {
         this.name = name;
@@ -202,6 +214,7 @@
                     continue;
                 pictures.add(node.getProperty("location").getString());
             }
+
         } catch (Exception e) {
             // FIXME: ignore for now
             e.printStackTrace();
@@ -214,6 +227,50 @@
         return pictureArray;
     }
 
+    public String[] getPictures(String a) {
+
+        List<String> pictures = new ArrayList<String>();
+
+        try {
+            Session session = repositoryManager.getSession();
+            Node root = session.getRootNode();
+            Node albumNode = null;
+
+            if(this.type.equals("local") ) {
+
+                albumNode = root.getNode("org.apache.photark.local.albums").getNode(name);
+
+            } else if(this.type.equals("flicker") ) {
+
+                albumNode = root.getNode("org.apache.photark.remote.albums").getNode("flicker").getNode(name);
+
+
+            } else if(this.type.equals("picasa") ) {
+
+                albumNode = root.getNode("org.apache.photark.remote.albums").getNode("picasa").getNode(name);
+
+            }
+
+            NodeIterator nodes = albumNode.getNodes();
+
+            while (nodes.hasNext()) {
+                Node node = nodes.nextNode();
+                pictures.add(node.getProperty("location").getString());
+            }
+
+        } catch (Exception e) {
+            // FIXME: ignore for now
+            e.printStackTrace();
+        } finally {
+            //repositoryManager.releaseSession();
+        }
+
+        String[] pictureArray = new String[pictures.size()];
+        pictures.toArray(pictureArray);
+        return pictureArray;
+
+    }
+
     public void removeNodes() {
         try {
             Session session = repositoryManager.getSession();
@@ -245,7 +302,7 @@
             picture.getImageAsStream();
             picNode.setProperty("imageContent", picture.getImageAsStream());
             picNode.setProperty("name", picture.getName());
-            picNode.setProperty("location", picture.getName());
+            picNode.setProperty("location", picture.getLocation());
             session.save();
         } catch (RepositoryException e) {
             e.printStackTrace();
@@ -254,6 +311,44 @@
         }
     }
 
+     public void addPicture(Image picture , String skip) {
+
+
+        try {
+            Node albumNode = null;
+            Session session = repositoryManager.getSession();
+            Node root = session.getRootNode();
+            
+            if(this.type.equals("local") ) {
+
+                albumNode = root.getNode("org.apache.photark.local.albums").getNode(name);
+
+            } else if(this.type.equals("flicker") ) {
+
+                albumNode = root.getNode("org.apache.photark.remote.albums").getNode("flicker").getNode(name);
+
+
+            } else if(this.type.equals("picasa") ) {
+
+                albumNode = root.getNode("org.apache.photark.remote.albums").getNode("picasa").getNode(name);
+
+            }
+
+            Node picNode = albumNode.addNode(picture.getName());
+            picNode.setProperty("imageContent", picture.getImageAsStream());
+            picNode.setProperty("name", picture.getName());
+            picNode.setProperty("location", picture.getLocation());
+            session.save();
+
+
+        } catch (RepositoryException e) {
+            e.printStackTrace();
+        }  finally {
+            //repositoryManager.releaseSession();
+        }
+    }
+
+
     public void deletePicture(Image picture) {
         try {
             Session session = repositoryManager.getSession();
Index: src/main/java/org/apache/photark/jcr/services/AlbumAggregator.java
===================================================================
--- src/main/java/org/apache/photark/jcr/services/AlbumAggregator.java	(revision 0)
+++ src/main/java/org/apache/photark/jcr/services/AlbumAggregator.java	(revision 0)
@@ -0,0 +1,108 @@
+package org.apache.photark.jcr.services;
+
+import org.apache.photark.jcr.JCRRepositoryManager;
+import org.apache.photark.services.album.Album;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: siddhi
+ * Date: Nov 5, 2010
+ * Time: 1:03:51 AM
+ * To change this template use File | Settings | File Templates.
+ */
+public class AlbumAggregator {
+
+    private JCRRepositoryManager repositoryManager;
+    private static List<Album> localAlbums = new ArrayList<Album>();
+    private static List<Album> remoteAlbums = new ArrayList<Album>();
+
+
+    public AlbumAggregator(JCRRepositoryManager repositoryManager) {
+
+        this.repositoryManager = repositoryManager;
+        init();
+    }
+
+    private void init() { // should init each time gallery loads
+
+      loadLocalAlbums();
+      loadRemoteAlbums();
+
+    }
+
+    public static List<Album> getAllLocalAlbums() {
+
+     return localAlbums;
+    }
+
+   public static List<Album> getAllRemoteAlbums() {
+
+     return remoteAlbums;
+    }
+
+    private void loadLocalAlbums() {
+      try {
+
+            Session session = repositoryManager.getSession();
+            Node rootNode = session.getRootNode();
+
+            NodeIterator nit = rootNode.getNode("org.apache.photark.local.albums").getNodes();
+
+                while (nit.hasNext()) {
+
+                Node albumNode = nit.nextNode();
+                String albumName = albumNode.getName();
+
+                Album album = new  JCRAlbumImpl(repositoryManager,albumName,"local");
+                if (!localAlbums.contains(album)) {
+                    localAlbums.add(album);
+                }
+                }
+
+        } catch (RepositoryException e) {
+
+        }
+
+    }
+
+    private void loadRemoteAlbums() {
+         try {
+
+            Session session = repositoryManager.getSession();
+            Node rootNode = session.getRootNode();
+
+            NodeIterator nit = rootNode.getNode("org.apache.photark.remote.albums").getNodes();
+
+                while (nit.hasNext()) {
+                  Node subNode = nit.nextNode();
+                  NodeIterator subNit = subNode.getNodes();
+                    while(subNit.hasNext()) {
+                      Node albumNode = subNit.nextNode();
+                      String albumName = albumNode.getName();
+                      Album album = new  JCRAlbumImpl(repositoryManager,albumName,"remote");
+                      if (!remoteAlbums.contains(album)) {
+                        remoteAlbums.add(album);
+                      }
+
+                    }
+                }
+
+        } catch (RepositoryException e) {
+
+        }
+
+    }
+
+
+
+
+
+
+}

Reply via email to