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) {
+
+ }
+
+ }
+
+
+
+
+
+
+}