- * Used to validate file nodes. - */ - public boolean daoFileExists(Long uuid, Long versionId) throws FileException; - - public List daoFindChildNodes(CrNodeVersion parentNodeVersion); - - public CrNode daoFindChildNode(CrNodeVersion parentNodeVersion, String relPath); } \ No newline at end of file Index: lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/NodeFactory.java =================================================================== diff -u -r1e26200cec472e799b29f548270b1a67027e9167 -rea80430beb4497f12c92db2580341f21750a5a43 --- lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/NodeFactory.java (.../NodeFactory.java) (revision 1e26200cec472e799b29f548270b1a67027e9167) +++ lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/NodeFactory.java (.../NodeFactory.java) (revision ea80430beb4497f12c92db2580341f21750a5a43) @@ -21,6 +21,7 @@ * **************************************************************** */ + package org.lamsfoundation.lams.contentrepository.service; import java.io.InputStream; @@ -36,11 +37,11 @@ import org.lamsfoundation.lams.contentrepository.IValue; import org.lamsfoundation.lams.contentrepository.NodeType; import org.lamsfoundation.lams.contentrepository.PropertyName; +import org.lamsfoundation.lams.contentrepository.dao.INodeDAO; import org.lamsfoundation.lams.contentrepository.exception.FileException; import org.lamsfoundation.lams.contentrepository.exception.InvalidParameterException; import org.lamsfoundation.lams.contentrepository.exception.ItemNotFoundException; import org.lamsfoundation.lams.contentrepository.exception.ValueFormatException; -import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; @@ -59,11 +60,15 @@ protected Logger log = Logger.getLogger(NodeFactory.class); private BeanFactory beanFactory = null; - private IUserManagementService userManagementService = null; + private INodeDAO nodeDAO = null; + public NodeFactory() { + super(); + } + /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.service.INodeFactory#createFileNode(org.lamsfoundation.lams. * contentrepository.CrWorkspace, org.lamsfoundation.lams.contentrepository.service.SimpleVersionedNode, * java.lang.String, java.io.InputStream, java.lang.String, java.lang.String, java.lang.String) @@ -82,7 +87,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.service.INodeFactory#createPackageNode(org.lamsfoundation.lams. * contentrepository.CrWorkspace, java.lang.String, java.lang.String) */ @@ -99,7 +104,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.service.INodeFactory#createDataNode(org.lamsfoundation.lams. * contentrepository.CrWorkspace, org.lamsfoundation.lams.contentrepository.service.SimpleVersionedNode, * java.lang.String) @@ -139,7 +144,7 @@ /* * (non-Javadoc) - * + * * @see * org.lamsfoundation.lams.contentrepository.service.INodeFactory#getNode(org.lamsfoundation.lams.contentrepository. * CrNode, java.lang.Long) @@ -154,7 +159,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.service.INodeFactory#getNode(java.lang.Long, java.lang.Long, * java.lang.Long) */ @@ -171,7 +176,7 @@ CrNode node = null; - node = (CrNode) getUserManagementService().findById(CrNode.class, uuid); + node = (CrNode) nodeDAO.find(CrNode.class, uuid); if (node == null) { throw new ItemNotFoundException("Node " + uuid + " not found."); @@ -189,7 +194,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.service.INodeFactory#getNode(java.lang.Long, java.lang.Long, * java.lang.Long, java.lang.String) */ @@ -215,7 +220,7 @@ /* * (non-Javadoc) - * + * * @see * org.lamsfoundation.lams.contentrepository.service.INodeFactory#copy(org.lamsfoundation.lams.contentrepository. * service.SimpleVersionedNode) @@ -230,7 +235,7 @@ /** * Private method to handle the recursive copy. The parent node is needed to set up the * node -> parent link in the CrNode object. - * + * * @param originalNode * @param parentNode * @return new Node @@ -263,7 +268,7 @@ } } - // copy any attached file. don't actually copy the file - set up + // copy any attached file. don't actually copy the file - set up // and input stream and the file will be copied when the node is saved. // this is likely to recopy the Filename and Mimetype properties. if (originalNode.isNodeType(NodeType.FILENODE)) { @@ -293,10 +298,31 @@ * ********************************************************** */ + /* + * (non-Javadoc) + * + * @see org.lamsfoundation.lams.contentrepository.service.INodeFactory#getNodeDAO() + */ + @Override + public INodeDAO getNodeDAO() { + return nodeDAO; + } + + /* + * (non-Javadoc) + * + * @see org.lamsfoundation.lams.contentrepository.service.INodeFactory#setNodeDAO(org.lamsfoundation.lams. + * contentrepository.dao.INodeDAO) + */ + @Override + public void setNodeDAO(INodeDAO nodeDAO) { + this.nodeDAO = nodeDAO; + } + /* **** Method for BeanFactoryAware interface *****************/ /* * (non-Javadoc) - * + * * @see * org.lamsfoundation.lams.contentrepository.service.INodeFactory#setBeanFactory(org.springframework.beans.factory. * BeanFactory) @@ -306,12 +332,4 @@ this.beanFactory = beanFactory; } - public IUserManagementService getUserManagementService() { - // this can not be done by injection as bean factory is not fully initialised when it happens and we get an exception on start up - if (userManagementService == null) { - userManagementService = beanFactory.getBean("userManagementService", IUserManagementService.class); - } - return userManagementService; - } - -} \ No newline at end of file +} Index: lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/SimpleRepository.java =================================================================== diff -u -r1e26200cec472e799b29f548270b1a67027e9167 -rea80430beb4497f12c92db2580341f21750a5a43 --- lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/SimpleRepository.java (.../SimpleRepository.java) (revision 1e26200cec472e799b29f548270b1a67027e9167) +++ lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/SimpleRepository.java (.../SimpleRepository.java) (revision ea80430beb4497f12c92db2580341f21750a5a43) @@ -21,6 +21,7 @@ * **************************************************************** */ + package org.lamsfoundation.lams.contentrepository.service; import java.io.FileNotFoundException; @@ -42,7 +43,6 @@ import org.apache.log4j.Logger; import org.lamsfoundation.lams.contentrepository.CrCredential; import org.lamsfoundation.lams.contentrepository.CrNode; -import org.lamsfoundation.lams.contentrepository.CrNodeVersion; import org.lamsfoundation.lams.contentrepository.CrWorkspace; import org.lamsfoundation.lams.contentrepository.CrWorkspaceCredential; import org.lamsfoundation.lams.contentrepository.ICredentials; @@ -54,8 +54,6 @@ import org.lamsfoundation.lams.contentrepository.NodeType; import org.lamsfoundation.lams.contentrepository.PropertyName; import org.lamsfoundation.lams.contentrepository.dao.ICredentialDAO; -import org.lamsfoundation.lams.contentrepository.dao.IFileDAO; -import org.lamsfoundation.lams.contentrepository.dao.INodeDAO; import org.lamsfoundation.lams.contentrepository.dao.IWorkspaceDAO; import org.lamsfoundation.lams.contentrepository.exception.AccessDeniedException; import org.lamsfoundation.lams.contentrepository.exception.FileException; @@ -89,7 +87,7 @@ * run separately and without suitable AOP support then * each transaction method must check that the credential is okay * or that the ticket is a known ticket (isTicketOkay() method). - * + * * This class also depends on the transactions defined in the * application context for the hibernate sessions to work properly. * If the method isn't transactioned, then there won't be a proper @@ -110,8 +108,6 @@ private ICredentialDAO credentialDAO = null; private IWorkspaceDAO workspaceDAO = null; private INodeFactory nodeFactory = null; - private IFileDAO fileDAO = null; - private INodeDAO nodeDAO = null; private Set ticketIdSet = new HashSet(); // set of currently known tickets. @@ -138,10 +134,10 @@ } return user.getUserID(); } - throw new AccessDeniedException( - "Cannot get user details for content repository. No session found - user not logged in or the webservice call has not set up the session details."); + throw new AccessDeniedException( + "Cannot get user details for content repository. No session found - user not logged in or the webservice call has not set up the session details."); - } + } /** * @param workspaceId @@ -159,7 +155,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.IRepository#login(org.lamsfoundation.lams.contentrepository. * ICredentials, java.lang.String) */ @@ -186,7 +182,7 @@ } // okay, we should now be able to create a ticket - // make ticket, create new credentials without the password + // make ticket, create new credentials without the password ITicket ticket = new SimpleTicket(workspace.getWorkspaceId()); ticketIdSet.add(ticket.getTicketId()); return ticket; @@ -195,7 +191,7 @@ /** * Add a workspace, giving the credentials as the user of this workspace. * It does not clear the password in the credentials - * + * * @param credentials * this user/password must already exist in the repository. Password will be checked. * @param workspaceName @@ -270,7 +266,7 @@ * The password must be at least 6 chars. * Possibly this should only be available to an internal management tool * *** Security Risk - I'm converting the password to a string... *** - * + * * @throws LoginException * if the oldCredential fails login test (e.g. wrong password) * @throws RepositoryCheckedException @@ -308,9 +304,9 @@ /** * Checks that a password meets our password criteria. This could be implemented * as a Strategy, but that's overkill! - * + * * Checks that the password is six or more characters. - * + * * @param password * @throws RepositoryCheckedException * if @@ -408,7 +404,7 @@ /* * (non-Javadoc) - * + * * @see * org.lamsfoundation.lams.contentrepository.IRepository#logout(org.lamsfoundation.lams.contentrepository.ITicket) */ @@ -430,7 +426,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.IRepository#addFileItem(org.lamsfoundation.lams.contentrepository. * ITicket, java.io.InputStream, java.lang.String, java.lang.String, java.lang.String) */ @@ -456,7 +452,7 @@ /* * (non-Javadoc) - * + * * @see * org.lamsfoundation.lams.contentrepository.IRepository#addPackageItem(org.lamsfoundation.lams.contentrepository. * ITicket, java.lang.String, java.lang.String, java.lang.String) @@ -490,7 +486,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.IRepository#getFileItem(org.lamsfoundation.lams.contentrepository. * ITicket, java.lang.Long, java.lang.Long) */ @@ -503,7 +499,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.IRepository#getFileItem(org.lamsfoundation.lams.contentrepository. * ITicket, java.lang.Long, java.lang.Long, java.lang.String) */ @@ -534,7 +530,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.IRepository#getFileItem(org.lamsfoundation.lams.contentrepository. * ITicket, java.lang.Long, java.lang.Long, java.lang.String) */ @@ -560,7 +556,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.IRepository#getNodeList(org.lamsfoundation.lams.contentrepository. * ITicket) */ @@ -586,7 +582,7 @@ /* * (non-Javadoc) - * + * * @see * org.lamsfoundation.lams.contentrepository.IRepository#getVersionHistory(org.lamsfoundation.lams.contentrepository * .ITicket, java.lang.Long) @@ -600,7 +596,7 @@ /* * (non-Javadoc) - * + * * @see * org.lamsfoundation.lams.contentrepository.IRepository#updateFileItem(org.lamsfoundation.lams.contentrepository. * ITicket, java.lang.Long, java.lang.String, java.io.InputStream, java.lang.String, java.lang.String) @@ -631,7 +627,7 @@ /* * (non-Javadoc) - * + * * @see * org.lamsfoundation.lams.contentrepository.IRepository#updatePackageItem(org.lamsfoundation.lams.contentrepository * .ITicket, java.lang.Long, java.lang.String, java.lang.String, java.lang.String) @@ -694,7 +690,7 @@ /* * (non-Javadoc) - * + * * @see * org.lamsfoundation.lams.contentrepository.IRepository#copyNodeVersion(org.lamsfoundation.lams.contentrepository. * ITicket, java.lang.Long, java.lang.Long) @@ -727,7 +723,7 @@ /* * (non-Javadoc) - * + * * @see * org.lamsfoundation.lams.contentrepository.IRepository#saveFile(org.lamsfoundation.lams.contentrepository.ITicket, * java.lang.Long, java.lang.String, java.lang.String, java.lang.String) @@ -808,7 +804,7 @@ /* * (non-Javadoc) - * + * * @see * org.lamsfoundation.lams.contentrepository.IRepository#updatePackageItem(org.lamsfoundation.lams.contentrepository * .ITicket, java.lang.Long, java.lang.String, java.lang.String, java.lang.String) @@ -834,7 +830,7 @@ /* * (non-Javadoc) - * + * * @see * org.lamsfoundation.lams.contentrepository.IRepository#updatePackageItem(org.lamsfoundation.lams.contentrepository * .ITicket, java.lang.Long, java.lang.String, java.lang.String, java.lang.String) @@ -854,53 +850,22 @@ } - @Override public boolean workspaceExists(ICredentials credentials, Long workspaceId) { return workspaceDAO.find(CrWorkspace.class, workspaceId) != null; } - @Override public boolean workspaceExists(ICredentials credentials, String workspaceName) { return workspaceDAO.findByName(workspaceName) != null; } - @Override - public InputStream daoGetFile(Long uuid, Long versionId) throws FileException { - return fileDAO.getFile(uuid, versionId); + /* ********** setters and getters for DAOs *******************/ + /** + * @return Returns the workspaceDAO. + */ + public IWorkspaceDAO getWorkspaceDAO() { + return workspaceDAO; } - @Override - public String daoWriteFile(Long uuid, Long versionId, InputStream is) throws FileException { - return fileDAO.writeFile(uuid, versionId, is); - } - - @Override - public int daoDelete(Long uuid, Long versionId) throws FileException { - return fileDAO.delete(uuid, versionId); - } - - @Override - public String daoGetFilePath(Long uuid, Long versionId) throws FileException { - return fileDAO.getFilePath(uuid, versionId); - } - - @Override - public boolean daoFileExists(Long uuid, Long versionId) throws FileException { - return fileDAO.fileExists(uuid, versionId); - } - - @Override - public List daoFindChildNodes(CrNodeVersion parentNodeVersion) { - return nodeDAO.findChildNodes(parentNodeVersion); - } - - @Override - public CrNode daoFindChildNode(CrNodeVersion parentNodeVersion, String relPath) { - return nodeDAO.findChildNode(parentNodeVersion, relPath); - } - - /* ********** setters and getters for DAOs *******************/ - /** * @param workspaceDAO * The workspaceDAO to set. @@ -910,22 +875,26 @@ } /** + * @return Returns the credentialDAO. + */ + public ICredentialDAO getCredentialDAO() { + return credentialDAO; + } + + /** * @param credentialDAO * The credentialDAO to set. */ public void setCredentialDAO(ICredentialDAO credentialDAO) { this.credentialDAO = credentialDAO; } + public INodeFactory getNodeFactory() { + return nodeFactory; + } + public void setNodeFactory(INodeFactory nodeFactory) { this.nodeFactory = nodeFactory; } - public void setFileDAO(IFileDAO fileDAO) { - this.fileDAO = fileDAO; - } - - public void setNodeDAO(INodeDAO nodeDAO) { - this.nodeDAO = nodeDAO; - } -} \ No newline at end of file +} Index: lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/SimpleVersionedNode.java =================================================================== diff -u -rd140daaaa506ac792804b3ce302724b3dde9c830 -rea80430beb4497f12c92db2580341f21750a5a43 --- lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/SimpleVersionedNode.java (.../SimpleVersionedNode.java) (revision d140daaaa506ac792804b3ce302724b3dde9c830) +++ lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/SimpleVersionedNode.java (.../SimpleVersionedNode.java) (revision ea80430beb4497f12c92db2580341f21750a5a43) @@ -21,6 +21,7 @@ * **************************************************************** */ + package org.lamsfoundation.lams.contentrepository.service; import java.io.File; @@ -52,13 +53,14 @@ import org.lamsfoundation.lams.contentrepository.NodeType; import org.lamsfoundation.lams.contentrepository.PropertyName; import org.lamsfoundation.lams.contentrepository.PropertyType; +import org.lamsfoundation.lams.contentrepository.dao.IFileDAO; +import org.lamsfoundation.lams.contentrepository.dao.INodeDAO; import org.lamsfoundation.lams.contentrepository.exception.FileException; import org.lamsfoundation.lams.contentrepository.exception.InvalidParameterException; import org.lamsfoundation.lams.contentrepository.exception.ItemNotFoundException; import org.lamsfoundation.lams.contentrepository.exception.RepositoryRuntimeException; import org.lamsfoundation.lams.contentrepository.exception.ValidationException; import org.lamsfoundation.lams.contentrepository.exception.ValueFormatException; -import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.FileUtil; /** @@ -103,11 +105,10 @@ private ITicket ticket = null; // transient data - using for grouping nodes in a session /* Spring configured varibles */ - private IRepositoryService repositoryService; - private IUserManagementService userManagementService; + private INodeDAO nodeDAO = null; + private IFileDAO fileDAO = null; + private INodeFactory nodeFactory = null; - private INodeFactory nodeFactory; - // TODO This is a case for AOP! /** * Check that all the necessary objects exists - node, nodeVersion, nodeDAO and fileDAO @@ -123,10 +124,13 @@ throw new RepositoryRuntimeException("Node details missing (nodeVersion=null). " + specialisedMessage); } - if (repositoryService == null) { - throw new RepositoryRuntimeException( - "Node details missing (repositoryService=null). " + specialisedMessage); + if (nodeDAO == null) { + throw new RepositoryRuntimeException("Node details missing (nodeDAO=null). " + specialisedMessage); } + + if (fileDAO == null) { + throw new RepositoryRuntimeException("Node details missing (fileDAO=null). " + specialisedMessage); + } } /** Add a child to the node. To be used by SimpleVersionedNode and the NodeFactory only */ @@ -144,7 +148,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.IVersionedNode#setProperty(java.lang.String, java.lang.String, * int) */ @@ -156,7 +160,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.IVersionedNode#setProperty(java.lang.String, java.lang.String) */ @Override @@ -167,7 +171,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.IVersionedNode#setProperty(java.lang.String, boolean) */ @Override @@ -178,7 +182,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.IVersionedNode#setProperty(java.lang.String, double) */ @Override @@ -189,7 +193,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.IVersionedNode#setProperty(java.lang.String, long) */ @Override @@ -200,7 +204,7 @@ /* * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.IVersionedNode#setProperty(java.lang.String, java.util.Calendar) */ @Override @@ -267,7 +271,7 @@ /** * (non-Javadoc) - * + * * @see org.lamsfoundation.lams.contentrepository.IVersionedNode#isNodeType(java.lang.String) */ @Override @@ -280,7 +284,7 @@ * Get the history for this node. Quite intensive operation * as it has to build all the data structures. Can't be easily * cached. - * + * * @return SortedSet of IVersionDetail objects, ordered by version */ @Override @@ -376,7 +380,7 @@ * of the caller to close the stream. Note: this should only be * called once the node is saved - do not call it directly after * setting the file stream - * + * * If the node is a package node, it will get the input stream * of the first file. */ @@ -386,7 +390,7 @@ if (isNodeType(NodeType.FILENODE)) { - return repositoryService.daoGetFile(node.getNodeId(), nodeVersion.getVersionId()); + return fileDAO.getFile(node.getNodeId(), nodeVersion.getVersionId()); } else if (isNodeType(NodeType.PACKAGENODE)) { @@ -412,7 +416,7 @@ /** * Set the file, passed in as an inputstream. The stream will be closed * when the file is saved. Only nodes of type FILENODE can have a file! - * + * * @param iStream * mandatory * @param filename @@ -474,7 +478,7 @@ * we could just be doing a setProperty save, in which case the file * will already exist. *