package com.idega.slide.jcr; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.rmi.NotBoundException; import javax.jcr.Credentials; import javax.jcr.LoginException; import javax.jcr.NoSuchWorkspaceException; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.PathNotFoundException; import javax.jcr.Property; import javax.jcr.PropertyIterator; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.SimpleCredentials; import javax.jcr.Value; import javax.jcr.ValueFormatException; /** * <p> * TODO tryggvil Describe Type RepositoryTest * </p> * Last modified: $Date: 2009/01/06 15:17:20 $ by $Author: tryggvil $ * * @author <a href="mailto:tryggvil@idega.com">tryggvil</a> * @version $Revision: 1.5 $ */ public class RepositoryTest { /** * @param args * @throws IOException * @throws NotBoundException * @throws ClassCastException * @throws RepositoryException * @throws NoSuchWorkspaceException * @throws LoginException */ public static void main(String[] args) throws IOException, ClassCastException, NotBoundException, LoginException, NoSuchWorkspaceException, RepositoryException { // TODO Auto-generated method stub //startEmbeddedRepository(); Repository repository = getSlideRepository(); Credentials credentials = new SimpleCredentials("root", "".toCharArray()); Session session = repository.login(credentials); //session.getN Node rootNode = session.getRootNode(); //NodeIterator nodeIterator = rootNode.getNodes(); //dumpNodeInfo(nodeIterator); Node filesNode; try{ filesNode = rootNode.getNode("files"); System.out.println("Node="+filesNode.getName()+" found"); } catch(PathNotFoundException ne){ filesNode = rootNode.addNode("files", "nt:folder"); filesNode.save(); System.out.println("Node="+filesNode.getName()+" not found - created"); } Node testFolder; try{ testFolder = filesNode.getNode("testFolder"); System.out.println("Node="+testFolder.getName()+" found"); } catch(PathNotFoundException ne){ testFolder = filesNode.addNode("testFolder", "nt:folder"); testFolder.save(); System.out.println("Node="+testFolder.getName()+" not found - created"); } Node fileNode; Node contentNode; try{ //try{ //fileNode = rootNode.getNode("/files/cms/themes/Multi_FreeStyle_III/Multi_FreeStyle_III.rwtheme/Contents/css/font/font1.css"); fileNode = testFolder.getNode("testfile.pdf"); System.out.println("Node="+fileNode.getName()+" found"); String nodeType = fileNode.getPrimaryNodeType().getName(); if(nodeType.equals("nt:file")){ System.out.println("NodeType of "+fileNode.getName()+" is "+nodeType); } else{ System.err.println("Error: NodeType of "+fileNode.getName()+" is "+nodeType); } /*} catch(PathNotFoundException ne){ fileNode = testFolder.addNode("testfile.pdf", "nt:file"); System.out.println("Node="+fileNode.getName()+" not found - created"); fileNode.save(); }*/ try{ //fileNode = rootNode.getNode("/files/cms/themes/Multi_FreeStyle_III/Multi_FreeStyle_III.rwtheme/Contents/css/font/font1.css"); contentNode = fileNode.getNode("jcr:content"); System.out.println("Node="+contentNode.getName()+" found"); } catch(PathNotFoundException ne){ contentNode = fileNode.addNode("jcr:content","nt:unstructured"); System.out.println("Node="+contentNode.getName()+" not found - created"); } FileInputStream fileinstream = new FileInputStream(new File("testfile.pdf")); contentNode.setProperty("jcr:data",fileinstream); contentNode.setProperty("jcr:mimetype","application/pdf"); contentNode.save(); /*//fileNode.setProperty("testprop2","blabla"); try{ String testproperty = fileNode.getProperty("testprop").getString(); int iTestProp = Integer.parseInt(testproperty); fileNode.setProperty("testprop",Integer.toString(++iTestProp)); //fileNode.save(); } catch(PathNotFoundException pe){ fileNode.setProperty("testprop","1"); //fileNode.save(); } fileNode.save();*/ contentNode = fileNode.getNode("jcr:content"); System.out.println("Node="+fileNode.getName()+" found"); Property property = contentNode.getProperty("jcr:data"); InputStream instream = property.getStream(); File fileCopy = new File(fileNode.getName()+"-copy"); if(!fileCopy.exists()){ fileCopy.createNewFile(); } FileOutputStream outstream = new FileOutputStream(fileCopy); byte[] buffer = new byte[1024]; while(instream.read(buffer)!=-1){ outstream.write(buffer); } outstream.close(); } catch(PathNotFoundException ne){ //Create the file if it does not exist: fileNode = testFolder.addNode("testfile.pdf", "nt:file"); //fileNode.save(); contentNode = fileNode.addNode("jcr:content","nt:unstructured"); System.out.println("Node="+fileNode.getName()+" not found - created"); FileInputStream instream = new FileInputStream(new File("testfile.pdf")); contentNode.setProperty("jcr:data",instream); contentNode.setProperty("jcr:mimetype","application/pdf"); contentNode.save(); //fileNode.save(); } Node testFolder2=session.getRootNode().getNode("files").addNode("testFolder2","nt:folder"); testFolder2.save(); //session.save(); testFolder2=session.getRootNode().getNode("files").getNode("testFolder2"); testFolder2.remove(); //getSession().save(); filesNode = session.getRootNode().getNode("files"); boolean deleted=false; try{ testFolder2 = filesNode.getNode("testFolder2"); System.err.println("Node "+testFolder2.getName()+" was found but should be deleted"); } catch(PathNotFoundException pe){ //testFolder = filesNode.addNode("testFolder","nt:folder"); deleted=true; System.out.println("Delete of "+testFolder2.getName()+" was successful"); } if(!deleted){ throw new RuntimeException("Remote failed"); } //node.setProperty("jcr:primaryType", "nt:folder"); //node.save(); session.save(); testFolder = filesNode.getNode("testFolder"); testFolder.getNodes(); filesNode = session.getRootNode().getNode("files"); NodeIterator filesNodeChildren = testFolder.getNodes(); dumpNodeInfo(filesNodeChildren); System.exit(0); } private static void dumpNodeInfo(NodeIterator nodeIterator) throws RepositoryException, ValueFormatException { while(nodeIterator.hasNext()) { Node node = nodeIterator.nextNode(); String nodeName = node.getName(); String nodePath = node.getPath(); //Node node = rootNode.getNode("testfolder"); PropertyIterator iterator = node.getProperties(); System.out.print("NodePath="+nodePath+" - Name="+nodeName+" ["); while(iterator.hasNext()) { Property property = iterator.nextProperty(); String name = property.getName(); Value value = property.getValue(); System.out.print("@"+name+"="+value.getString()+", "); } System.out.println("]"); //Node folderNode = rootNode.addNode("nt:folder", "testfolder"); dumpNodeInfo(node.getNodes()); } } private static Repository getSlideRepository() { // TODO Auto-generated method stub return new SlideRepository(); } /*private static Repository getRemoteRepository() { String url = "rmi://localhost:1099/jackrabbit.repository"; //ClientRepositoryFactory factory = new ClientRepositoryFactory(); //Repository repository = factory.getRepository(url); Repository repository = new RMIRemoteRepository("//localhost/jackrabbit.repository"); return repository; } private static Repository getEmbeddedRepository() throws IOException, RemoteException, AccessException { Repository srepository = new TransientRepository(); ServerAdapterFactory sfactory = new ServerAdapterFactory(); RemoteRepository remote = sfactory.getRemoteRepository(srepository); Registry reg = LocateRegistry.createRegistry(1100); reg.rebind("jackrabbit", remote); return srepository; }*/ }