Application Listener add to correctly shutdown the jackrabbit repository
This commit is contained in:
parent
c1ab8333b8
commit
188d11ff70
|
@ -7,7 +7,7 @@
|
|||
<dependent-module archiveName="authorization-control-library-1.1.0-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/authorization-control-library/authorization-control-library">
|
||||
<dependency-type>uses</dependency-type>
|
||||
</dependent-module>
|
||||
<dependent-module archiveName="storagehub-model-1.0.5-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/storagehub-model/storagehub-model">
|
||||
<dependent-module archiveName="storagehub-model-1.0.6-SNAPSHOT.jar" deploy-path="/WEB-INF/lib" handle="module:/resource/storagehub-model/storagehub-model">
|
||||
<dependency-type>uses</dependency-type>
|
||||
</dependent-module>
|
||||
<property name="context-root" value="storagehub"/>
|
||||
|
|
|
@ -32,6 +32,7 @@ public class StorageHub extends Application {
|
|||
classes.add(UserManager.class);
|
||||
classes.add(GroupManager.class);
|
||||
classes.add(SerializableErrorEntityTextWriter.class);
|
||||
classes.add(MyApplicationListener.class);
|
||||
return classes;
|
||||
}
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ import javax.jcr.query.Query;
|
|||
import javax.jcr.version.Version;
|
||||
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
import org.apache.jackrabbit.util.ISO9075;
|
||||
import org.apache.jackrabbit.util.Text;
|
||||
import org.gcube.common.authorization.library.provider.AuthorizationProvider;
|
||||
import org.gcube.common.scope.api.ScopeProvider;
|
||||
|
@ -109,15 +110,30 @@ public class Utils {
|
|||
}
|
||||
|
||||
|
||||
public static <T extends Item> List<T> serachByNameOnFolder(Session ses, Node parent, List<String> excludes, Range range, boolean showHidden, Class<? extends Item> nodeTypeToInclude, String nameParam) throws RepositoryException, BackendGenericError{
|
||||
String xpath = String.format("/jcr:root%s//element(*,nthl:workspaceItem)[jcr:like(@jcr:title, '%s')]",ISO9075.encodePath(parent.getPath()), nameParam);
|
||||
|
||||
//String query = String.format("SELECT * FROM [nthl:workspaceLeafItem] AS node WHERE ISDESCENDANTNODE('%s') ORDER BY node.[jcr:lastModified] DESC ",vreFolder.getPath());
|
||||
logger.trace("query for search is {}",xpath);
|
||||
|
||||
Query jcrQuery = ses.getWorkspace().getQueryManager().createQuery(xpath, Query.XPATH);
|
||||
|
||||
NodeIterator it = jcrQuery.execute().getNodes();
|
||||
return getItemListFromNodeIterator(it, excludes, range, showHidden, nodeTypeToInclude);
|
||||
}
|
||||
|
||||
|
||||
public static <T extends Item> List<T> getItemList(Node parent, List<String> excludes, Range range, boolean showHidden, Class<? extends Item> nodeTypeToInclude) throws RepositoryException, BackendGenericError{
|
||||
|
||||
logger.debug("getting children of node {}", parent.getIdentifier());
|
||||
|
||||
List<T> returnList = new ArrayList<T>();
|
||||
logger.trace("getting children of node {}", parent.getIdentifier());
|
||||
long start = System.currentTimeMillis();
|
||||
NodeIterator iterator = parent.getNodes();
|
||||
logger.trace("time to get iterator {}",(System.currentTimeMillis()-start));
|
||||
return getItemListFromNodeIterator(iterator, excludes, range, showHidden, nodeTypeToInclude);
|
||||
}
|
||||
|
||||
private static <T extends Item> List<T> getItemListFromNodeIterator(NodeIterator iterator, List<String> excludes, Range range, boolean showHidden, Class<? extends Item> nodeTypeToInclude) throws RepositoryException, BackendGenericError{
|
||||
List<T> returnList = new ArrayList<T>();
|
||||
|
||||
logger.trace("nodeType is {}",nodeTypeToInclude);
|
||||
int count =0;
|
||||
logger.trace("selected range is {}", range);
|
||||
|
@ -125,12 +141,12 @@ public class Utils {
|
|||
while (iterator.hasNext()){
|
||||
Node current = iterator.nextNode();
|
||||
|
||||
logger.debug("current node "+current.getName());
|
||||
logger.trace("current node "+current.getName());
|
||||
|
||||
if (isToExclude(current, showHidden))
|
||||
continue;
|
||||
|
||||
logger.debug("current node not excluded "+current.getName());
|
||||
logger.trace("current node not excluded "+current.getName());
|
||||
|
||||
if (range==null || (count>=range.getStart() && returnList.size()<range.getLimit())) {
|
||||
T item = node2Item.getFilteredItem(current, excludes, nodeTypeToInclude);
|
||||
|
@ -166,13 +182,13 @@ public class Utils {
|
|||
Node currentNode = session.getNodeByIdentifier(directory.getId());
|
||||
queue.push(directory);
|
||||
Deque<Item> tempQueue = new LinkedList<Item>();
|
||||
logger.debug("adding directory {}",currentNode.getPath());
|
||||
logger.trace("adding directory {}",currentNode.getPath());
|
||||
for (Item item : Utils.getItemList(currentNode,Excludes.GET_ONLY_CONTENT, null, false, null)){
|
||||
if (excludes.contains(item.getId())) continue;
|
||||
if (item instanceof FolderItem)
|
||||
tempQueue.addAll(getAllNodesForZip((FolderItem) item, session, accountingHandler, excludes));
|
||||
else if (item instanceof AbstractFileItem){
|
||||
logger.debug("adding file {}",item.getPath());
|
||||
logger.trace("adding file {}",item.getPath());
|
||||
AbstractFileItem fileItem = (AbstractFileItem) item;
|
||||
accountingHandler.createReadObj(fileItem.getTitle(), session, session.getNodeByIdentifier(item.getId()), false);
|
||||
queue.addLast(item);
|
||||
|
@ -190,9 +206,9 @@ public class Utils {
|
|||
Item item = queue.pop();
|
||||
if (item instanceof FolderItem) {
|
||||
actualPath = Paths.getPath(item.getPath());
|
||||
logger.debug("actualPath is {}",actualPath.toPath());
|
||||
logger.trace("actualPath is {}",actualPath.toPath());
|
||||
String name = Paths.remove(actualPath, originalPath).toPath().replaceFirst("/", "");
|
||||
logger.debug("writing dir {}",name);
|
||||
logger.trace("writing dir {}",name);
|
||||
if (name.isEmpty()) continue;
|
||||
try {
|
||||
zos.putNextEntry(new ZipEntry(name));
|
||||
|
@ -208,7 +224,7 @@ public class Utils {
|
|||
}
|
||||
try(BufferedInputStream is = new BufferedInputStream(streamToWrite)){
|
||||
String name = (Paths.remove(actualPath, originalPath).toPath()+item.getName()).replaceFirst("/", "");
|
||||
logger.debug("writing file {}",name);
|
||||
logger.trace("writing file {}",name);
|
||||
zos.putNextEntry(new ZipEntry(name));
|
||||
copyStream(is, zos);
|
||||
}catch (Exception e) {
|
||||
|
@ -285,7 +301,7 @@ public class Utils {
|
|||
|
||||
String nameTocheck = ext.isEmpty()? String.format("%s(*)",filename): String.format("%s(*).%s",filename, ext);
|
||||
|
||||
logger.debug("filename is {}, extension is {} , and name to check is {}", filename, ext, nameTocheck);
|
||||
logger.trace("filename is {}, extension is {} , and name to check is {}", filename, ext, nameTocheck);
|
||||
|
||||
NodeIterator ni = destination.getNodes(nameTocheck);
|
||||
int maxval = 0;
|
||||
|
|
|
@ -56,7 +56,7 @@ public class Item2NodeConverter {
|
|||
field.setAccessible(true);
|
||||
try{
|
||||
//Class<?> returnType = field.getType();
|
||||
logger.debug("creating node - added field {}",field.getName());
|
||||
logger.trace("creating node - added field {}",field.getName());
|
||||
Values values = getObjectValue(field.getType(), field.get(item));
|
||||
if (values.isMulti()) newNode.setProperty(attribute.value(), values.getValues());
|
||||
else newNode.setProperty(attribute.value(), values.getValue());
|
||||
|
@ -67,7 +67,7 @@ public class Item2NodeConverter {
|
|||
NodeAttribute nodeAttribute = field.getAnnotation(NodeAttribute.class);
|
||||
if (nodeAttribute.isReadOnly()) continue;
|
||||
String nodeName = nodeAttribute.value();
|
||||
logger.debug("retrieving field node "+field.getName());
|
||||
logger.trace("retrieving field node "+field.getName());
|
||||
field.setAccessible(true);
|
||||
try{
|
||||
Object obj = field.get(item);
|
||||
|
@ -129,7 +129,7 @@ public class Item2NodeConverter {
|
|||
}
|
||||
|
||||
} else if (field.isAnnotationPresent(ListNodes.class)){
|
||||
logger.debug("found field {} of type annotated as ListNodes in class {} on node {}", field.getName(), object.getClass().getName(), newNode.getName());
|
||||
logger.trace("found field {} of type annotated as ListNodes in class {} on node {}", field.getName(), object.getClass().getName(), newNode.getName());
|
||||
field.setAccessible(true);
|
||||
List<Object> toSetList = (List<Object>) field.get(object);
|
||||
|
||||
|
|
|
@ -127,7 +127,7 @@ public class Node2ItemConverter {
|
|||
try{
|
||||
Class<?> returnType = field.getType();
|
||||
field.set(item, getPropertyValue(returnType, node.getProperty(attribute.value())));
|
||||
logger.debug("retrieve item - added field {}",field.getName());
|
||||
logger.trace("retrieve item - added field {}",field.getName());
|
||||
}catch(PathNotFoundException e){
|
||||
logger.trace("the current node dosn't contain {} property",attribute.value());
|
||||
} catch (Exception e ) {
|
||||
|
@ -320,7 +320,7 @@ public class Node2ItemConverter {
|
|||
public boolean checkNodeType(Node node, Class<? extends Item> classToCompare) throws BackendGenericError{
|
||||
try {
|
||||
|
||||
logger.info("class from nodetype is {} and class to compare is {}",ClassHandler.instance().get(node.getPrimaryNodeType().getName()), classToCompare);
|
||||
logger.trace("class from nodetype is {} and class to compare is {}",ClassHandler.instance().get(node.getPrimaryNodeType().getName()), classToCompare);
|
||||
|
||||
return classToCompare.isAssignableFrom(ClassHandler.instance().get(node.getPrimaryNodeType().getName()));
|
||||
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
package org.gcube.data.access.storagehub.handlers;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import javax.jcr.Credentials;
|
||||
|
@ -17,10 +21,11 @@ import javax.jcr.observation.Event;
|
|||
import javax.jcr.observation.EventJournal;
|
||||
import javax.jcr.query.Query;
|
||||
|
||||
import org.apache.jackrabbit.util.ISO9075;
|
||||
import org.gcube.common.storagehub.model.Excludes;
|
||||
import org.gcube.common.storagehub.model.NodeConstants;
|
||||
import org.gcube.common.storagehub.model.items.Item;
|
||||
import org.gcube.data.access.storagehub.Constants;
|
||||
import org.gcube.common.storagehub.model.types.NodeProperty;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
|
@ -53,20 +58,50 @@ public class VREQueryRetriever implements Callable<List<Item>> {
|
|||
try {
|
||||
long start = System.currentTimeMillis();
|
||||
ses = repository.login(credentials);
|
||||
String query = String.format("SELECT * FROM [nthl:workspaceLeafItem] AS node WHERE ISDESCENDANTNODE('%s') ORDER BY node.[jcr:lastModified] DESC ",vreFolder.getPath());
|
||||
logger.trace("query for recents is {}",query);
|
||||
Query jcrQuery = ses.getWorkspace().getQueryManager().createQuery(query, Constants.QUERY_LANGUAGE);
|
||||
|
||||
Calendar now = Calendar.getInstance();
|
||||
now.add(Calendar.YEAR, -1);
|
||||
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH);
|
||||
String formattedDate = formatter.format(now.getTime());
|
||||
|
||||
|
||||
String xpath = String.format("/jcr:root%s//element(*,nthl:workspaceLeafItem)[@jcr:lastModified>xs:dateTime('%s')] order by @jcr:lastModified descending",ISO9075.encodePath(vreFolder.getPath()),formattedDate);
|
||||
|
||||
//String query = String.format("SELECT * FROM [nthl:workspaceLeafItem] AS node WHERE ISDESCENDANTNODE('%s') ORDER BY node.[jcr:lastModified] DESC ",vreFolder.getPath());
|
||||
logger.debug("query for recents is {}",xpath);
|
||||
|
||||
Query jcrQuery = ses.getWorkspace().getQueryManager().createQuery(xpath, Query.XPATH);
|
||||
|
||||
jcrQuery.setLimit(CACHE_DIMENSION);
|
||||
lastTimestamp = System.currentTimeMillis();
|
||||
NodeIterator it = jcrQuery.execute().getNodes();
|
||||
logger.trace("query for recents took {}",System.currentTimeMillis()-start);
|
||||
logger.debug("query for recents took {}",System.currentTimeMillis()-start);
|
||||
while (it.hasNext()) {
|
||||
Node node = it.nextNode();
|
||||
|
||||
//long lastModifiedTimeItem = node.getProperty(NodeProperty.LAST_MODIFIED.toString()).getLong();
|
||||
|
||||
//logger.debug("RECENTS - node {} has timestamp {} ", node.getProperty(NodeProperty.TITLE.toString()).getString(), lastModifiedTimeItem);
|
||||
/*
|
||||
if(cachedList.size()<=CACHE_DIMENSION || lastModifiedTimeItem>cachedList.get(CACHE_DIMENSION-1).getLastModificationTime().getTimeInMillis()) {
|
||||
logger.debug("cachedList contains {}",cachedList.size());
|
||||
if(cachedList.size()>=CACHE_DIMENSION) cachedList.remove(CACHE_DIMENSION-1);
|
||||
Item item =node2Item.getItem(node, Excludes.EXCLUDE_ACCOUNTING);
|
||||
cachedList.add(item);
|
||||
logger.trace("adding item {} with node {}",item.getTitle(), node.getName());
|
||||
int insertposition =0;
|
||||
for(Item cachedItem: cachedList) {
|
||||
if (cachedItem.getLastModificationTime().before(item.getLastModificationTime()))
|
||||
break;
|
||||
insertposition++;
|
||||
}
|
||||
logger.trace("creating objects took {}",System.currentTimeMillis()-start);
|
||||
cachedList.add(insertposition, item);
|
||||
logger.debug("RECENTS - adding item {} with node {} in position {}",item.getTitle(), node.getName(), insertposition);
|
||||
}*/
|
||||
Item item = node2Item.getItem(node, Excludes.EXCLUDE_ACCOUNTING);
|
||||
logger.debug("RECENTS - adding item {} with timestamp {}",item.getTitle(), item.getLastModificationTime().getTimeInMillis());
|
||||
cachedList.add(item);
|
||||
|
||||
}
|
||||
logger.debug("creating objects took {}",System.currentTimeMillis()-start);
|
||||
if (cachedList.size()<=10) return cachedList;
|
||||
else return cachedList.subList(0, 10);
|
||||
} catch (Exception e) {
|
||||
|
|
|
@ -108,9 +108,9 @@ public class GroupManager {
|
|||
log.info("group {} found",group.getPrincipal().getName());
|
||||
groups.add(group.getPrincipal().getName());
|
||||
}
|
||||
}catch(Exception e) {
|
||||
log.error("jcr error getting groups", e);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError(e));
|
||||
}catch(RepositoryException re ){
|
||||
log.error("jcr error creating item", re);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError("jcr error creating item", re));
|
||||
} finally {
|
||||
if (session!=null)
|
||||
session.logout();
|
||||
|
@ -174,9 +174,9 @@ public class GroupManager {
|
|||
if (authorizable.isGroup())
|
||||
authorizable.remove();
|
||||
session.save();
|
||||
}catch(Exception e) {
|
||||
log.error("jcr error getting users", e);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError(e));
|
||||
}catch(RepositoryException re ){
|
||||
log.error("jcr error creating item", re);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError("jcr error creating item", re));
|
||||
} finally {
|
||||
if (session!=null)
|
||||
session.logout();
|
||||
|
@ -270,8 +270,8 @@ public class GroupManager {
|
|||
log.error(she.getErrorMessage(), she);
|
||||
GXOutboundErrorResponse.throwException(she, Response.Status.fromStatusCode(she.getStatus()));
|
||||
}catch(RepositoryException re ){
|
||||
log.error("removing admin to VREFolder", re);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError("jcr error removing admin to VREFolder", re));
|
||||
log.error("jcr error creating item", re);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError("jcr error creating item", re));
|
||||
}finally {
|
||||
if (session!=null)
|
||||
session.logout();
|
||||
|
@ -307,9 +307,12 @@ public class GroupManager {
|
|||
|
||||
}
|
||||
|
||||
}catch(Exception e) {
|
||||
log.error("jcr error getting admins of group {}", groupId, e);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError(e));
|
||||
}catch(StorageHubException she ){
|
||||
log.error(she.getErrorMessage(), she);
|
||||
GXOutboundErrorResponse.throwException(she, Response.Status.fromStatusCode(she.getStatus()));
|
||||
}catch(RepositoryException re ){
|
||||
log.error("jcr error creating item", re);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError("jcr error creating item", re));
|
||||
}finally {
|
||||
if (session!=null)
|
||||
session.logout();
|
||||
|
@ -354,9 +357,12 @@ public class GroupManager {
|
|||
session.getWorkspace().clone(session.getWorkspace().getName(), folder.getPath(),userPath , false);
|
||||
|
||||
session.save();
|
||||
}catch(Exception e) {
|
||||
log.error("jcr error adding user {} to group {}", userId, groupId, e);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError(e));
|
||||
}catch(StorageHubException she ){
|
||||
log.error(she.getErrorMessage(), she);
|
||||
GXOutboundErrorResponse.throwException(she, Response.Status.fromStatusCode(she.getStatus()));
|
||||
}catch(RepositoryException re ){
|
||||
log.error("jcr error creating item", re);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError("jcr error creating item", re));
|
||||
}finally {
|
||||
if (session!=null)
|
||||
session.logout();
|
||||
|
@ -405,9 +411,12 @@ public class GroupManager {
|
|||
success = group.removeMember(user);
|
||||
|
||||
session.save();
|
||||
}catch(Exception e) {
|
||||
log.error("jcr error adding user {} to group {}", userId, groupId, e);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError(e));
|
||||
}catch(StorageHubException she ){
|
||||
log.error(she.getErrorMessage(), she);
|
||||
GXOutboundErrorResponse.throwException(she, Response.Status.fromStatusCode(she.getStatus()));
|
||||
}catch(RepositoryException re ){
|
||||
log.error("jcr error creating item", re);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError("jcr error creating item", re));
|
||||
} finally {
|
||||
if (session!=null)
|
||||
session.logout();
|
||||
|
@ -445,9 +454,12 @@ public class GroupManager {
|
|||
}
|
||||
|
||||
|
||||
}catch(Exception e) {
|
||||
log.error("jcr error getting users of group {}", groupId, e);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError(e));
|
||||
}catch(StorageHubException she ){
|
||||
log.error(she.getErrorMessage(), she);
|
||||
GXOutboundErrorResponse.throwException(she, Response.Status.fromStatusCode(she.getStatus()));
|
||||
}catch(RepositoryException re ){
|
||||
log.error("jcr error creating item", re);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError("jcr error creating item", re));
|
||||
}finally {
|
||||
if (session!=null)
|
||||
session.logout();
|
||||
|
|
|
@ -250,6 +250,34 @@ public class ItemsManager {
|
|||
return new ItemList(toReturn);
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("{id}/search")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public ItemList searchItems(@QueryParam("showHidden") Boolean showHidden, @QueryParam("exclude") List<String> excludes, @QueryParam("onlyType") String nodeType,@QueryParam("name") String name ){
|
||||
InnerMethodName.instance.set("listById");
|
||||
Session ses = null;
|
||||
List<? extends Item> toReturn = null;
|
||||
try{
|
||||
ses = repository.getRepository().login(CredentialHandler.getAdminCredentials(context));
|
||||
authChecker.checkReadAuthorizationControl(ses, id);
|
||||
toReturn = Utils.serachByNameOnFolder(ses, ses.getNodeByIdentifier(id), excludes, null, showHidden==null?false:showHidden, nodeType!=null ? ClassHandler.instance().get(nodeType) : null, name);
|
||||
}catch (ItemNotFoundException e) {
|
||||
log.error("id {} not found",id,e);
|
||||
GXOutboundErrorResponse.throwException(new IdNotFoundException(id, e), Status.NOT_FOUND);
|
||||
}catch(RepositoryException re){
|
||||
log.error("jcr error getting children", re);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError(re));
|
||||
}catch(StorageHubException she ){
|
||||
log.error(she.getErrorMessage(), she);
|
||||
GXOutboundErrorResponse.throwException(she, Response.Status.fromStatusCode(she.getStatus()));
|
||||
}finally{
|
||||
if (ses!=null)
|
||||
ses.logout();
|
||||
}
|
||||
|
||||
return new ItemList(toReturn);
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("{id}/children/paged")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
|
|
|
@ -8,6 +8,8 @@ import java.util.List;
|
|||
import javax.inject.Inject;
|
||||
import javax.jcr.Node;
|
||||
import javax.jcr.NodeIterator;
|
||||
import javax.jcr.PathNotFoundException;
|
||||
import javax.jcr.RepositoryException;
|
||||
import javax.jcr.query.QueryResult;
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.ws.rs.Consumes;
|
||||
|
@ -20,6 +22,7 @@ import javax.ws.rs.PathParam;
|
|||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
import org.apache.jackrabbit.api.JackrabbitSession;
|
||||
import org.apache.jackrabbit.api.security.user.Authorizable;
|
||||
|
@ -31,6 +34,7 @@ import org.gcube.common.authorization.control.annotations.AuthorizationControl;
|
|||
import org.gcube.common.authorization.library.provider.AuthorizationProvider;
|
||||
import org.gcube.common.gxrest.response.outbound.GXOutboundErrorResponse;
|
||||
import org.gcube.common.storagehub.model.exceptions.BackendGenericError;
|
||||
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
||||
import org.gcube.common.storagehub.model.exceptions.UserNotAuthorizedException;
|
||||
import org.gcube.common.storagehub.model.types.NodeProperty;
|
||||
import org.gcube.data.access.storagehub.Constants;
|
||||
|
@ -122,9 +126,12 @@ public class UserManager {
|
|||
Utils.createFolderInternally(session, workspaceFolder, Constants.VRE_FOLDER_PARENT_NAME, "special folder container of "+user, false, user, null);
|
||||
|
||||
session.save();
|
||||
}catch(Exception e) {
|
||||
log.error("jcr error creating user {}", user, e);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError(e));
|
||||
}catch(StorageHubException she ){
|
||||
log.error(she.getErrorMessage(), she);
|
||||
GXOutboundErrorResponse.throwException(she, Response.Status.fromStatusCode(she.getStatus()));
|
||||
}catch(RepositoryException re ){
|
||||
log.error("jcr error creating item", re);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError("jcr error creating item", re));
|
||||
} finally {
|
||||
if (session!=null)
|
||||
session.logout();
|
||||
|
@ -169,14 +176,24 @@ public class UserManager {
|
|||
}
|
||||
|
||||
Authorizable authorizable = usrManager.getAuthorizable(new PrincipalImpl(user));
|
||||
if (!authorizable.isGroup()) {
|
||||
if (authorizable!=null && !authorizable.isGroup()) {
|
||||
log.info("removing user {}", user);
|
||||
authorizable.remove();
|
||||
} else log.warn("the user {} was already deleted", user);
|
||||
|
||||
org.gcube.common.storagehub.model.Path homePath = Utils.getHome(user);
|
||||
try {
|
||||
session.getNode(homePath.toPath()).remove();
|
||||
} catch (PathNotFoundException e) {
|
||||
log.warn("{} home dir was already deleted", user);
|
||||
}
|
||||
session.save();
|
||||
}catch(Exception e) {
|
||||
log.error("jcr error getting users", e);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError(e));
|
||||
}catch(StorageHubException she ){
|
||||
log.error(she.getErrorMessage(), she);
|
||||
GXOutboundErrorResponse.throwException(she, Response.Status.fromStatusCode(she.getStatus()));
|
||||
}catch(RepositoryException re ){
|
||||
log.error("jcr error creating item", re);
|
||||
GXOutboundErrorResponse.throwException(new BackendGenericError("jcr error creating item", re));
|
||||
} finally {
|
||||
if (session!=null)
|
||||
session.logout();
|
||||
|
|
Loading…
Reference in New Issue