solved error on vre recents
This commit is contained in:
parent
882f849e2f
commit
2a46ac3aa2
|
@ -101,16 +101,16 @@ public class Utils {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static <T extends Item> List<T> serachByNameOnFolder(Session ses, String user, AuthorizationChecker authChecker, Node parent, List<String> excludes, Range range, boolean showHidden, boolean excludeTrashed, Class<? extends RootItem> nodeTypeToInclude, String nameParam) throws RepositoryException, BackendGenericError{
|
public static <T extends Item> List<T> searchByNameOnFolder(Session ses, String user, AuthorizationChecker authChecker, Node parent, List<String> excludes, Range range, boolean showHidden, boolean excludeTrashed, Class<? extends RootItem> nodeTypeToInclude, String nameParam) throws RepositoryException, BackendGenericError{
|
||||||
String xpath = String.format("/jcr:root%s//element(*,nthl:workspaceItem)[jcr:like(fn:lower-case(@jcr:title), '%s')]",ISO9075.encodePath(parent.getPath()), nameParam.toLowerCase());
|
String xpath = String.format("/jcr:root%s//element(*,nthl:workspaceItem)[jcr:like(fn:lower-case(@jcr:title), '%s')]",ISO9075.encodePath(parent.getPath()), nameParam.toLowerCase());
|
||||||
|
|
||||||
//String query = String.format("SELECT * FROM [nthl:workspaceLeafItem] AS node WHERE ISDESCENDANTNODE('%s') ORDER BY node.[jcr:lastModified] DESC ",vreFolder.getPath());
|
//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 search is {}",xpath);
|
logger.trace("query for search is {}",xpath);
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
Query jcrQuery = ses.getWorkspace().getQueryManager().createQuery(xpath, Query.XPATH);
|
Query jcrQuery = ses.getWorkspace().getQueryManager().createQuery(xpath, Query.XPATH);
|
||||||
NodeChildrenFilterIterator iterator = new NodeChildrenFilterIterator(jcrQuery.execute().getNodes());
|
NodeChildrenFilterIterator iterator = new NodeChildrenFilterIterator(jcrQuery.execute().getNodes());
|
||||||
logger.debug("[SEARCH] real search took {} millis",(System.currentTimeMillis()-start));
|
logger.trace("[SEARCH] real search took {} millis",(System.currentTimeMillis()-start));
|
||||||
Predicate<Node> checker = new Predicate<Node>() {
|
Predicate<Node> checker = new Predicate<Node>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -152,7 +152,7 @@ public class Utils {
|
||||||
while (iterator.hasNext()){
|
while (iterator.hasNext()){
|
||||||
Node current = iterator.next();
|
Node current = iterator.next();
|
||||||
|
|
||||||
logger.debug("[SEARCH] evaluating node {} ",current.hasProperty(NodeProperty.TITLE.toString())? current.getProperty(NodeProperty.TITLE.toString()):current.getName());
|
logger.trace("[SEARCH] evaluating node {} ",current.hasProperty(NodeProperty.TITLE.toString())? current.getProperty(NodeProperty.TITLE.toString()):current.getName());
|
||||||
|
|
||||||
//REMOVE duplicate nodes, in case the indexes are not working
|
//REMOVE duplicate nodes, in case the indexes are not working
|
||||||
if (duplicateId.contains(current.getIdentifier())) {
|
if (duplicateId.contains(current.getIdentifier())) {
|
||||||
|
@ -168,7 +168,7 @@ public class Utils {
|
||||||
if (isToExclude(current, showHidden))
|
if (isToExclude(current, showHidden))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
logger.debug("[SEARCH] current node not excluded {} ",current.hasProperty(NodeProperty.TITLE.toString())? current.getProperty(NodeProperty.TITLE.toString()):current.getName());
|
logger.trace("[SEARCH] current node not excluded {} ",current.hasProperty(NodeProperty.TITLE.toString())? current.getProperty(NodeProperty.TITLE.toString()):current.getName());
|
||||||
|
|
||||||
if (range==null || (count>=range.getStart() && returnList.size()<range.getLimit())) {
|
if (range==null || (count>=range.getStart() && returnList.size()<range.getLimit())) {
|
||||||
T item = node2Item.getFilteredItem(current, excludes, nodeTypeToInclude);
|
T item = node2Item.getFilteredItem(current, excludes, nodeTypeToInclude);
|
||||||
|
|
|
@ -39,14 +39,15 @@ public class VREQueryRetriever implements Callable<List<Item>> {
|
||||||
private Credentials credentials;
|
private Credentials credentials;
|
||||||
private Item vreFolder;
|
private Item vreFolder;
|
||||||
Map<String, Long> cachedMap = new HashMap<>(CACHE_DIMENSION);
|
Map<String, Long> cachedMap = new HashMap<>(CACHE_DIMENSION);
|
||||||
long higherTimestamp = Long.MAX_VALUE;
|
|
||||||
|
|
||||||
long lastTimestamp =0;
|
long lastTimestamp =0;
|
||||||
|
|
||||||
long doTime= 0;
|
long doTime= 0;
|
||||||
boolean underRedo = false;
|
boolean underRedo = false;
|
||||||
Node2ItemConverter node2Item;
|
Node2ItemConverter node2Item;
|
||||||
|
|
||||||
|
private static int TIME_MEASURE = Calendar.MINUTE;
|
||||||
|
private static int VALUE_TIME_BEFORE = 10;
|
||||||
|
|
||||||
|
|
||||||
public VREQueryRetriever(Repository repository, Credentials credentials, Node2ItemConverter node2Item, Item vreFolder) {
|
public VREQueryRetriever(Repository repository, Credentials credentials, Node2ItemConverter node2Item, Item vreFolder) {
|
||||||
|
@ -62,7 +63,7 @@ public class VREQueryRetriever implements Callable<List<Item>> {
|
||||||
try {
|
try {
|
||||||
ses = repository.login(credentials);
|
ses = repository.login(credentials);
|
||||||
Calendar now = Calendar.getInstance();
|
Calendar now = Calendar.getInstance();
|
||||||
now.add(Calendar.HOUR_OF_DAY, -1);
|
now.add(TIME_MEASURE, -1*Math.abs(VALUE_TIME_BEFORE));
|
||||||
|
|
||||||
if (doTime> now.getTimeInMillis() || underRedo) {
|
if (doTime> now.getTimeInMillis() || underRedo) {
|
||||||
logger.debug("executing recents task for {} (cahced result)",vreFolder.getTitle());
|
logger.debug("executing recents task for {} (cahced result)",vreFolder.getTitle());
|
||||||
|
@ -86,7 +87,7 @@ public class VREQueryRetriever implements Callable<List<Item>> {
|
||||||
public synchronized List<Item> redo(Session ses) {
|
public synchronized List<Item> redo(Session ses) {
|
||||||
underRedo = true;
|
underRedo = true;
|
||||||
try {
|
try {
|
||||||
Map<String, Long> tempCachedMap = new HashMap<>(CACHE_DIMENSION);
|
Map<String, Long> tempCachedMap = new HashMap<>(cachedMap);
|
||||||
if (cachedMap.isEmpty())
|
if (cachedMap.isEmpty())
|
||||||
init(ses, tempCachedMap);
|
init(ses, tempCachedMap);
|
||||||
else {
|
else {
|
||||||
|
@ -131,12 +132,11 @@ public class VREQueryRetriever implements Callable<List<Item>> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void insertItemInTheRightPlace(Item item, Map<String, Long> tempCachedMap) {
|
private void insertItemInTheRightPlace(Item item, Map<String, Long> tempCachedMap) {
|
||||||
long lastModifiedTime = item.getLastModificationTime().getTime().getTime();
|
long lastModifiedTime = item.getLastModificationTime().getTimeInMillis();
|
||||||
|
|
||||||
if (!(lastModifiedTime>higherTimestamp && tempCachedMap.size()>CACHE_DIMENSION)) {
|
if (tempCachedMap.size()<CACHE_DIMENSION || lastModifiedTime>Collections.min(tempCachedMap.values()))
|
||||||
tempCachedMap.put(item.getId(), lastModifiedTime);
|
tempCachedMap.put(item.getId(), lastModifiedTime);
|
||||||
if (lastModifiedTime>higherTimestamp) higherTimestamp = lastModifiedTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,6 +185,8 @@ public class VREQueryRetriever implements Callable<List<Item>> {
|
||||||
Item item = node2Item.getItem(nodeAdded, Excludes.ALL);
|
Item item = node2Item.getItem(nodeAdded, Excludes.ALL);
|
||||||
if (tempCachedMap.get(event.getIdentifier())!=null)
|
if (tempCachedMap.get(event.getIdentifier())!=null)
|
||||||
tempCachedMap.remove(event.getIdentifier());
|
tempCachedMap.remove(event.getIdentifier());
|
||||||
|
if (item.isHidden())
|
||||||
|
break;
|
||||||
insertItemInTheRightPlace(item,tempCachedMap);
|
insertItemInTheRightPlace(item,tempCachedMap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -198,6 +200,8 @@ public class VREQueryRetriever implements Callable<List<Item>> {
|
||||||
String identifier = property.getParent().getIdentifier();
|
String identifier = property.getParent().getIdentifier();
|
||||||
tempCachedMap.remove(identifier);
|
tempCachedMap.remove(identifier);
|
||||||
Item item = node2Item.getItem(property.getParent(), Excludes.ALL);
|
Item item = node2Item.getItem(property.getParent(), Excludes.ALL);
|
||||||
|
if (item.isHidden())
|
||||||
|
break;
|
||||||
insertItemInTheRightPlace(item, tempCachedMap);
|
insertItemInTheRightPlace(item, tempCachedMap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -350,7 +350,7 @@ public class ItemsManager extends Impersonable{
|
||||||
log.debug("search for node {}",name);
|
log.debug("search for node {}",name);
|
||||||
ses = repository.getRepository().login(CredentialHandler.getAdminCredentials(context));
|
ses = repository.getRepository().login(CredentialHandler.getAdminCredentials(context));
|
||||||
authChecker.checkReadAuthorizationControl(ses, currentUser, id);
|
authChecker.checkReadAuthorizationControl(ses, currentUser, id);
|
||||||
toReturn = Utils.serachByNameOnFolder(ses, currentUser, authChecker, ses.getNodeByIdentifier(id), excludes, null, showHidden==null?false:showHidden,excludeTrashed==true?false:excludeTrashed , nodeType!=null ? ClassHandler.instance().get(nodeType) : null, name);
|
toReturn = Utils.searchByNameOnFolder(ses, currentUser, authChecker, ses.getNodeByIdentifier(id), excludes, null, showHidden==null?false:showHidden,excludeTrashed==true?false:excludeTrashed , nodeType!=null ? ClassHandler.instance().get(nodeType) : null, name);
|
||||||
log.debug("search retrieved {} elements",toReturn.size());
|
log.debug("search retrieved {} elements",toReturn.size());
|
||||||
}catch (ItemNotFoundException e) {
|
}catch (ItemNotFoundException e) {
|
||||||
log.error("id {} not found",id,e);
|
log.error("id {} not found",id,e);
|
||||||
|
|
Loading…
Reference in New Issue