diff --git a/ccm-core/src/main/java/org/libreccm/core/GroupRepository.java b/ccm-core/src/main/java/org/libreccm/core/GroupRepository.java index 923ed56be..f881fc2ed 100644 --- a/ccm-core/src/main/java/org/libreccm/core/GroupRepository.java +++ b/ccm-core/src/main/java/org/libreccm/core/GroupRepository.java @@ -18,12 +18,11 @@ */ package org.libreccm.core; -import java.util.List; - import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; +import java.util.List; /** * A repository class for retrieving, storing and deleting {@link Group}s. @@ -59,7 +58,7 @@ public class GroupRepository extends AbstractEntityRepository { final List result = query.getResultList(); //Check if result list is empty and if not return the first element. - //If their ist a result than there can only be one because the + //If their is a result than there can only be one because the //name column of group has a unique constraint. if (result.isEmpty()) { return null; diff --git a/ccm-core/src/main/java/org/libreccm/core/PermissionRepository.java b/ccm-core/src/main/java/org/libreccm/core/PermissionRepository.java index a977bb6e9..c6cc33c7d 100644 --- a/ccm-core/src/main/java/org/libreccm/core/PermissionRepository.java +++ b/ccm-core/src/main/java/org/libreccm/core/PermissionRepository.java @@ -18,12 +18,11 @@ */ package org.libreccm.core; -import java.util.List; - import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; +import java.util.List; /** * Repository class for retrieving, storing and deleting permissions. @@ -57,7 +56,7 @@ public class PermissionRepository @Override public boolean isNew(final Permission entity) { if (entity == null) { - throw new IllegalArgumentException("Entity to save can't be null"); + throw new IllegalArgumentException("Entity to save can't be null."); } return entity.getPermissionId() == 0; } diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/BlobObject.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/BlobObject.java index 5631083b0..a39e47944 100644 --- a/ccm-docrepo/src/main/java/org/libreccm/docrepo/BlobObject.java +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/BlobObject.java @@ -26,6 +26,7 @@ import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.Lob; import javax.persistence.OneToOne; import javax.persistence.Table; import java.io.Serializable; @@ -37,6 +38,7 @@ import java.util.Objects; * will be persisted into the database. * * @author Tobias Osmers + * @version 01/10/2015 */ @Entity @Table(schema = "CCM_DOCREPO", name = "BLOB_OBJECTS") @@ -83,11 +85,11 @@ public class BlobObject implements Serializable { this.blobObjectId = blobObjectId; } - public Blob getContent() { + public byte[] getContent() { return content; } - public void setContent(Blob content) { + public void setContent(byte[] content) { this.content = content; } diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/File.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/File.java index 3e76a090c..f4cbb7311 100644 --- a/ccm-docrepo/src/main/java/org/libreccm/docrepo/File.java +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/File.java @@ -26,6 +26,7 @@ import javax.persistence.Table; * into the database. Instance variables are inherited from {@link Resource}. * * @author Tobias Osmers + * @version 01/10/2015 */ @Entity @Table(schema = "CCM_DOCREPO", name = "FILES") diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/Folder.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/Folder.java index cba686d18..4988ac23f 100644 --- a/ccm-docrepo/src/main/java/org/libreccm/docrepo/Folder.java +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/Folder.java @@ -26,6 +26,7 @@ import javax.persistence.Table; * into the database. Instance variables are inherited from {@link Resource}. * * @author Tobias Osmers + * @version 01/10/2015 */ @Entity @Table(schema = "CCM_DOCREPO", name = "FOLDERS") diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/RecUpdDocsPortlet.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/RecUpdDocsPortlet.java index 529e16dc8..7b12f2d16 100644 --- a/ccm-docrepo/src/main/java/org/libreccm/docrepo/RecUpdDocsPortlet.java +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/RecUpdDocsPortlet.java @@ -29,6 +29,7 @@ import javax.persistence.Table; * form {@link Portlet}. * * @author Tobias Osmers + * @version 01/10/2015 */ @Entity @Table(schema = "CCM_DOCREPO", name = "REC_UPD_DOCS_PORTLETS") diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/Repository.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/Repository.java index 3f56162d7..2355fd742 100644 --- a/ccm-docrepo/src/main/java/org/libreccm/docrepo/Repository.java +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/Repository.java @@ -29,6 +29,7 @@ import javax.persistence.Table; * database. Instance variables are inherited from {@link Application}. * * @author Tobias Osmers + * @version 01/10/2015 */ @Entity @Table(schema = "CCM_DOCREPO", name = "REPOSITORIES") diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/Resource.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/Resource.java index a23957f96..32882d4b1 100644 --- a/ccm-docrepo/src/main/java/org/libreccm/docrepo/Resource.java +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/Resource.java @@ -45,14 +45,17 @@ import java.util.List; * {@link Folder} * * @author Tobias Osmers + * @version 01/10/2015 */ @Entity(name = "DocRepoResource") @Table(schema = "CCM_DOCREPO", name = "RESOURCES") @NamedQueries({ - @NamedQuery(name = "findChildrenByParent", - query = "SELECT r FROM DocRepoResource r WHERE r.parent = :parentID"), @NamedQuery(name = "findResourceByPath", - query = "SELECT r FROM DocRepoResource r WHERE r.path = :pathName")}) + query = "SELECT r FROM DocRepoResource r WHERE r.path = :pathName"), + @NamedQuery(name = "findCreatedResourcesFromUser", + query = "SELECT r FROM DocRepoResource r WHERE r.creationUser = :user"), + @NamedQuery(name = "findModifiedResourcesFromUser", + query = "SELECT r FROM DocRepoResource r WHERE r.lastModifiedUser = :user")}) public abstract class Resource extends CcmObject { private static final long serialVersionUID = -910317798106611214L; @@ -60,7 +63,7 @@ public abstract class Resource extends CcmObject { /** * Name of the {@code Resource}. */ - @Column(name = "NAME") + @Column(name = "NAME", length = 512, unique = true, nullable = false) @NotBlank private String name; @@ -80,7 +83,7 @@ public abstract class Resource extends CcmObject { /** * Path to the {@code Resource}. */ - @Column(name = "PATH") + @Column(name = "PATH", unique = true) @NotBlank private String path; diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/ResourceManager.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/ResourceManager.java new file mode 100644 index 000000000..776f93100 --- /dev/null +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/ResourceManager.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2015 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.docrepo; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; + +/** + * Manager class for complex operations on {@code Resource}-objects. + * + * @author Tobias Osmers + * @version 01/10/2015 + */ +@RequestScoped +public class ResourceManager { + + @Inject + private transient ResourceRepository resourceRepository; + + + + + +} \ No newline at end of file diff --git a/ccm-docrepo/src/main/java/org/libreccm/docrepo/ResourceRepository.java b/ccm-docrepo/src/main/java/org/libreccm/docrepo/ResourceRepository.java index cdbf19059..761bf08f0 100644 --- a/ccm-docrepo/src/main/java/org/libreccm/docrepo/ResourceRepository.java +++ b/ccm-docrepo/src/main/java/org/libreccm/docrepo/ResourceRepository.java @@ -20,14 +20,26 @@ package org.libreccm.docrepo; import org.libreccm.auditing.AbstractAuditedEntityRepository; +import org.libreccm.core.User; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.TypedQuery; +import java.util.List; /** * Repository class for retrieving, storing and deleting {@code Resource}s. * * @author Tobias Osmers + * @version 01/10/2015 */ +@RequestScoped public class ResourceRepository extends AbstractAuditedEntityRepository { + @Inject + private transient EntityManager entityManager; + @Override public Long getEntityId(Resource entity) { return entity.getObjectId(); @@ -40,8 +52,64 @@ public class ResourceRepository extends AbstractAuditedEntityRepository query = entityManager.createNamedQuery( + "findResourceByPath", Resource.class); + query.setParameter("pathName", pathName); + + final List result = query.getResultList(); + + //Check if the result list is empty and if not return the first + //element. If their is a result than there can only be one because + //the path column of resource has a unique constraint. + return result.isEmpty() ? null : result.get(0); + } + + /** + * Retrieve the {@code Resource}s, a given {@link User} created. + * + * @param creator The {@link User}, who created the {@code Resource}s. + * + * @return The {@code Resource}s, created by the given {@link User}, if there + * are such {@code Resource}s, {@code EmptyList} if not. + */ + public List findForCreator(final User creator) { + final TypedQuery query = entityManager.createNamedQuery( + "findCreatedResourcesFromUser", Resource.class); + query.setParameter("user", creator); + + return query.getResultList(); + } + + /** + * Retrieve the {@code Resource}s, a given {@link User} last modified. + * + * @param modifier The {@link User}, who last modified the {@code Resource}s. + * + * @return The {@code Resource}s, last modified by the given {@link User}, if + * there are such {@code Resource}s, {@code EmptyList} if not. + */ + public List findForModifier(final User modifier) { + final TypedQuery query = entityManager.createNamedQuery( + "findModifiedResourcesFromUser", Resource.class); + query.setParameter("user", modifier); + + return query.getResultList(); + } }