Introduced Search Feature

This commit is contained in:
Fabio Sinibaldi 2021-08-06 16:17:24 +02:00
parent cd04e5f49e
commit 351bc79324
9 changed files with 122 additions and 7 deletions

View File

@ -13,11 +13,11 @@ import org.gcube.application.geoportal.common.rest.TempFile;
import org.gcube.application.geoportal.common.utils.Files;
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
import org.gcube.application.geoportal.service.engine.SDIManager;
import org.gcube.application.geoportal.service.engine.providers.StorageClientProvider;
import org.gcube.application.geoportal.service.engine.WorkspaceManager;
import org.gcube.application.geoportal.service.engine.WorkspaceManager.FileOptions;
import org.gcube.application.geoportal.service.engine.WorkspaceManager.FolderOptions;
import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex;
import org.gcube.application.geoportal.service.engine.providers.StorageClientProvider;
import org.gcube.application.geoportal.service.model.internal.faults.*;
import org.gcube.application.geoportal.service.utils.Serialization;
import org.gcube.common.storagehub.client.dsl.FolderContainer;
@ -29,6 +29,7 @@ import java.sql.SQLException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.function.Consumer;
@Slf4j
@ -145,6 +146,17 @@ public class ConcessioniMongoManager extends MongoManager{
}
}
public Iterable<Concessione> search(String filter){
log.info("Searching concessione for filter {} ",filter);
Document filterDocument=(filter!=null&&!filter.isEmpty())?Document.parse(filter):null;
LinkedBlockingQueue queue=new LinkedBlockingQueue<Concessione>();
iterate(filterDocument,collectionName).forEach(
(Consumer<? super Document>) (Document d)->{try{
queue.put(asConcessione(d));
}catch(Throwable t){log.warn("Unable to translate "+d);}});
log.info("Returned {} elements ",queue.size());
return queue;
}
public Concessione unpublish(String id) throws DeletionException {
try{

View File

@ -35,7 +35,7 @@ public class StorageClientProvider extends AbstractScopedMap<IClient> {
@Override
protected void dispose(IClient toDispose) {
try {
//TODO ASK LUCA
//TODO ASK
// toDispose.close();
}catch (NullPointerException e) {
// expected if closed without uploading

View File

@ -0,0 +1,27 @@
package org.gcube.application.geoportal.service.model.internal.rest;
import lombok.Data;
@Data
public class QueryRequest {
@Data
public static class PagedRequest{
private String OFFSET;
private String Limit;
}
@Data
public static class OrderedRequest{
public static enum Direction{DSC,ASC};
private String orderBy;
private String Limit;
}
private String filter;
private String transformation;
private PagedRequest paging;
}

View File

@ -8,6 +8,7 @@ import org.gcube.application.geoportal.service.engine.ImplementationProvider;
import org.gcube.application.geoportal.service.engine.mongo.ConcessioniMongoManager;
import org.gcube.application.geoportal.service.model.internal.Configuration;
import org.gcube.application.geoportal.service.model.internal.faults.DeletionException;
import org.gcube.application.geoportal.service.model.internal.rest.QueryRequest;
import org.gcube.application.geoportal.service.utils.Serialization;
import org.json.JSONArray;
import org.json.JSONObject;
@ -196,5 +197,34 @@ public class ConcessioniOverMongo {
}
}.execute().getResult();
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/"+"search")
public String search(String filter){
return new GuardedMethod<String>() {
@Override
protected String run() throws Exception, WebApplicationException {
ConcessioniMongoManager manager=new ConcessioniMongoManager();
JSONArray jsonArray=new JSONArray();
manager.search(filter).forEach((Concessione c)->{jsonArray.put(c);});
return jsonArray.toString();
}
}.execute().getResult();
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/"+"query")
public String search(QueryRequest queryRequest){
return new GuardedMethod<String>() {
@Override
protected String run() throws Exception, WebApplicationException {
//TODO IMPLEMENT
throw new Exception("TO IMPLEMENT");
}
}.execute().getResult();
}
}

View File

@ -18,6 +18,7 @@ import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.FileInputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
@ -56,6 +57,12 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
put(Entity.entity(Serialization.write(conc), MediaType.APPLICATION_JSON));
return check(resp,Concessione.class);
}
private static Concessione unpublish(WebTarget target, String id) throws Exception {
Response resp=target.path(PUBLISH_PATH).path(id).request(MediaType.APPLICATION_JSON).
delete();
return check(resp,Concessione.class);
}
private static Concessione register(WebTarget target, Concessione c) throws Exception {
Response resp=target.request(MediaType.APPLICATION_JSON).post(Entity.entity(Serialization.write(c), MediaType.APPLICATION_JSON));
return check(resp,Concessione.class);
@ -64,7 +71,23 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
private static Concessione get(WebTarget target) throws Exception {
return register(target,TestModel.prepareConcessione());
}
private static Concessione getById(WebTarget target ,String id) throws Exception {
return check(target.path(id).request(MediaType.APPLICATION_JSON).get(),Concessione.class);
}
private static List<Concessione> query(String query,WebTarget target) throws Exception {
return check(target.path("search").request(MediaType.APPLICATION_JSON_TYPE).post(
Entity.entity(query,MediaType.APPLICATION_JSON)),List.class);
}
private static List<Concessione> queryFile(String filename,WebTarget target) throws Exception {
String query= Files.readFileAsString(Files.getFileFromResources(
"concessioni/jsonFilters/"+filename).getAbsolutePath(), Charset.defaultCharset());
return query(query,target);
}
// ********** TESTS
@Test
@ -73,6 +96,17 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
System.out.println(target.request(MediaType.APPLICATION_JSON).get(List.class));
}
@Test
public void search() throws Exception {
WebTarget target=target(PATH);
// System.out.println("All :"+query(null,target).size());
// System.out.println("All (filter):"+queryFile("all.json",target).size());
// System.out.println("Validated : "+ queryFile("validated.json",target).size());
// System.out.println("Legacy ID : "+ queryFile("legacyid.json",target).size());
// System.out.println("Non fabio : "+ queryFile("nonFabio.json",target).size());
System.out.println("Missing Centroid : "+ queryFile("missingCentroid.json",target).size());
}
@Test
public void getConfiguration() throws Exception {
@ -108,7 +142,7 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
public void republish() throws Exception{
WebTarget target=target(PATH);
Concessione published=getFullPublished(target);
check(target.path(InterfaceConstants.Methods.PUBLISH_PATH).path(published.getMongo_id()).request(MediaType.APPLICATION_JSON).delete(),null);
published = unpublish(target,published.getMongo_id());
System.out.println("Republishing..");
published=publish(target,published);
Assert.assertEquals(published.getReport().getStatus(),ValidationStatus.PASSED);
@ -116,9 +150,10 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
@Test
public void deletePrecise(){
public void handlePrecise() throws Exception {
WebTarget target=target(PATH);
String id="60195d0c02ad3d7fa3614d75";
String id="610415af02ad3d05b5f81ee3";
publish(target,unpublish(target,id));
target.path(id).queryParam(InterfaceConstants.Parameters.FORCE,true).request(MediaType.APPLICATION_JSON).delete();
}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1,3 @@
{
"id" : {$gt : 0}
}

View File

@ -0,0 +1,4 @@
{
"centroidLat" : 0
}

View File

@ -0,0 +1,3 @@
{
"creationUser" : {$ne : "fabio.sinibaldi"}
}