1
0
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:
Benjamin Gamard
2018-01-31 22:07:38 +01:00
parent 5e713f0c2a
commit 503cfff82e
17 changed files with 176 additions and 119 deletions

View File

@@ -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());
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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.
*/

View File

@@ -24,7 +24,6 @@ import java.security.Security;
* @author bgamard
*/
public class EncryptionUtil {
/**
* Salt.
*/

View File

@@ -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();
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}
}