mirror of
https://github.com/sismics/docs.git
synced 2025-12-14 02:06:25 +00:00
#159: return the active step in GET /document/id
This commit is contained in:
@@ -217,7 +217,7 @@ public class DocumentDao {
|
||||
if (!Strings.isNullOrEmpty(criteria.getSearch()) || !Strings.isNullOrEmpty(criteria.getFullSearch())) {
|
||||
LuceneDao luceneDao = new LuceneDao();
|
||||
Set<String> documentIdList = luceneDao.search(criteria.getSearch(), criteria.getFullSearch());
|
||||
if (documentIdList.size() == 0) {
|
||||
if (documentIdList.isEmpty()) {
|
||||
// If the search doesn't find any document, the request should return nothing
|
||||
documentIdList.add(UUID.randomUUID().toString());
|
||||
}
|
||||
|
||||
@@ -6,7 +6,9 @@ import com.sismics.docs.core.util.AuditLogUtil;
|
||||
import com.sismics.util.context.ThreadLocalContext;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.Query;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
@@ -36,4 +38,12 @@ public class RouteDao {
|
||||
|
||||
return route.getId();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<Route> getActiveRoutes(String documentId) {
|
||||
EntityManager em = ThreadLocalContext.get().getEntityManager();
|
||||
Query q = em.createQuery("from Route r where r.documentId = :documentId and r.deleteDate is null order by r.createDate desc");
|
||||
q.setParameter("documentId", documentId);
|
||||
return q.getResultList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,9 @@ import com.sismics.docs.core.model.jpa.RouteStep;
|
||||
import com.sismics.util.context.ThreadLocalContext;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.Query;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
@@ -30,4 +32,12 @@ public class RouteStepDao {
|
||||
|
||||
return routeStep.getId();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<RouteStep> getRouteSteps(String routeId) {
|
||||
EntityManager em = ThreadLocalContext.get().getEntityManager();
|
||||
Query q = em.createQuery("from RouteStep r where r.routeId = :routeId and r.deleteDate is null order by r.order asc");
|
||||
q.setParameter("routeId", routeId);
|
||||
return q.getResultList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +1,11 @@
|
||||
package com.sismics.docs.core.model.jpa;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.EnumType;
|
||||
import javax.persistence.Enumerated;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import com.google.common.base.MoreObjects;
|
||||
import com.sismics.docs.core.constant.PermType;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* ACL entity.
|
||||
*
|
||||
@@ -34,6 +28,8 @@ public class Acl implements Loggable {
|
||||
@Enumerated(EnumType.STRING)
|
||||
private PermType perm;
|
||||
|
||||
// TODO Add ACL type enum: USER, ROUTING
|
||||
|
||||
/**
|
||||
* ACL source ID.
|
||||
*/
|
||||
|
||||
@@ -24,7 +24,6 @@ import java.security.Security;
|
||||
* @author bgamard
|
||||
*/
|
||||
public class EncryptionUtil {
|
||||
|
||||
/**
|
||||
* Salt.
|
||||
*/
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
package com.sismics.docs.core.util;
|
||||
|
||||
import com.sismics.util.context.ThreadLocalContext;
|
||||
|
||||
/**
|
||||
* Entity manager utils.
|
||||
*
|
||||
* @author jtremeaux
|
||||
*/
|
||||
public class EntityManagerUtil {
|
||||
/**
|
||||
* Flush the entity manager session.
|
||||
*/
|
||||
public static void flush() {
|
||||
ThreadLocalContext.get().getEntityManager().flush();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.sismics.docs.core.util;
|
||||
|
||||
import com.sismics.docs.core.dao.jpa.RouteDao;
|
||||
import com.sismics.docs.core.dao.jpa.RouteStepDao;
|
||||
import com.sismics.docs.core.model.jpa.Route;
|
||||
import com.sismics.docs.core.model.jpa.RouteStep;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Routing utilities.
|
||||
*
|
||||
* @author bgamard
|
||||
*/
|
||||
public class RoutingUtil {
|
||||
/**
|
||||
* Get the current route step from a document.
|
||||
*
|
||||
* @param documentId Document ID
|
||||
* @return Active route step
|
||||
*/
|
||||
public static RouteStep getCurrentStep(String documentId) {
|
||||
// TODO Optimize
|
||||
RouteDao routeDao = new RouteDao();
|
||||
List<Route> routeList = routeDao.getActiveRoutes(documentId);
|
||||
if (routeList.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Route route = routeList.get(0);
|
||||
RouteStepDao routeStepDao = new RouteStepDao();
|
||||
List<RouteStep> routeStepList = routeStepDao.getRouteSteps(route.getId());
|
||||
for (RouteStep routeStep : routeStepList) {
|
||||
if (routeStep.getEndDate() == null) {
|
||||
return routeStep;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.sismics.docs.core.util;
|
||||
|
||||
import com.sismics.docs.core.constant.AclTargetType;
|
||||
import com.sismics.docs.core.dao.jpa.GroupDao;
|
||||
import com.sismics.docs.core.dao.jpa.UserDao;
|
||||
import com.sismics.docs.core.model.jpa.Group;
|
||||
import com.sismics.docs.core.model.jpa.User;
|
||||
|
||||
/**
|
||||
* Security utilities.
|
||||
*
|
||||
* @author bgamard
|
||||
*/
|
||||
public class SecurityUtil {
|
||||
/**
|
||||
* Get an ACL target ID from an object name and type.
|
||||
*
|
||||
* @param name Object name
|
||||
* @param type Object type
|
||||
* @return Target ID
|
||||
*/
|
||||
public static String getTargetIdFromName(String name, AclTargetType type) {
|
||||
switch (type) {
|
||||
case USER:
|
||||
UserDao userDao = new UserDao();
|
||||
User user = userDao.getActiveByUsername(name);
|
||||
if (user != null) {
|
||||
return user.getId();
|
||||
}
|
||||
case GROUP:
|
||||
GroupDao groupDao = new GroupDao();
|
||||
Group group = groupDao.getActiveByName(name);
|
||||
if (group != null) {
|
||||
return group.getId();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
package com.sismics.docs.core.util;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.PushbackInputStream;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
/**
|
||||
* Stream utilities.
|
||||
*
|
||||
* @author bgamard
|
||||
*/
|
||||
public class StreamUtil {
|
||||
|
||||
/**
|
||||
* Detects if the stream is gzipped, and returns a uncompressed stream according to this.
|
||||
*
|
||||
* @param is InputStream
|
||||
* @return InputStream
|
||||
* @throws IOException
|
||||
*/
|
||||
public static InputStream detectGzip(InputStream is) throws IOException {
|
||||
PushbackInputStream pb = new PushbackInputStream(is, 2);
|
||||
byte [] signature = new byte[2];
|
||||
pb.read(signature);
|
||||
pb.unread(signature);
|
||||
if(signature[0] == (byte) GZIPInputStream.GZIP_MAGIC && signature[1] == (byte) (GZIPInputStream.GZIP_MAGIC >> 8)) {
|
||||
return new GZIPInputStream(pb);
|
||||
} else {
|
||||
return pb;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user