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=36016cf7b99743d146948b0712fca639efa0ee8e;hp=ca9dabfe77f1c8a7fa86a3276319c11e196f06ca;hpb=d50c0fe50cd69947bc7146991afa0826a8c8f53b;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 ca9dabfe7..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. @@ -20,8 +20,6 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.nodetype.NodeType; -import org.apache.jackrabbit.spi.commons.conversion.MalformedPathException; -import org.argeo.ArgeoException; import org.argeo.jcr.JcrUtils; import org.argeo.jcr.UserJcrUtils; import org.argeo.slc.SlcException; @@ -37,33 +35,72 @@ public class SlcJcrResultUtils { */ public static String getSlcResultsBasePath(Session session) { try { - - return UserJcrUtils.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 UserJcrUtils.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 NodeType.NT_UNSTRUCTURED 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. + * 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 @@ -73,7 +110,7 @@ public class SlcJcrResultUtils { String absPath = getMyResultsBasePath(session); if (session.nodeExists(absPath)) { Node currNode = session.getNode(absPath); - if (currNode.isNodeType(NodeType.NT_UNSTRUCTURED)) + if (currNode.isNodeType(SlcTypes.SLC_MY_RESULT_ROOT_FOLDER)) return currNode; else throw new SlcException( @@ -81,12 +118,12 @@ public class SlcJcrResultUtils { + " that has the wrong type. "); } else { Node myResParNode = JcrUtils.mkdirs(session, absPath); - myResParNode.setPrimaryType(NodeType.NT_UNSTRUCTURED); + 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); } @@ -116,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); } }