X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.support.jcr%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fjcr%2FSlcJcrResultUtils.java;h=729c2d74b7c3dcd958dfce3959291586a8bea4ee;hb=f86db0937b395c7fa96fa4bf4a29cc2c676fe3f5;hp=3eba046cacfd72542eba2276aa90314c9f8205ae;hpb=2541d68abde22de8b5e1001d6291a1afb2bbcc09;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrResultUtils.java b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrResultUtils.java index 3eba046ca..729c2d74b 100644 --- a/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrResultUtils.java +++ b/runtime/org.argeo.slc.support.jcr/src/main/java/org/argeo/slc/jcr/SlcJcrResultUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2012 Mathieu Baudier + * Copyright (C) 2007-2012 Argeo GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,10 +18,10 @@ package org.argeo.slc.jcr; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.Session; +import javax.jcr.nodetype.NodeType; -import org.argeo.ArgeoException; -import org.argeo.jcr.ArgeoJcrUtils; import org.argeo.jcr.JcrUtils; +import org.argeo.jcr.UserJcrUtils; import org.argeo.slc.SlcException; /** @@ -35,43 +35,98 @@ public class SlcJcrResultUtils { */ public static String getSlcResultsBasePath(Session session) { try { - - return ArgeoJcrUtils.getUserHome(session).getPath() + "/" + Node userHome = UserJcrUtils.getUserHome(session); + if (userHome == null) + throw new SlcException("No user home available for " + + session.getUserID()); + return userHome.getPath() + '/' + SlcNames.SLC_SYSTEM + '/' + SlcNames.SLC_RESULTS; } catch (RepositoryException re) { - throw new ArgeoException( + throw new SlcException( "Unexpected error while getting Slc Results Base Path.", re); } } + /** + * Returns the base node to store SlcResults. If it does not exists, it is + * created. If a node already exists at the given path with the wrong type, + * it throws an exception. + * + * @param session + * @return + */ + public static Node getSlcResultsParentNode(Session session) { + try { + String absPath = getSlcResultsBasePath(session); + if (session.nodeExists(absPath)) { + Node currNode = session.getNode(absPath); + if (currNode.isNodeType(NodeType.NT_UNSTRUCTURED)) + return currNode; + else + throw new SlcException( + "A node already exists at this path : " + absPath + + " that has the wrong type. "); + } else { + Node slcResParNode = JcrUtils.mkdirs(session, absPath); + slcResParNode.setPrimaryType(NodeType.NT_UNSTRUCTURED); + session.save(); + return slcResParNode; + } + } catch (RepositoryException re) { + throw new SlcException( + "Unexpected error while creating slcResult root parent node.", + re); + } + } + /** * Returns the path to the current Result UI specific node, depending the * current user */ public static String getMyResultsBasePath(Session session) { try { - return ArgeoJcrUtils.getUserHome(session).getPath() + "/" - + SlcJcrConstants.SLC_MYRESULT_BASEPATH; + Node userHome = UserJcrUtils.getUserHome(session); + if (userHome == null) + throw new SlcException("No user home available for " + + session.getUserID()); + return userHome.getPath() + '/' + SlcNames.SLC_SYSTEM + '/' + + SlcNames.SLC_MY_RESULTS; } catch (RepositoryException re) { - throw new ArgeoException( + throw new SlcException( "Unexpected error while getting Slc Results Base Path.", re); } } + /** + * Creates a new node with type SlcTypes.SLC_MY_RESULT_ROOT_FOLDER at the + * given absolute path. If a node already exists at the given path, returns + * that node if it has the correct type and throws an exception otherwise. + * + * @param session + * @return + */ public static Node getMyResultParentNode(Session session) { try { - if (session.nodeExists(SlcJcrResultUtils - .getMyResultsBasePath(session))) - return session.getNode(getMyResultsBasePath(session)); - else - return createResultFolderNode(session, - getMyResultsBasePath(session)); + String absPath = getMyResultsBasePath(session); + if (session.nodeExists(absPath)) { + Node currNode = session.getNode(absPath); + if (currNode.isNodeType(SlcTypes.SLC_MY_RESULT_ROOT_FOLDER)) + return currNode; + else + throw new SlcException( + "A node already exists at this path : " + absPath + + " that has the wrong type. "); + } else { + Node myResParNode = JcrUtils.mkdirs(session, absPath); + myResParNode.setPrimaryType(SlcTypes.SLC_MY_RESULT_ROOT_FOLDER); + session.save(); + return myResParNode; + } } catch (RepositoryException re) { - throw new ArgeoException( + throw new SlcException( "Unexpected error while creating user MyResult base node.", re); } - } /** @@ -98,13 +153,13 @@ public class SlcJcrResultUtils { } Node rfNode = JcrUtils.mkdirs(session, absPath); rfNode.setPrimaryType(SlcTypes.SLC_RESULT_FOLDER); - Node statusNode = rfNode.addNode(SlcNames.SLC_STATUS, + Node statusNode = rfNode.addNode(SlcNames.SLC_AGGREGATED_STATUS, SlcTypes.SLC_CHECK); statusNode.setProperty(SlcNames.SLC_SUCCESS, true); session.save(); return rfNode; } catch (RepositoryException re) { - throw new ArgeoException( + throw new SlcException( "Unexpected error while creating Result Folder node.", re); } }