Merge remote-tracking branch 'origin/vreQueryRemoval'
Conflicts: CHANGELOG.md pom.xml
This commit is contained in:
commit
8c934a138e
6
pom.xml
6
pom.xml
|
@ -12,7 +12,7 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.gcube.data.access</groupId>
|
<groupId>org.gcube.data.access</groupId>
|
||||||
<artifactId>storagehub</artifactId>
|
<artifactId>storagehub</artifactId>
|
||||||
<version>1.3.2</version>
|
<version>1.4.0-SNAPSHOT</version>
|
||||||
<name>storagehub</name>
|
<name>storagehub</name>
|
||||||
|
|
||||||
<scm>
|
<scm>
|
||||||
|
@ -300,13 +300,13 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.contentmanagement</groupId>
|
<groupId>org.gcube.contentmanagement</groupId>
|
||||||
<artifactId>storage-manager-core</artifactId>
|
<artifactId>storage-manager-core</artifactId>
|
||||||
<version>[2.0.0,3.0.0-SNAPSHOT)</version>
|
<version>[3.0.0-SNAPSHOT,4.0.0-SNAPSHOT)</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.gcube.contentmanagement</groupId>
|
<groupId>org.gcube.contentmanagement</groupId>
|
||||||
<artifactId>storage-manager-wrapper</artifactId>
|
<artifactId>storage-manager-wrapper</artifactId>
|
||||||
<version>[2.0.0,3.0.0-SNAPSHOT)</version>
|
<version>[3.0.0-SNAPSHOT,4.0.0-SNAPSHOT)</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -2,6 +2,7 @@ package org.gcube.data.access.storagehub.handlers;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
import javax.jcr.ItemNotFoundException;
|
||||||
import javax.jcr.Node;
|
import javax.jcr.Node;
|
||||||
import javax.jcr.NodeIterator;
|
import javax.jcr.NodeIterator;
|
||||||
import javax.jcr.PathNotFoundException;
|
import javax.jcr.PathNotFoundException;
|
||||||
|
@ -11,7 +12,6 @@ import org.apache.jackrabbit.api.JackrabbitSession;
|
||||||
import org.apache.jackrabbit.api.security.user.Group;
|
import org.apache.jackrabbit.api.security.user.Group;
|
||||||
import org.apache.jackrabbit.api.security.user.User;
|
import org.apache.jackrabbit.api.security.user.User;
|
||||||
import org.gcube.common.storagehub.model.exceptions.InvalidCallParameters;
|
import org.gcube.common.storagehub.model.exceptions.InvalidCallParameters;
|
||||||
import org.gcube.common.storagehub.model.exceptions.InvalidItemException;
|
|
||||||
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
||||||
import org.gcube.common.storagehub.model.types.NodeProperty;
|
import org.gcube.common.storagehub.model.types.NodeProperty;
|
||||||
import org.gcube.data.access.storagehub.Constants;
|
import org.gcube.data.access.storagehub.Constants;
|
||||||
|
@ -39,7 +39,7 @@ public class GroupHandler {
|
||||||
|
|
||||||
//delete folder on user
|
//delete folder on user
|
||||||
String folderName = group.getPrincipal().getName();
|
String folderName = group.getPrincipal().getName();
|
||||||
Node folder = getVreFolderNode(session, folderName);
|
Node folder = getFolderNodeRelatedToGroup(session, folderName);
|
||||||
|
|
||||||
NodeIterator ni = folder.getSharedSet();
|
NodeIterator ni = folder.getSharedSet();
|
||||||
while (ni.hasNext()) {
|
while (ni.hasNext()) {
|
||||||
|
@ -54,7 +54,7 @@ public class GroupHandler {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Node getVreFolderNode(JackrabbitSession session, String name) throws InvalidItemException, RepositoryException {
|
public Node getFolderNodeRelatedToGroup(JackrabbitSession session, String name) throws ItemNotFoundException, RepositoryException {
|
||||||
Node sharedRootNode = session.getNode(Constants.SHARED_FOLDER_PATH);
|
Node sharedRootNode = session.getNode(Constants.SHARED_FOLDER_PATH);
|
||||||
|
|
||||||
Node vreFolder = null;
|
Node vreFolder = null;
|
||||||
|
@ -64,6 +64,7 @@ public class GroupHandler {
|
||||||
log.debug("is an old HL VRE");
|
log.debug("is an old HL VRE");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (vreFolder==null) {
|
||||||
NodeIterator nodes = sharedRootNode.getNodes();
|
NodeIterator nodes = sharedRootNode.getNodes();
|
||||||
while (nodes.hasNext()) {
|
while (nodes.hasNext()) {
|
||||||
Node node = nodes.nextNode();
|
Node node = nodes.nextNode();
|
||||||
|
@ -72,8 +73,9 @@ public class GroupHandler {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (vreFolder==null) throw new InvalidItemException("vre folder not found");
|
if (vreFolder==null) throw new ItemNotFoundException("vre folder not found for group "+name);
|
||||||
return vreFolder;
|
return vreFolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,12 +11,14 @@ import java.util.concurrent.Callable;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import javax.jcr.Node;
|
import javax.jcr.Node;
|
||||||
import javax.jcr.RepositoryException;
|
import javax.jcr.RepositoryException;
|
||||||
import javax.jcr.Session;
|
import javax.jcr.Session;
|
||||||
import javax.jcr.lock.LockException;
|
import javax.jcr.lock.LockException;
|
||||||
|
|
||||||
import org.apache.commons.compress.archivers.ArchiveEntry;
|
import org.apache.commons.compress.archivers.ArchiveEntry;
|
||||||
import org.apache.commons.compress.archivers.ArchiveInputStream;
|
import org.apache.commons.compress.archivers.ArchiveInputStream;
|
||||||
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
|
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
|
||||||
|
@ -40,7 +42,6 @@ import org.gcube.common.storagehub.model.plugins.FolderManager;
|
||||||
import org.gcube.common.storagehub.model.storages.MetaInfo;
|
import org.gcube.common.storagehub.model.storages.MetaInfo;
|
||||||
import org.gcube.common.storagehub.model.storages.StorageBackend;
|
import org.gcube.common.storagehub.model.storages.StorageBackend;
|
||||||
import org.gcube.common.storagehub.model.types.ItemAction;
|
import org.gcube.common.storagehub.model.types.ItemAction;
|
||||||
import org.gcube.common.storagehub.model.types.NodeProperty;
|
|
||||||
import org.gcube.data.access.storagehub.AuthorizationChecker;
|
import org.gcube.data.access.storagehub.AuthorizationChecker;
|
||||||
import org.gcube.data.access.storagehub.MultipleOutputStream;
|
import org.gcube.data.access.storagehub.MultipleOutputStream;
|
||||||
import org.gcube.data.access.storagehub.Utils;
|
import org.gcube.data.access.storagehub.Utils;
|
||||||
|
@ -267,7 +268,7 @@ public class ItemHandler {
|
||||||
authChecker.checkWriteAuthorizationControl(ses, login, newNode.getIdentifier(), false);
|
authChecker.checkWriteAuthorizationControl(ses, login, newNode.getIdentifier(), false);
|
||||||
|
|
||||||
AbstractFileItem item = fillItemWithContent(stream, storageBackend, name, description, relativePath,login);
|
AbstractFileItem item = fillItemWithContent(stream, storageBackend, name, description, relativePath,login);
|
||||||
item.setHidden(destinationNode.getProperty(NodeProperty.HIDDEN.toString()).getBoolean());
|
|
||||||
if (withLock) {
|
if (withLock) {
|
||||||
try {
|
try {
|
||||||
ses.getWorkspace().getLockManager().lock(newNode.getPath(), true, true, 0,login);
|
ses.getWorkspace().getLockManager().lock(newNode.getPath(), true, true, 0,login);
|
||||||
|
|
|
@ -85,6 +85,9 @@ public class Node2ItemConverter {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Message getMessageItem(Node node) throws RepositoryException{
|
public Message getMessageItem(Node node) throws RepositoryException{
|
||||||
|
if (!(node.getPrimaryNodeType().getName().equals("nthl:itemSentRequest")
|
||||||
|
|| node.getPrimaryNodeType().getName().equals("nthl:itemSentRequestSH")))
|
||||||
|
return null;
|
||||||
Message msg = new Message();
|
Message msg = new Message();
|
||||||
try {
|
try {
|
||||||
Node attachmentNode = node.getNode(Constants.ATTACHMENTNODE_NAME);
|
Node attachmentNode = node.getNode(Constants.ATTACHMENTNODE_NAME);
|
||||||
|
|
|
@ -9,6 +9,7 @@ import javax.jcr.SimpleCredentials;
|
||||||
|
|
||||||
import org.gcube.common.storagehub.model.exceptions.BackendGenericError;
|
import org.gcube.common.storagehub.model.exceptions.BackendGenericError;
|
||||||
import org.gcube.common.storagehub.model.items.Item;
|
import org.gcube.common.storagehub.model.items.Item;
|
||||||
|
import org.gcube.data.access.storagehub.handlers.items.Node2ItemConverter;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -21,11 +22,11 @@ public class VRE {
|
||||||
private VREQueryRetriever vreQueryRetriever;
|
private VREQueryRetriever vreQueryRetriever;
|
||||||
private ExecutorService executor;
|
private ExecutorService executor;
|
||||||
|
|
||||||
protected VRE(Item item, Repository repository, SimpleCredentials credentials, ExecutorService executor) {
|
protected VRE(Item item, Repository repository, SimpleCredentials credentials, Node2ItemConverter node2Item, ExecutorService executor) {
|
||||||
super();
|
super();
|
||||||
this.vreFolder = item;
|
this.vreFolder = item;
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
vreQueryRetriever = new VREQueryRetriever(repository, credentials, vreFolder);
|
vreQueryRetriever = new VREQueryRetriever(repository, credentials, node2Item, vreFolder);
|
||||||
result = executor.submit(vreQueryRetriever);
|
result = executor.submit(vreQueryRetriever);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,11 +9,8 @@ import java.util.concurrent.Executors;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import javax.jcr.Node;
|
import javax.jcr.Node;
|
||||||
import javax.jcr.NodeIterator;
|
|
||||||
import javax.jcr.RepositoryException;
|
import javax.jcr.RepositoryException;
|
||||||
import javax.jcr.Session;
|
|
||||||
import javax.jcr.SimpleCredentials;
|
import javax.jcr.SimpleCredentials;
|
||||||
import javax.jcr.query.Query;
|
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
|
|
||||||
import org.apache.jackrabbit.api.JackrabbitSession;
|
import org.apache.jackrabbit.api.JackrabbitSession;
|
||||||
|
@ -29,6 +26,7 @@ import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
||||||
import org.gcube.common.storagehub.model.items.Item;
|
import org.gcube.common.storagehub.model.items.Item;
|
||||||
import org.gcube.data.access.storagehub.Constants;
|
import org.gcube.data.access.storagehub.Constants;
|
||||||
import org.gcube.data.access.storagehub.PathUtil;
|
import org.gcube.data.access.storagehub.PathUtil;
|
||||||
|
import org.gcube.data.access.storagehub.handlers.GroupHandler;
|
||||||
import org.gcube.data.access.storagehub.handlers.items.Node2ItemConverter;
|
import org.gcube.data.access.storagehub.handlers.items.Node2ItemConverter;
|
||||||
import org.gcube.data.access.storagehub.services.RepositoryInitializer;
|
import org.gcube.data.access.storagehub.services.RepositoryInitializer;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -50,6 +48,9 @@ public class VREManager {
|
||||||
@Inject
|
@Inject
|
||||||
PathUtil pathUtil;
|
PathUtil pathUtil;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
GroupHandler groupHandler;
|
||||||
|
|
||||||
ExecutorService executor = Executors.newFixedThreadPool(5);
|
ExecutorService executor = Executors.newFixedThreadPool(5);
|
||||||
|
|
||||||
SimpleCredentials credentials;
|
SimpleCredentials credentials;
|
||||||
|
@ -73,7 +74,7 @@ public class VREManager {
|
||||||
logger.trace("inserting VRE {}",vreFolder.getTitle());
|
logger.trace("inserting VRE {}",vreFolder.getTitle());
|
||||||
if (vreMap.containsKey(vreFolder.getTitle())) throw new RuntimeException("something went wrong (vre already present in the map)");
|
if (vreMap.containsKey(vreFolder.getTitle())) throw new RuntimeException("something went wrong (vre already present in the map)");
|
||||||
else {
|
else {
|
||||||
VRE toReturn = new VRE(vreFolder, repository.getRepository(), credentials, executor);
|
VRE toReturn = new VRE(vreFolder, repository.getRepository(), credentials, node2Item, executor);
|
||||||
vreMap.put(vreFolder.getTitle(), toReturn);
|
vreMap.put(vreFolder.getTitle(), toReturn);
|
||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
@ -97,18 +98,13 @@ public class VREManager {
|
||||||
throw new InvalidCallParameters("error getting VRE with user "+userId+" for group "+groupName);
|
throw new InvalidCallParameters("error getting VRE with user "+userId+" for group "+groupName);
|
||||||
|
|
||||||
|
|
||||||
org.gcube.common.storagehub.model.Path vrePath = pathUtil.getVREsPath(userId, ses);
|
|
||||||
VRE vre = this.getVRE(groupName);
|
VRE vre = this.getVRE(groupName);
|
||||||
if (vre!=null) return vre;
|
if (vre!=null) return vre;
|
||||||
else {
|
else {
|
||||||
String query = String.format("SELECT * FROM [nthl:workspaceItem] As node WHERE node.[jcr:title] like '%s' AND ISDESCENDANTNODE('%s')",groupName, vrePath.toPath());
|
|
||||||
Query jcrQuery = ses.getWorkspace().getQueryManager().createQuery(query, Constants.QUERY_LANGUAGE);
|
|
||||||
NodeIterator it = jcrQuery.execute().getNodes();
|
|
||||||
|
|
||||||
if (!it.hasNext()) throw new BackendGenericError("vre folder not found for context "+groupName);
|
Node vreFolderNode = groupHandler.getFolderNodeRelatedToGroup(ses, groupName);
|
||||||
|
|
||||||
Node folder = it.nextNode();
|
Item vreFolder = node2Item.getItem(vreFolderNode, excludes);
|
||||||
Item vreFolder = node2Item.getItem(folder, excludes);
|
|
||||||
return this.putVRE(vreFolder);
|
return this.putVRE(vreFolder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,29 +1,30 @@
|
||||||
package org.gcube.data.access.storagehub.handlers.vres;
|
package org.gcube.data.access.storagehub.handlers.vres;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Iterator;
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Map;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import javax.jcr.Credentials;
|
import javax.jcr.Credentials;
|
||||||
import javax.jcr.Node;
|
import javax.jcr.Node;
|
||||||
|
import javax.jcr.NodeIterator;
|
||||||
import javax.jcr.Property;
|
import javax.jcr.Property;
|
||||||
import javax.jcr.Repository;
|
import javax.jcr.Repository;
|
||||||
import javax.jcr.RepositoryException;
|
import javax.jcr.RepositoryException;
|
||||||
import javax.jcr.Session;
|
import javax.jcr.Session;
|
||||||
import javax.jcr.observation.Event;
|
import javax.jcr.observation.Event;
|
||||||
import javax.jcr.observation.EventJournal;
|
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.Excludes;
|
||||||
import org.gcube.common.storagehub.model.NodeConstants;
|
import org.gcube.common.storagehub.model.exceptions.BackendGenericError;
|
||||||
|
import org.gcube.common.storagehub.model.items.AbstractFileItem;
|
||||||
|
import org.gcube.common.storagehub.model.items.FolderItem;
|
||||||
import org.gcube.common.storagehub.model.items.Item;
|
import org.gcube.common.storagehub.model.items.Item;
|
||||||
import org.gcube.data.access.storagehub.NodeChildrenFilterIterator;
|
|
||||||
import org.gcube.data.access.storagehub.handlers.items.Node2ItemConverter;
|
import org.gcube.data.access.storagehub.handlers.items.Node2ItemConverter;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -37,92 +38,154 @@ public class VREQueryRetriever implements Callable<List<Item>> {
|
||||||
private Repository repository;
|
private Repository repository;
|
||||||
private Credentials credentials;
|
private Credentials credentials;
|
||||||
private Item vreFolder;
|
private Item vreFolder;
|
||||||
List<Item> cachedList = new ArrayList<>(CACHE_DIMENSION);
|
Map<String, Long> cachedMap = new HashMap<>(CACHE_DIMENSION);
|
||||||
|
long higherTimestamp = Long.MAX_VALUE;
|
||||||
|
|
||||||
long lastTimestamp =0;
|
long lastTimestamp =0;
|
||||||
|
|
||||||
private Node2ItemConverter node2Item = new Node2ItemConverter();
|
long doTime= 0;
|
||||||
|
boolean underRedo = false;
|
||||||
|
Node2ItemConverter node2Item;
|
||||||
|
|
||||||
|
|
||||||
public VREQueryRetriever(Repository repository, Credentials credentials, Item vreFolder) {
|
|
||||||
|
public VREQueryRetriever(Repository repository, Credentials credentials, Node2ItemConverter node2Item, Item vreFolder) {
|
||||||
super();
|
super();
|
||||||
this.repository = repository;
|
this.repository = repository;
|
||||||
this.credentials = credentials;
|
this.credentials = credentials;
|
||||||
this.vreFolder = vreFolder;
|
this.vreFolder = vreFolder;
|
||||||
|
this.node2Item = node2Item;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Item> call() {
|
public List<Item> call() {
|
||||||
logger.trace("executing recents task");
|
|
||||||
Session ses = null;
|
Session ses = null;
|
||||||
if (lastTimestamp==0) {
|
|
||||||
try {
|
try {
|
||||||
long start = System.currentTimeMillis();
|
|
||||||
ses = repository.login(credentials);
|
ses = repository.login(credentials);
|
||||||
|
|
||||||
Calendar now = Calendar.getInstance();
|
Calendar now = Calendar.getInstance();
|
||||||
now.add(Calendar.YEAR, -1);
|
now.add(Calendar.HOUR_OF_DAY, -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();
|
|
||||||
NodeChildrenFilterIterator it = new NodeChildrenFilterIterator(jcrQuery.execute().getNodes());
|
|
||||||
logger.debug("query for recents took {}",System.currentTimeMillis()-start);
|
|
||||||
while (it.hasNext()) {
|
|
||||||
Node node = it.next();
|
|
||||||
|
|
||||||
Item item = node2Item.getItem(node, Excludes.EXCLUDE_ACCOUNTING);
|
|
||||||
logger.debug("RECENTS - adding item {} with timestamp {}",item.getTitle(), item.getLastModificationTime().getTimeInMillis());
|
|
||||||
cachedList.add(item);
|
|
||||||
|
|
||||||
|
if (doTime> now.getTimeInMillis() || underRedo) {
|
||||||
|
logger.debug("executing recents task for {} (cahced result)",vreFolder.getTitle());
|
||||||
|
return correctValues(ses, cachedMap);
|
||||||
|
}else {
|
||||||
|
logger.debug("executing recents task for {} (redoing it)",vreFolder.getTitle());
|
||||||
|
List<Item> toReturn = redo(ses);
|
||||||
|
doTime = System.currentTimeMillis();
|
||||||
|
return toReturn;
|
||||||
}
|
}
|
||||||
logger.debug("creating objects took {}",System.currentTimeMillis()-start);
|
}catch (Exception e) {
|
||||||
if (cachedList.size()<=10) return cachedList;
|
logger.error("error preparing recents for folder {}", vreFolder.getTitle(),e);
|
||||||
else return cachedList.subList(0, 10);
|
return Collections.emptyList();
|
||||||
} catch (Exception e) {
|
|
||||||
logger.error("error querying vre {}",vreFolder.getTitle(),e);
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}finally{
|
}finally{
|
||||||
if (ses!=null)
|
if (ses!=null)
|
||||||
ses.logout();
|
ses.logout();
|
||||||
logger.trace("recents task finished");
|
logger.debug("recents task finished");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
|
|
||||||
|
public synchronized List<Item> redo(Session ses) {
|
||||||
|
underRedo = true;
|
||||||
|
try {
|
||||||
|
Map<String, Long> tempCachedMap = new HashMap<>(CACHE_DIMENSION);
|
||||||
|
if (cachedMap.isEmpty())
|
||||||
|
init(ses, tempCachedMap);
|
||||||
|
else {
|
||||||
|
logger.debug("redoing recents for {}",vreFolder.getTitle());
|
||||||
|
update(ses, tempCachedMap);
|
||||||
|
}
|
||||||
|
cachedMap = tempCachedMap;
|
||||||
|
return correctValues(ses, tempCachedMap);
|
||||||
|
}finally{
|
||||||
|
underRedo = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<Item> correctValues(Session ses, Map<String, Long> tempCachedMap){
|
||||||
|
logger.debug("preparing returning values for {}",vreFolder.getTitle());
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
List<Map.Entry<String, Long>> list = new LinkedList<>(tempCachedMap.entrySet());
|
||||||
|
list.sort((c1, c2) -> c1.getValue().compareTo(c2.getValue())*-1);
|
||||||
|
if (list.size()>CACHE_DIMENSION)
|
||||||
|
for (int index = CACHE_DIMENSION-1; index< list.size() ; index++)
|
||||||
|
tempCachedMap.remove(list.get(index).getKey());
|
||||||
|
|
||||||
|
List<String> cachedIds = list.stream().map(m -> m.getKey()).collect(Collectors.toList());
|
||||||
|
if (cachedIds.size()>10)
|
||||||
|
cachedIds = cachedIds.subList(0, 10);
|
||||||
|
|
||||||
|
List<Item> result = new ArrayList<>(10);
|
||||||
|
|
||||||
|
for (String id: cachedIds) {
|
||||||
|
try {
|
||||||
|
Item item = node2Item.getItem(id, ses, Excludes.EXCLUDE_ACCOUNTING);
|
||||||
|
if (item!=null)
|
||||||
|
result.add(item);
|
||||||
|
else logger.warn("item with id {} is null",id);
|
||||||
|
} catch (BackendGenericError | RepositoryException e) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.debug("returning values prepared in {} for {}",System.currentTimeMillis()-start,vreFolder.getTitle());
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void insertItemInTheRightPlace(Item item, Map<String, Long> tempCachedMap) {
|
||||||
|
long lastModifiedTime = item.getLastModificationTime().getTime().getTime();
|
||||||
|
|
||||||
|
if (!(lastModifiedTime>higherTimestamp && tempCachedMap.size()>CACHE_DIMENSION)) {
|
||||||
|
tempCachedMap.put(item.getId(), lastModifiedTime);
|
||||||
|
if (lastModifiedTime>higherTimestamp) higherTimestamp = lastModifiedTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void init(Session ses,Map<String, Long> tempCachedMap){
|
||||||
|
try {
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
lastTimestamp = System.currentTimeMillis();
|
||||||
|
Node vreFolderNode = ses.getNodeByIdentifier(vreFolder.getId());
|
||||||
|
logger.debug("starting visiting children for {}",vreFolder.getTitle());
|
||||||
|
visitChildren(vreFolderNode, tempCachedMap);
|
||||||
|
logger.debug("initializing recents for {} took {}",vreFolder.getTitle(),System.currentTimeMillis()-start);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("error querying vre {}",vreFolder.getTitle(),e);
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void update(Session ses, Map<String, Long> tempCachedMap) {
|
||||||
|
try {
|
||||||
long timestampToUse = lastTimestamp;
|
long timestampToUse = lastTimestamp;
|
||||||
lastTimestamp = System.currentTimeMillis();
|
lastTimestamp = System.currentTimeMillis();
|
||||||
|
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
ses = repository.login(credentials);
|
|
||||||
final String[] types = { "nthl:workspaceLeafItem", "nthl:workspaceItem"};
|
final String[] types = { "nthl:workspaceLeafItem", "nthl:workspaceItem"};
|
||||||
|
|
||||||
EventJournal journalChanged = ses.getWorkspace().getObservationManager().getEventJournal(Event.PROPERTY_CHANGED^Event.NODE_REMOVED^Event.NODE_MOVED^Event.NODE_ADDED, vreFolder.getPath(), true, null, types);
|
EventJournal journalChanged = ses.getWorkspace().getObservationManager().getEventJournal(Event.PROPERTY_CHANGED^Event.NODE_REMOVED^Event.NODE_MOVED^Event.NODE_ADDED, vreFolder.getPath(), true, null, types);
|
||||||
journalChanged.skipTo(timestampToUse);
|
journalChanged.skipTo(timestampToUse);
|
||||||
|
|
||||||
logger.trace("getting the journal took {}",System.currentTimeMillis()-start);
|
logger.debug("getting the journal took {}",System.currentTimeMillis()-start);
|
||||||
|
|
||||||
int events = 0;
|
int events = 0;
|
||||||
|
|
||||||
|
//TODO: manage hidden nodes
|
||||||
while (journalChanged.hasNext()) {
|
while (journalChanged.hasNext()) {
|
||||||
events++;
|
events++;
|
||||||
Event event = journalChanged.nextEvent();
|
Event event = journalChanged.nextEvent();
|
||||||
|
try {
|
||||||
switch(event.getType()) {
|
switch(event.getType()) {
|
||||||
|
|
||||||
case Event.NODE_ADDED:
|
case Event.NODE_ADDED:
|
||||||
if (ses.nodeExists(event.getPath())) {
|
if (ses.nodeExists(event.getPath())) {
|
||||||
Node nodeAdded = ses.getNode(event.getPath());
|
Node nodeAdded = ses.getNode(event.getPath());
|
||||||
if (nodeAdded.isNodeType("nthl:workspaceLeafItem")) {
|
if (nodeAdded.isNodeType("nthl:workspaceLeafItem")) {
|
||||||
logger.trace("node added event received with name {}", nodeAdded.getName());
|
logger.debug("node added event received with name {}", nodeAdded.getName());
|
||||||
Item item = node2Item.getItem(nodeAdded, Arrays.asList(NodeConstants.ACCOUNTING_NAME));
|
Item item = node2Item.getItem(nodeAdded, Excludes.ALL);
|
||||||
insertItemInTheRightPlace(item);
|
if (tempCachedMap.get(event.getIdentifier())!=null)
|
||||||
|
tempCachedMap.remove(event.getIdentifier());
|
||||||
|
insertItemInTheRightPlace(item,tempCachedMap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -131,66 +194,64 @@ public class VREQueryRetriever implements Callable<List<Item>> {
|
||||||
if (ses.propertyExists(event.getPath())) {
|
if (ses.propertyExists(event.getPath())) {
|
||||||
Property property = ses.getProperty(event.getPath());
|
Property property = ses.getProperty(event.getPath());
|
||||||
if (property.getName().equalsIgnoreCase("jcr:lastModified")) {
|
if (property.getName().equalsIgnoreCase("jcr:lastModified")) {
|
||||||
logger.trace("event property changed on {} with value {} and parent {}",property.getName(), property.getValue().getString(), property.getParent().getPath());
|
logger.debug("event property changed on {} with value {} and parent {}",property.getName(), property.getValue().getString(), property.getParent().getPath());
|
||||||
String identifier = property.getParent().getIdentifier();
|
String identifier = property.getParent().getIdentifier();
|
||||||
cachedList.removeIf(i -> i.getId().equals(identifier));
|
tempCachedMap.remove(identifier);
|
||||||
Item item = node2Item.getItem(property.getParent(), Excludes.EXCLUDE_ACCOUNTING);
|
Item item = node2Item.getItem(property.getParent(), Excludes.ALL);
|
||||||
insertItemInTheRightPlace(item);
|
insertItemInTheRightPlace(item, tempCachedMap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Event.NODE_REMOVED:
|
case Event.NODE_REMOVED:
|
||||||
logger.trace("node removed event received with type {}", event.getIdentifier());
|
logger.trace("node removed event received with type {}", event.getIdentifier());
|
||||||
cachedList.removeIf(i -> {
|
|
||||||
try {
|
|
||||||
return i.getId().equals(event.getIdentifier()) && i.getLastModificationTime().getTime().getTime()<event.getDate();
|
|
||||||
} catch (RepositoryException e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
if (tempCachedMap.get(event.getIdentifier())!=null &&
|
||||||
|
tempCachedMap.get(event.getIdentifier())<event.getDate())
|
||||||
|
tempCachedMap.remove(event.getIdentifier());
|
||||||
break;
|
break;
|
||||||
case Event.NODE_MOVED:
|
case Event.NODE_MOVED:
|
||||||
Node nodeMoved = ses.getNode(event.getPath());
|
Node nodeMoved = ses.getNode(event.getPath());
|
||||||
logger.trace("node moved event received with type {}", nodeMoved.getPrimaryNodeType());
|
logger.trace("node moved event received with type {}", nodeMoved.getPrimaryNodeType());
|
||||||
if (nodeMoved.isNodeType("nthl:workspaceLeafItem")) {
|
if (nodeMoved.isNodeType("nthl:workspaceLeafItem")) {
|
||||||
logger.trace("event node moved on {} with path {}",nodeMoved.getName(), nodeMoved.getPath());
|
logger.debug("event node moved on {} with path {}",nodeMoved.getName(), nodeMoved.getPath());
|
||||||
String identifier = nodeMoved.getIdentifier();
|
String identifier = nodeMoved.getIdentifier();
|
||||||
cachedList.removeIf(i -> i.getId().equals(identifier) && !i.getPath().startsWith(vreFolder.getPath()));
|
String nodePath = ses.getNode(identifier).getPath();
|
||||||
|
if (tempCachedMap.get(event.getIdentifier())!=null &&
|
||||||
|
!nodePath.startsWith(vreFolder.getPath()))
|
||||||
|
tempCachedMap.remove(event.getIdentifier());
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Exception("error in event handling");
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}catch (Exception e) {
|
||||||
|
logger.warn("error handling event {}",event.getType(),e);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cachedList.size()>CACHE_DIMENSION)
|
|
||||||
cachedList.subList(51, cachedList.size()).clear();
|
|
||||||
logger.trace("retrieving event took {} with {} events",System.currentTimeMillis()-start, events);
|
logger.trace("retrieving event took {} with {} events",System.currentTimeMillis()-start, events);
|
||||||
if (cachedList.size()<=10) return cachedList;
|
|
||||||
else return cachedList.subList(0, 10);
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("error getting events for vre {}",vreFolder.getTitle(),e);
|
logger.error("error getting events for vre {}",vreFolder.getTitle(),e);
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}finally{
|
|
||||||
if (ses!=null)
|
|
||||||
ses.logout();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void insertItemInTheRightPlace(Item item) {
|
private void visitChildren(Node node, Map<String, Long> tempCachedMap) throws Exception{
|
||||||
Iterator<Item> it = cachedList.iterator();
|
NodeIterator nodeIt = node.getNodes();
|
||||||
int index =0;
|
while(nodeIt.hasNext()) {
|
||||||
while (it.hasNext()) {
|
Node child = nodeIt.nextNode();
|
||||||
Item inListItem = it.next();
|
Item item = node2Item.getItem(child, Excludes.ALL);
|
||||||
if (item.getLastModificationTime().getTime().getTime()>=inListItem.getLastModificationTime().getTime().getTime()) break;
|
if (item==null || item.isHidden()) continue;
|
||||||
index++;
|
if (item instanceof FolderItem)
|
||||||
|
visitChildren(child,tempCachedMap);
|
||||||
|
else if(item instanceof AbstractFileItem)
|
||||||
|
insertItemInTheRightPlace(item,tempCachedMap);
|
||||||
}
|
}
|
||||||
if (index<CACHE_DIMENSION)
|
|
||||||
cachedList.add(index, item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @Override
|
/* @Override
|
||||||
|
|
|
@ -9,7 +9,6 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import javax.enterprise.context.RequestScoped;
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.jcr.Node;
|
import javax.jcr.Node;
|
||||||
import javax.jcr.PathNotFoundException;
|
import javax.jcr.PathNotFoundException;
|
||||||
|
@ -40,7 +39,6 @@ import org.apache.jackrabbit.api.security.user.QueryBuilder;
|
||||||
import org.apache.jackrabbit.api.security.user.User;
|
import org.apache.jackrabbit.api.security.user.User;
|
||||||
import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
|
import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
|
||||||
import org.gcube.common.authorization.control.annotations.AuthorizationControl;
|
import org.gcube.common.authorization.control.annotations.AuthorizationControl;
|
||||||
import org.gcube.common.authorization.library.AuthorizationEntry;
|
|
||||||
import org.gcube.common.authorization.library.provider.AuthorizationProvider;
|
import org.gcube.common.authorization.library.provider.AuthorizationProvider;
|
||||||
import org.gcube.common.gxrest.response.outbound.GXOutboundErrorResponse;
|
import org.gcube.common.gxrest.response.outbound.GXOutboundErrorResponse;
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
|
@ -200,11 +198,11 @@ public class GroupManager {
|
||||||
org.apache.jackrabbit.api.security.user.UserManager usrManager = session.getUserManager();
|
org.apache.jackrabbit.api.security.user.UserManager usrManager = session.getUserManager();
|
||||||
|
|
||||||
Authorizable authorizable = usrManager.getAuthorizable(group);
|
Authorizable authorizable = usrManager.getAuthorizable(group);
|
||||||
if (authorizable.isGroup())
|
if (authorizable!=null && authorizable.isGroup())
|
||||||
authorizable.remove();
|
authorizable.remove();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Node node = groupHandler.getVreFolderNode(session, group);
|
Node node = groupHandler.getFolderNodeRelatedToGroup(session, group);
|
||||||
List<Item> workspaceItems = Utils.getItemList(node, Excludes.GET_ONLY_CONTENT, null, true, null);
|
List<Item> workspaceItems = Utils.getItemList(node, Excludes.GET_ONLY_CONTENT, null, true, null);
|
||||||
trashHandler.removeOnlyNodesContent(session, workspaceItems);
|
trashHandler.removeOnlyNodesContent(session, workspaceItems);
|
||||||
node.removeSharedSet();
|
node.removeSharedSet();
|
||||||
|
@ -242,7 +240,7 @@ public class GroupManager {
|
||||||
|
|
||||||
session = (JackrabbitSession) repository.getRepository().login(CredentialHandler.getAdminCredentials(context));
|
session = (JackrabbitSession) repository.getRepository().login(CredentialHandler.getAdminCredentials(context));
|
||||||
|
|
||||||
Node vreFolder = groupHandler.getVreFolderNode(session, groupId);
|
Node vreFolder = groupHandler.getFolderNodeRelatedToGroup(session, groupId);
|
||||||
String currentUser = AuthorizationProvider.instance.get().getClient().getId();
|
String currentUser = AuthorizationProvider.instance.get().getClient().getId();
|
||||||
|
|
||||||
if (!isInfraManager() && !(isVREManager() && isValidGroupForContext(groupId) ))
|
if (!isInfraManager() && !(isVREManager() && isValidGroupForContext(groupId) ))
|
||||||
|
@ -296,7 +294,7 @@ public class GroupManager {
|
||||||
Objects.nonNull(userId);
|
Objects.nonNull(userId);
|
||||||
|
|
||||||
session = (JackrabbitSession) repository.getRepository().login(CredentialHandler.getAdminCredentials(context));
|
session = (JackrabbitSession) repository.getRepository().login(CredentialHandler.getAdminCredentials(context));
|
||||||
Node vreFolder = groupHandler.getVreFolderNode(session, groupId);
|
Node vreFolder = groupHandler.getFolderNodeRelatedToGroup(session, groupId);
|
||||||
String currentUser = AuthorizationProvider.instance.get().getClient().getId();
|
String currentUser = AuthorizationProvider.instance.get().getClient().getId();
|
||||||
|
|
||||||
if (!isInfraManager() && !(isVREManager() && isValidGroupForContext(groupId) ))
|
if (!isInfraManager() && !(isVREManager() && isValidGroupForContext(groupId) ))
|
||||||
|
@ -422,7 +420,7 @@ public class GroupManager {
|
||||||
boolean success = group.addMember(user);
|
boolean success = group.addMember(user);
|
||||||
session.save();
|
session.save();
|
||||||
String folderName = group.getPrincipal().getName();
|
String folderName = group.getPrincipal().getName();
|
||||||
Node folder = groupHandler.getVreFolderNode(session, folderName);
|
Node folder = groupHandler.getFolderNodeRelatedToGroup(session, folderName);
|
||||||
|
|
||||||
String userPath = Paths.append(pathUtil.getVREsPath(user.getPrincipal().getName(), session), folderName).toPath();
|
String userPath = Paths.append(pathUtil.getVREsPath(user.getPrincipal().getName(), session), folderName).toPath();
|
||||||
log.debug("creating folder in user path {} from {}", userPath, folder.getPath() );
|
log.debug("creating folder in user path {} from {}", userPath, folder.getPath() );
|
||||||
|
|
|
@ -35,7 +35,6 @@ import org.gcube.common.storagehub.model.exceptions.InvalidCallParameters;
|
||||||
import org.gcube.common.storagehub.model.exceptions.InvalidItemException;
|
import org.gcube.common.storagehub.model.exceptions.InvalidItemException;
|
||||||
import org.gcube.common.storagehub.model.exceptions.ItemLockedException;
|
import org.gcube.common.storagehub.model.exceptions.ItemLockedException;
|
||||||
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
||||||
import org.gcube.common.storagehub.model.items.ExternalFolder;
|
|
||||||
import org.gcube.common.storagehub.model.items.FolderItem;
|
import org.gcube.common.storagehub.model.items.FolderItem;
|
||||||
import org.gcube.common.storagehub.model.items.Item;
|
import org.gcube.common.storagehub.model.items.Item;
|
||||||
import org.gcube.common.storagehub.model.items.SharedFolder;
|
import org.gcube.common.storagehub.model.items.SharedFolder;
|
||||||
|
|
|
@ -345,7 +345,13 @@ public class MessageManager extends Impersonable{
|
||||||
NodeIterator nodeIt = node.getNodes();
|
NodeIterator nodeIt = node.getNodes();
|
||||||
while(nodeIt.hasNext()) {
|
while(nodeIt.hasNext()) {
|
||||||
Node child = nodeIt.nextNode();
|
Node child = nodeIt.nextNode();
|
||||||
|
log.info("message type "+child.getPrimaryNodeType().getName());
|
||||||
Message message = node2Item.getMessageItem(child);
|
Message message = node2Item.getMessageItem(child);
|
||||||
|
if (message == null) {
|
||||||
|
log.info("message discarded");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (reduceBody != null && reduceBody>0 && message.getBody().length()>reduceBody )
|
if (reduceBody != null && reduceBody>0 && message.getBody().length()>reduceBody )
|
||||||
message.setBody(message.getBody().substring(0, reduceBody));
|
message.setBody(message.getBody().substring(0, reduceBody));
|
||||||
insertOrdered(messages, message);
|
insertOrdered(messages, message);
|
||||||
|
|
|
@ -352,59 +352,6 @@ public class WorkspaceManager extends Impersonable{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Path("query")
|
|
||||||
@GET
|
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
|
||||||
public ItemList searchItems(@QueryParam("n") String node, @QueryParam("e") String jsonExpr, @QueryParam("o") List<String> orderField, @QueryParam("l") Integer limit, @QueryParam("f") Integer offset){
|
|
||||||
InnerMethodName.instance.set("searchItems");
|
|
||||||
Session ses = null;
|
|
||||||
List<? extends Item> toReturn = new ArrayList<>();
|
|
||||||
|
|
||||||
try{
|
|
||||||
|
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
|
||||||
Expression<Boolean> expression = mapper.readValue(jsonExpr, Expression.class);
|
|
||||||
String stringExpression = evaluator.evaluate(new And(new ISDescendant(pathUtil.getWorkspacePath(currentUser)), expression));
|
|
||||||
|
|
||||||
String orderBy = "";
|
|
||||||
if (orderField!=null && orderField.size()>0)
|
|
||||||
orderBy= String.format("ORDER BY %s", orderField.stream().collect(Collectors.joining(",")).toString());
|
|
||||||
|
|
||||||
String sql2Query = String.format("SELECT * FROM [%s] AS node WHERE %s %s ",node, stringExpression,orderBy);
|
|
||||||
|
|
||||||
log.info("query sent is {}",sql2Query);
|
|
||||||
|
|
||||||
ses = repository.getRepository().login(CredentialHandler.getAdminCredentials(context));
|
|
||||||
Query jcrQuery = ses.getWorkspace().getQueryManager().createQuery(sql2Query, Constants.QUERY_LANGUAGE);
|
|
||||||
|
|
||||||
if (limit!=null && limit!=-1 )
|
|
||||||
jcrQuery.setLimit(limit);
|
|
||||||
|
|
||||||
if (offset!=null && offset!=-1 )
|
|
||||||
jcrQuery.setOffset(offset);
|
|
||||||
|
|
||||||
QueryResult result = jcrQuery.execute();
|
|
||||||
|
|
||||||
NodeIterator it = result.getNodes();
|
|
||||||
|
|
||||||
while (it.hasNext())
|
|
||||||
toReturn.add(node2Item.getItem(it.nextNode(), null));
|
|
||||||
}catch(RepositoryException | IOException re ){
|
|
||||||
log.error("error executing the query", 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);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
@Path("count")
|
@Path("count")
|
||||||
@GET
|
@GET
|
||||||
|
|
|
@ -74,7 +74,7 @@ public class ScriptManager {
|
||||||
@FormDataParam("file") FormDataContentDisposition fileDetail) {
|
@FormDataParam("file") FormDataContentDisposition fileDetail) {
|
||||||
try {
|
try {
|
||||||
ScriptClassLoader scriptClassLoader = new ScriptClassLoader(Thread.currentThread().getContextClassLoader());
|
ScriptClassLoader scriptClassLoader = new ScriptClassLoader(Thread.currentThread().getContextClassLoader());
|
||||||
Class<?> scriptClass = uploadClass(stream, scriptClassLoader, name);
|
Class<?> scriptClass = uploadClass(stream, scriptClassLoader, fileDetail.getFileName().replace(".class", ""));
|
||||||
return run(scriptClass, name, destinationFolderId, asynch!=null? asynch : false);
|
return run(scriptClass, name, destinationFolderId, asynch!=null? asynch : false);
|
||||||
}catch(Throwable e) {
|
}catch(Throwable e) {
|
||||||
log.error("error executing script {}", name,e);
|
log.error("error executing script {}", name,e);
|
||||||
|
@ -168,7 +168,7 @@ public class ScriptManager {
|
||||||
.stream(stream).on(parentId).with(ses).author(login);
|
.stream(stream).on(parentId).with(ses).author(login);
|
||||||
itemHandler.create(builder.build());
|
itemHandler.create(builder.build());
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
log.error("error saving script result {} in the Workspace",name);
|
log.error("error saving script result {} in the Workspace",name, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
@ -10,7 +10,6 @@ import javax.jcr.RepositoryException;
|
||||||
|
|
||||||
import org.gcube.common.storagehub.model.exceptions.BackendGenericError;
|
import org.gcube.common.storagehub.model.exceptions.BackendGenericError;
|
||||||
import org.gcube.common.storagehub.model.items.Item;
|
import org.gcube.common.storagehub.model.items.Item;
|
||||||
import org.gcube.data.access.storagehub.Range;
|
|
||||||
import org.gcube.data.access.storagehub.Utils;
|
import org.gcube.data.access.storagehub.Utils;
|
||||||
import org.gcube.data.access.storagehub.handlers.items.Node2ItemConverter;
|
import org.gcube.data.access.storagehub.handlers.items.Node2ItemConverter;
|
||||||
import org.gcube.data.access.storagehub.scripting.ScriptUtil;
|
import org.gcube.data.access.storagehub.scripting.ScriptUtil;
|
||||||
|
@ -22,7 +21,7 @@ public class ScriptUtilImpl implements ScriptUtil {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Item> getChildren(Predicate<Node> checker, Node parent, List<String> excludes, boolean showHidden, Class<? extends Item> nodeTypeToInclude) throws RepositoryException, BackendGenericError {
|
public List<Item> getChildren(Predicate<Node> checker, Node parent, List<String> excludes, boolean showHidden, Class<? extends Item> nodeTypeToInclude) throws RepositoryException, BackendGenericError {
|
||||||
return Utils.getItemList(checker, parent, excludes, new Range(0, 100), showHidden, nodeTypeToInclude);
|
return Utils.getItemList(checker, parent, excludes, null, showHidden, nodeTypeToInclude);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue