Fixed Projections in queries
This commit is contained in:
parent
76d1113af0
commit
ab3bfe0cd3
|
@ -111,7 +111,7 @@ public class WorkspaceManager {
|
|||
// STATIC SYNCH METHODS
|
||||
|
||||
@Synchronized
|
||||
private static FolderContainer getApplicationBaseFolder(StorageHubClient sgClient) throws StorageHubException {
|
||||
public static FolderContainer getApplicationBaseFolder(StorageHubClient sgClient) throws StorageHubException {
|
||||
FolderContainer vre=sgClient.openVREFolder();
|
||||
try {
|
||||
return vre.openByRelativePath(APP_FOLDER).asFolder();
|
||||
|
|
|
@ -100,7 +100,7 @@ public class ConcessioniMongoManager extends MongoManager{
|
|||
|
||||
public Iterable<Concessione> list(){
|
||||
LinkedBlockingQueue queue=new LinkedBlockingQueue<Concessione>();
|
||||
iterate(null, collectionName).forEach(
|
||||
iterate(null,null, collectionName).forEach(
|
||||
new Consumer<Document>() {
|
||||
@Override
|
||||
public void accept(Document d) {
|
||||
|
@ -115,10 +115,10 @@ public class ConcessioniMongoManager extends MongoManager{
|
|||
return queue;
|
||||
}
|
||||
|
||||
public Iterable<Concessione> search(String filter){
|
||||
public Iterable<Concessione> search(Document filter){
|
||||
log.info("Searching concessione for filter {} ",filter);
|
||||
LinkedBlockingQueue queue=new LinkedBlockingQueue<Concessione>();
|
||||
iterate(filter,collectionName).forEach(
|
||||
iterate(filter,null,collectionName).forEach(
|
||||
(Consumer<? super Document>) (Document d)->{try{
|
||||
queue.put(asConcessione(d));
|
||||
}catch(Throwable t){log.warn("Unable to translate "+d);}});
|
||||
|
@ -126,12 +126,12 @@ public class ConcessioniMongoManager extends MongoManager{
|
|||
return queue;
|
||||
}
|
||||
|
||||
public Iterable<Concessione> query(QueryRequest queryRequest){
|
||||
public Iterable<Document> query(QueryRequest queryRequest){
|
||||
log.info("Searching concessione for filter {} ",queryRequest);
|
||||
LinkedBlockingQueue queue=new LinkedBlockingQueue<Concessione>();
|
||||
query(queryRequest,collectionName).forEach(
|
||||
(Consumer<? super Document>) (Document d)->{try{
|
||||
queue.put(asConcessione(d));
|
||||
queue.put(d);
|
||||
}catch(Throwable t){log.warn("Unable to translate "+d);}});
|
||||
log.info("Returned {} elements ",queue.size());
|
||||
return queue;
|
||||
|
@ -301,7 +301,7 @@ public class ConcessioniMongoManager extends MongoManager{
|
|||
}
|
||||
|
||||
private static Concessione removeFromIndex(Concessione record) {
|
||||
log.info("Removing from index {} ",record.getId());
|
||||
log.info("Removing from index {} ",record.getMongo_id());
|
||||
ValidationReport report= new ValidationReport("Remove From Index Report ");
|
||||
PostgisIndex index;
|
||||
try {
|
||||
|
@ -372,7 +372,6 @@ public class ConcessioniMongoManager extends MongoManager{
|
|||
list.addAll(concessione.getPianteFineScavo());
|
||||
for(AssociatedContent c:list) {
|
||||
if(c instanceof LayerConcessione) {
|
||||
//TODO actually delete
|
||||
List<PersistedContent> contents=c.getActualContent();
|
||||
List<PersistedContent> toRemove=new ArrayList<>();
|
||||
for(PersistedContent p:contents){
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package org.gcube.application.geoportal.service.engine.mongo;
|
||||
|
||||
|
||||
import com.mongodb.Block;
|
||||
import com.mongodb.MongoClient;
|
||||
import com.mongodb.client.FindIterable;
|
||||
import com.mongodb.client.MongoCollection;
|
||||
|
@ -80,23 +81,27 @@ public abstract class MongoManager {
|
|||
}
|
||||
|
||||
|
||||
public FindIterable<Document> iterate(String filterString,String collectionName) {
|
||||
public FindIterable<Document> iterate(Document filter, Document projection, String collectionName) {
|
||||
log.debug("Iterate over {} ",collectionName);
|
||||
MongoDatabase database=getDatabase();
|
||||
MongoCollection<Document> coll=database.getCollection(collectionName);
|
||||
if(filterString == null || filterString.isEmpty())
|
||||
return coll.find();
|
||||
else
|
||||
return coll.find(Document.parse(filterString));
|
||||
|
||||
if(filter == null) filter=new Document();
|
||||
|
||||
log.debug("Applying Filter "+filter.toJson());
|
||||
|
||||
|
||||
if(projection != null ) {
|
||||
log.debug("Applying projection "+projection.toJson());
|
||||
return coll.find(filter).projection(projection);
|
||||
}else return coll.find(filter);
|
||||
|
||||
}
|
||||
|
||||
public FindIterable<Document> query(QueryRequest request, String collectionName){
|
||||
MongoDatabase database=getDatabase();
|
||||
MongoCollection<Document> coll=database.getCollection(collectionName);
|
||||
FindIterable<Document> toReturn=iterate(request.getFilter(), collectionName);
|
||||
|
||||
if(request.getTransformation()!=null&&!request.getTransformation().isEmpty()){
|
||||
log.warn("Transformation not YET Supported");
|
||||
}
|
||||
FindIterable<Document> toReturn=iterate(request.getFilter(), request.getProjection(),collectionName);
|
||||
|
||||
|
||||
|
||||
if(request.getOrdering()!=null){
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package org.gcube.application.geoportal.service.rest;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.bson.Document;
|
||||
import org.gcube.application.geoportal.common.model.legacy.Concessione;
|
||||
import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest;
|
||||
import org.gcube.application.geoportal.common.model.rest.Configuration;
|
||||
|
@ -9,6 +10,7 @@ import org.gcube.application.geoportal.common.rest.InterfaceConstants;
|
|||
import org.gcube.application.geoportal.service.engine.mongo.ConcessioniMongoManager;
|
||||
import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex;
|
||||
import org.gcube.application.geoportal.service.model.internal.faults.DeletionException;
|
||||
import org.gcube.application.geoportal.service.utils.Serialization;
|
||||
import org.json.JSONArray;
|
||||
|
||||
import javax.ws.rs.*;
|
||||
|
@ -208,7 +210,7 @@ public class ConcessioniOverMongo {
|
|||
@Override
|
||||
protected Iterable<Concessione> run() throws Exception, WebApplicationException {
|
||||
ConcessioniMongoManager manager=new ConcessioniMongoManager();
|
||||
return manager.search(filter);
|
||||
return manager.search(Document.parse(filter));
|
||||
}
|
||||
}.execute().getResult();
|
||||
}
|
||||
|
@ -217,13 +219,29 @@ public class ConcessioniOverMongo {
|
|||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Path("/"+InterfaceConstants.Methods.QUERY_PATH)
|
||||
public Iterable<Concessione> search(QueryRequest queryRequest){
|
||||
return new GuardedMethod<Iterable<Concessione>>() {
|
||||
public String query(String queryString){
|
||||
return new GuardedMethod<String>() {
|
||||
@Override
|
||||
protected Iterable<Concessione> run() throws Exception, WebApplicationException {
|
||||
protected String run() throws Exception, WebApplicationException {
|
||||
ConcessioniMongoManager manager=new ConcessioniMongoManager();
|
||||
return manager.query(queryRequest);
|
||||
|
||||
Document queryDocument=Document.parse(queryString);
|
||||
QueryRequest req=new QueryRequest();
|
||||
if(queryDocument.containsKey("ordering"))
|
||||
req.setOrdering(Serialization.read(((Document)queryDocument.get("ordering")).toJson(),QueryRequest.OrderedRequest.class));
|
||||
if(queryDocument.containsKey("paging"))
|
||||
req.setPaging(Serialization.read(((Document)queryDocument.get("paging")).toJson(),QueryRequest.PagedRequest.class));
|
||||
req.setProjection(queryDocument.get("projection",Document.class));
|
||||
req.setFilter(queryDocument.get("filter",Document.class));
|
||||
|
||||
StringBuilder builder=new StringBuilder("[");
|
||||
manager.query(req).forEach(d->{builder.append(d.toJson()+",");});
|
||||
builder.deleteCharAt(builder.length()-1);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
}.execute().getResult();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import org.gcube.application.geoportal.common.rest.TempFile;
|
|||
import org.gcube.application.geoportal.common.utils.Files;
|
||||
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
||||
import org.gcube.application.geoportal.service.utils.Serialization;
|
||||
import org.json.JSONObject;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
@ -97,15 +98,18 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
|
|||
return search(query,target);
|
||||
}
|
||||
|
||||
private static Iterator<Concessione> queryFile(String filename, WebTarget target) throws Exception {
|
||||
private static <T> Iterator<T> queryFile(String filename, WebTarget target, Class<T> clazz) throws Exception {
|
||||
String queryString= Files.readFileAsString(Files.getFileFromResources(
|
||||
"concessioni/jsonQueries/"+filename).getAbsolutePath(), Charset.defaultCharset());
|
||||
|
||||
String result = check(target.path(InterfaceConstants.Methods.QUERY_PATH).request(MediaType.APPLICATION_JSON_TYPE).post(
|
||||
Entity.entity(queryString,MediaType.APPLICATION_JSON)),String.class);
|
||||
return Serialization.readCollection(result,Concessione.class);
|
||||
return Serialization.readCollection(result,clazz);
|
||||
}
|
||||
|
||||
private static Iterator<Concessione> queryFile(String filename, WebTarget target) throws Exception {
|
||||
return queryFile(filename,target,Concessione.class);
|
||||
}
|
||||
|
||||
// ********** TESTS
|
||||
|
||||
|
@ -128,8 +132,12 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
|
|||
public void query() throws Exception {
|
||||
WebTarget target=target(PATH);
|
||||
try {
|
||||
System.out.println("Last Registered : " + queryFile("lastRegistered.json", target).next().getCreationTime());
|
||||
System.out.println("First Registered : " + queryFile("firstRegistered.json", target).next().getCreationTime());
|
||||
// System.out.println("Last Registered : " + queryFile("lastRegistered.json", target).next().getCreationTime());
|
||||
// System.out.println("First Registered : " + queryFile("firstRegistered.json", target).next().getCreationTime());
|
||||
System.out.println("Last Names by Fabio : ");
|
||||
queryFile("lastNamesRegisteredByFabio.json", target, JSONObject.class).forEachRemaining(c -> {System.out.println(c);});
|
||||
System.out.println("Publication warning messages : ");
|
||||
queryFile("publicationWarningMessages.json", target, JSONObject.class).forEachRemaining(c -> {System.out.println(c);});
|
||||
}catch(NoSuchElementException e){
|
||||
System.out.println("NO element found, probably empty DB");
|
||||
}
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
package org.gcube.application.geoportal.service.legacy;
|
||||
package org.gcube.application.geoportal.service;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.mongodb.Block;
|
||||
import com.mongodb.MongoClient;
|
||||
import com.mongodb.client.MongoCollection;
|
||||
import com.mongodb.client.MongoDatabase;
|
||||
import com.mongodb.client.model.Projections;
|
||||
import org.bson.Document;
|
||||
import org.gcube.application.geoportal.service.TokenSetter;
|
||||
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
|
||||
import org.gcube.application.geoportal.service.engine.mongo.MongoManager;
|
||||
import org.gcube.application.geoportal.service.engine.providers.MongoClientProvider;
|
||||
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
|
||||
import org.junit.BeforeClass;
|
||||
|
@ -15,12 +18,26 @@ import java.io.IOException;
|
|||
|
||||
public class MongoTests {
|
||||
|
||||
public static class MongoTester extends MongoManager {
|
||||
|
||||
public MongoTester() throws ConfigurationException {
|
||||
}
|
||||
|
||||
public MongoCollection<Document> getCollection(){return getDatabase().getCollection("legacyConcessioni");}
|
||||
|
||||
@Override
|
||||
protected MongoDatabase getDatabase() {
|
||||
return client.getDatabase("gna_dev");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@BeforeClass
|
||||
public static final void init() {
|
||||
ImplementationProvider.get().setMongoClientProvider(new MongoClientProvider() {
|
||||
@Override
|
||||
public MongoClient getObject() throws ConfigurationException {
|
||||
TokenSetter.set("/gcube/devNext/NextNext");
|
||||
TokenSetter.set("/gcube/devsec/devVRE");
|
||||
return super.getObject();
|
||||
}
|
||||
});
|
||||
|
@ -39,10 +56,27 @@ public class MongoTests {
|
|||
// MongoManager manager=new MongoManager();
|
||||
// Profile f=Serialization.mapper.readerFor(Profile.class).readValue(
|
||||
// Files.getFileFromResources("fakeProfile.json"));
|
||||
//
|
||||
//
|
||||
// manager.iterate(new Document(),f).forEach(printBlock);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void queries() throws ConfigurationException {
|
||||
MongoTester tester=new MongoTester();
|
||||
System.out.println("Using builders..");
|
||||
tester.getCollection().find(Document.parse("{\"report.status\" : \"WARNING\"}")).
|
||||
projection(Projections.include("nome")).forEach(printBlock);
|
||||
System.out.println("Deserializing documents");
|
||||
tester.getCollection().find(Document.parse("{\"report.status\" : \"WARNING\"}")).
|
||||
projection(Document.parse("{\"nome\" : 1}")).forEach(printBlock);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkQuerySerialization(){
|
||||
System.out.println(Projections.include("nome"));
|
||||
}
|
||||
|
||||
// @Test
|
||||
// public void writeProject() {
|
||||
// MongoManager manager=new MongoManager();
|
|
@ -0,0 +1,31 @@
|
|||
package org.gcube.application.geoportal.service.ws;
|
||||
|
||||
import org.gcube.application.geoportal.service.TokenSetter;
|
||||
import org.gcube.common.storagehub.client.dsl.StorageHubClient;
|
||||
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
||||
import org.gcube.common.storagehub.model.items.*;
|
||||
|
||||
public class DescribeWSFolder {
|
||||
|
||||
public static void main(String[] args) throws StorageHubException {
|
||||
String context="/gcube/devsec/devVRE";
|
||||
String folderID="fea4a885-7e60-4294-83d0-82162e7462f4";
|
||||
|
||||
|
||||
TokenSetter.set(context);
|
||||
StorageHubClient shc = new StorageHubClient();
|
||||
FolderItem folder=shc.open(folderID).asFolder().get();
|
||||
|
||||
System.out.println("PATH : "+folder.getPath());
|
||||
System.out.println("HIDDEN : "+folder.isHidden());
|
||||
System.out.println("Description : "+folder.getDescription());
|
||||
|
||||
System.out.println("Listing... ");
|
||||
for (Item item : shc.open(folderID).asFolder().list().getItems()) {
|
||||
System.out.println("name:" + item.getName() + " is a File?: " + (item instanceof AbstractFileItem));
|
||||
System.out.println("name:" + item.getName() + " is a folder?: " + (item instanceof FolderItem));
|
||||
System.out.println("name:" + item.getName() + " is a shared folder?: " + (item instanceof SharedFolder));
|
||||
System.out.println("name:" + item.getName() + " is a VRE folder?: " + (item instanceof VreFolder));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package org.gcube.application.geoportal.service.ws;
|
||||
|
||||
public class DisplayWorkspaceTree {
|
||||
|
||||
public static void main(String[] args) {
|
||||
String context="/gcube/devsec/devVRE";
|
||||
|
||||
String folderId=null; // NB null ==
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package org.gcube.application.geoportal.service.ws;
|
||||
|
||||
import org.gcube.application.geoportal.service.TokenSetter;
|
||||
import org.gcube.application.geoportal.service.engine.WorkspaceManager;
|
||||
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
||||
import org.gcube.common.storagehub.client.dsl.StorageHubClient;
|
||||
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
||||
|
||||
public class SetWSFolderVisibility {
|
||||
|
||||
public static void main(String[] args) throws StorageHubException {
|
||||
|
||||
String context="/gcube/devsec/devVRE";
|
||||
Boolean setVisible=true;
|
||||
|
||||
|
||||
|
||||
TokenSetter.set(context);
|
||||
StorageHubClient shc = new StorageHubClient();
|
||||
FolderContainer folderContainer = WorkspaceManager.getApplicationBaseFolder(shc);
|
||||
if(setVisible)
|
||||
folderContainer.setVisible();
|
||||
else
|
||||
folderContainer.setHidden(); //will not appear in the workspace GUI
|
||||
System.out.println("Done, children count "+folderContainer.list().getItems().size());
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"paging" : {
|
||||
"offset" : 0,
|
||||
"limit" : 1
|
||||
},
|
||||
"ordering" : {
|
||||
"direction" : "DESCENDING",
|
||||
"fields" : ["creationTime","nome"]
|
||||
},
|
||||
"filter" : {
|
||||
"creationUser" : {$eq : "fabio.sinibaldi"}
|
||||
},
|
||||
"projection" : {
|
||||
"nome" : 1
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -7,4 +7,5 @@
|
|||
"direction" : "DESCENDING",
|
||||
"fields" : ["creationTime","nome"]
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"ordering" : {
|
||||
"direction" : "DESCENDING",
|
||||
"fields" : ["nome"]
|
||||
},
|
||||
|
||||
"filter" : {"report.status" : {"$eq" : "WARNING"}},
|
||||
"projection" : {"report.warningMessages" : 1}
|
||||
|
||||
}
|
Reference in New Issue