D'oh, I knew it has to be something simple. Thank you!
--mike

On Wed, Dec 10, 2014 at 3:18 AM, Alex Parvulescu
<[email protected]> wrote:
> Hi Mike,
>
> The issue is in the initialization parts of the code. You need to only
> boostrap 'Jcr' once, in your code snippet you do it for each session login
> call.
>
> So the fix is to change the #getOak(SegmentStore store) and the 
> #getSession(Oak
> oak) methods to [0] and the init parts to [1].
>
> hope this helps!
>
> alex
>
> [0]
>   private Repository getRepository(SegmentStore store) throws Exception {
>     Oak oak = new Oak(new SegmentNodeStore(store));
>     return new Jcr(oak).createRepository();
>   }
>
>   private Session getSession(Repository repository) throws Exception {
>     SimpleCredentials credentials = new SimpleCredentials("admin",
> "admin".toCharArray());
>     return repository.login(credentials, null);
>   }
>
> [1]
> public App() {
>   try {
>     SegmentStore store = getNodeStore();
>     Repository repository = getRepository(store);
>     // System.out.println("1. #######################");
>     // listTree(repository, null);
>     System.out.println("2. #######################");
>     Session session = getSession(repository);
>     addTestFolders(session);
>     addTestFilesWithJCRUtils(session);
>     // ....
>
>
>
>
>
> On Tue, Dec 9, 2014 at 8:08 PM, Mike Nimer <[email protected]> wrote:
>
>> So I know I must be doing something wrong, and I'm sure it's something
>> simple. Or everyone would notice it.  But I can't seem to add a
>> NT_File Node to the repository (SegmentNodeStore w/FileStore).
>>
>> When I try to use a JCR Repository, basic addNode logic or with
>> JcrUtils, I will get this error
>> "Uniqueness constraint violated at path [/] for one of the property in
>> [jcr:uuid]"
>>
>> When I use the Oak Repository I will not get an error but no node
>> seems to be created.
>>
>> I guess the question. What is the right way to add a NT_FILE node in
>> Oak? Also I've tried different versions of oak, from 1.1.0 to
>> 1.1-SNAPSHOT.
>>
>> Here is the simple test class I'm using to verify this with 4
>> different ways to create a file node. Based on what I can find online
>> and digging through the unit tests.
>>
>> thanks,
>> --mike
>>
>> ============================================================
>>
>> package com.mikenimer.test;
>>
>> import org.apache.jackrabbit.JcrConstants;
>> import org.apache.jackrabbit.commons.JcrUtils;
>> import org.apache.jackrabbit.oak.Oak;
>> import org.apache.jackrabbit.oak.api.Blob;
>> import org.apache.jackrabbit.oak.api.ContentRepository;
>> import org.apache.jackrabbit.oak.api.ContentSession;
>> import org.apache.jackrabbit.oak.api.Root;
>> import org.apache.jackrabbit.oak.api.Tree;
>> import org.apache.jackrabbit.oak.api.Type;
>> import org.apache.jackrabbit.oak.jcr.Jcr;
>> import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
>> import org.apache.jackrabbit.oak.plugins.segment.SegmentStore;
>> import org.apache.jackrabbit.oak.plugins.segment.file.FileStore;
>> import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
>> import org.apache.jackrabbit.oak.util.NodeUtil;
>> import org.apache.jackrabbit.value.BinaryValue;
>>
>> import javax.jcr.Node;
>> import javax.jcr.Repository;
>> import javax.jcr.Session;
>> import javax.jcr.SimpleCredentials;
>> import javax.jcr.Value;
>> import java.io.BufferedInputStream;
>> import java.io.File;
>> import java.io.FileInputStream;
>> import java.io.InputStream;
>> import java.util.Calendar;
>>
>> /**
>>  * JCR Add File Node test
>>  */
>> public class App
>> {
>>     public static void main(String[] args)
>>     {
>>         App app = new App();
>>     }
>>
>>
>>     public App()
>>     {
>>
>>
>>         try {
>>             SegmentStore store = getNodeStore();
>>             Oak oak = getOak(store);
>>
>>
>>             System.out.println("1. #######################");
>>             listTree(oak, null);
>>
>>             System.out.println("2. #######################");
>>             Session session = getSession(oak);
>>             ContentSession contentSession = getContentSession(oak);
>>             addTestFolders(session);
>>             //addTestFilesJCR(session);
>>             addTestFilesWithJCRUtils(session);
>>             //addTestFilesWithBuilder(contentSession, store);
>>             //addTestFilesWithNodeUtil(contentSession, store);
>>             listTree(oak, session);
>>             session.logout();
>>
>>             System.out.println("3. #######################");
>>             listTree(oak, null);
>>         }
>>         catch (Exception ex) {
>>             ex.printStackTrace();
>>         }
>>
>>     }
>>
>>
>>     private void listTree(Oak oak, Session session) throws Exception
>>     {
>>         if( session == null ) {
>>             session = getSession(oak);
>>         }
>>         Node rootNode = session.getNode("/");
>>         Iterable<Node> nodes = JcrUtils.getChildNodes(rootNode);
>>         for (Node node : nodes) {
>>             if( node.isNodeType("mix:referenceable") ) {
>>                 System.out.println(node.getName() + " | " +
>> node.getUUID() + " | " + node.getPath());
>>             }else{
>>                 System.out.println(node.getName() + " | " +
>> node.getPath());
>>             }
>>
>>             Iterable<Node> nodes2 = JcrUtils.getChildNodes(node);
>>             for (Node node2 : nodes2) {
>>                 if( node2.isNodeType("mix:referenceable") ) {
>>                     System.out.println("---" + node2.getName() + " | "
>> + node2.getUUID() + " | " + node2.getPath());
>>                 }else {
>>                     System.out.println("---" + node2.getName()  + " |
>> " + node2.getPath());
>>                 }
>>             }
>>         }
>>     }
>>
>>
>>     private void addTestFolders(Session session) throws Exception
>>     {
>>         Node root = session.getNode("/");
>>         JcrUtils.getOrAddFolder(root, "test1");
>>         JcrUtils.getOrAddFolder(root, "test1/test1a");
>>         JcrUtils.getOrAddFolder(root, "test2");
>>         JcrUtils.getOrAddFolder(root, "test2/test2a");
>>         session.save();
>>     }
>>
>>
>>     private void addTestFilesJCR(Session session) throws Exception
>>     {
>>         //InputStream is1 =
>> this.getClass().getClassLoader().getResourceAsStream("image1.jpg");
>>         //InputStream is2 =
>> this.getClass().getClassLoader().getResourceAsStream("image2.jpg");
>>
>>         File file = new File("/Users/mnimer/Desktop/ScreenShot.png");
>>         InputStream is1 = new FileInputStream(file);
>>
>>         Node rootNode = session.getNode("/test1");
>>         if( !session.nodeExists("/file1") ) {
>>
>>             //create the file node - see section 6.7.22.6 of the spec
>>             Node fileNode = rootNode.addNode (file.getName(), "nt:file");
>>             fileNode.addMixin("mix:referenceable");
>>
>>             //create the mandatory child node - jcr:content
>>             Node resNode = fileNode.addNode ("jcr:content", "nt:resource");
>>             resNode.setProperty ("jcr:mimeType", "image/png");
>>             resNode.setProperty ("jcr:data", new FileInputStream (file));
>>             Calendar lastModified = Calendar.getInstance();
>>             lastModified.setTimeInMillis (file.lastModified ());
>>             resNode.setProperty ("jcr:lastModified", lastModified);
>>
>>
>>             //Node img1 = JcrUtils.putFile(rootNode, "file1", "image/png",
>> is1);
>>             System.out.println(fileNode.getName() +" | "
>> +fileNode.getUUID() +" | " +fileNode.getPath());
>>         }
>>
>>         session.save();
>>     }
>>
>>
>>
>>     private void addTestFilesWithJCRUtils(Session session) throws Exception
>>     {
>>         session.refresh(true);
>>         //InputStream is1 =
>> this.getClass().getClassLoader().getResourceAsStream("image1.jpg");
>>         //InputStream is2 =
>> this.getClass().getClassLoader().getResourceAsStream("image2.jpg");
>>
>>         File file = new File("/Users/mnimer/Desktop/ScreenShot.png");
>>         InputStream is1 = new FileInputStream(file);
>>
>>         Node rootNode = session.getNode("/test1");
>>         if( !session.nodeExists("/file1") ) {
>>
>>             Node fileNode = JcrUtils.putFile(rootNode, file.getName(),
>> "image/png", new BufferedInputStream(new FileInputStream(file)) );
>>
>>             //Node img1 = JcrUtils.putFile(rootNode, "file1", "image/png",
>> is1);
>>             if( fileNode.hasNode("mix:referenceable") ) {
>>                 System.out.println(fileNode.getName() + " | " +
>> fileNode.getUUID() + " | " + fileNode.getPath());
>>             }else{
>>                 System.out.println(fileNode.getName()  + " | " +
>> fileNode.getPath());
>>             }
>>         }
>>
>>         session.save();
>>     }
>>
>>
>>     private void addTestFilesWithBuilder(ContentSession session,
>> SegmentStore store) throws Exception
>>     {
>>         Root root = session.getLatestRoot();
>>         Tree rootTree = root.getTree("/");
>>
>>         NodeBuilder builder = store.getHead().builder();
>>
>>         File file = new File("/Users/mnimer/Desktop/ScreenShot.png");
>>         //InputStream is1 = new FileInputStream(file);
>>
>>         String fileName = file.getName();
>>         NodeBuilder fileNode = null;
>>         if( builder.hasChildNode(fileName) ) {
>>             fileNode = builder.getChildNode(fileName);
>>         }else{
>>             fileNode = builder.child(fileName);
>>         }
>>
>>
>>         fileNode.setProperty(JcrConstants.JCR_PRIMARYTYPE,
>> JcrConstants.NT_FILE, Type.NAME);
>>         NodeBuilder contentNode = fileNode.child(JcrConstants.JCR_CONTENT);
>>         contentNode.setProperty(JcrConstants.JCR_PRIMARYTYPE,
>> JcrConstants.NT_RESOURCE);
>>
>>         // set file contents
>>         //Value[] binaryContent = new Value[1];
>>         InputStream is = new FileInputStream(file);
>>         //BinaryValue binaryValue = new BinaryValue(is);
>>         Blob blob = contentNode.createBlob(is);
>>         fileNode.setProperty(JcrConstants.JCR_CONTENT, blob, Type.BINARY);
>>
>>         //content.setProperty(JcrConstants.JCR_DATA, blobId);
>>         session.getLatestRoot().commit();
>>         //session.getLatestRoot().commit();
>>
>>     }
>>
>>
>>     private void addTestFilesWithNodeUtil(ContentSession session,
>> SegmentStore store) throws Exception
>>     {
>>         Root root = session.getLatestRoot();
>>         Tree rootTree = root.getTree("/");
>>         NodeUtil nodeUtil = new NodeUtil(rootTree);
>>
>>         File file = new File("/Users/mnimer/Desktop/ScreenShot.png");
>>         //InputStream is = new FileInputStream(file);
>>
>>         String fileName = file.getName();
>>         NodeUtil fileNode = nodeUtil.getOrAddChild(fileName,
>> JcrConstants.NT_FILE);
>>
>>         fileNode.setString(JcrConstants.JCR_MIMETYPE, "image/png");
>>
>>         Calendar lastModified = Calendar.getInstance();
>>         lastModified.setTimeInMillis(file.lastModified());
>>         fileNode.setDate(JcrConstants.JCR_LASTMODIFIED,
>> lastModified.getTimeInMillis());
>>
>>
>>         NodeUtil contentNode =
>> fileNode.getOrAddChild(JcrConstants.JCR_CONTENT,
>> JcrConstants.NT_RESOURCE);
>>         // set file contents
>>         InputStream is = new FileInputStream(file);
>>         Value[] binaryContent = new Value[1];
>>         binaryContent[0] = new BinaryValue(is);
>>         contentNode.setValues(JcrConstants.JCR_DATA, binaryContent);
>>
>>         session.getLatestRoot().commit();
>>     }
>>
>>
>>
>>
>>
>>     private FileStore getNodeStore() throws Exception
>>     {
>>         File directory = new File("jcrTestRepo", "tarmk-"
>> +System.currentTimeMillis());
>>         final FileStore fileStore = new FileStore(directory, 1, false);
>>         Runtime.getRuntime().addShutdownHook(new Thread(new Runnable()
>>         {
>>             @Override
>>             public void run()
>>             {
>>                 fileStore.close();
>>             }
>>         }));
>>
>>         return fileStore;
>>     }
>>
>>     private Oak getOak(SegmentStore store) throws Exception
>>     {
>>         return new Oak(new SegmentNodeStore(store));
>>         //return new Oak(new SegmentNodeStore(memoryStore));
>>     }
>>
>>     private Session getSession(Oak oak) throws Exception
>>     {
>>         SimpleCredentials credentials = new SimpleCredentials("admin",
>> "admin".toCharArray());
>>         Repository repository = new Jcr(oak).createRepository();
>>         return repository.login(credentials, null);
>>     }
>>
>>     private ContentSession getContentSession(Oak oak) throws Exception
>>     {
>>         SimpleCredentials credentials = new SimpleCredentials("admin",
>> "admin".toCharArray());
>>         ContentRepository repository = oak.createContentRepository();
>>         return repository.login(credentials, "default");
>>     }
>>
>> }
>>
>> ============================================================
>>

Reply via email to