Introduced Search Feature
This commit is contained in:
parent
cd04e5f49e
commit
351bc79324
|
@ -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.common.utils.Files;
|
||||||
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
|
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
|
||||||
import org.gcube.application.geoportal.service.engine.SDIManager;
|
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;
|
||||||
import org.gcube.application.geoportal.service.engine.WorkspaceManager.FileOptions;
|
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.WorkspaceManager.FolderOptions;
|
||||||
import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex;
|
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.model.internal.faults.*;
|
||||||
import org.gcube.application.geoportal.service.utils.Serialization;
|
import org.gcube.application.geoportal.service.utils.Serialization;
|
||||||
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
||||||
|
@ -29,6 +29,7 @@ import java.sql.SQLException;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
@Slf4j
|
@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 {
|
public Concessione unpublish(String id) throws DeletionException {
|
||||||
try{
|
try{
|
||||||
|
|
|
@ -35,7 +35,7 @@ public class StorageClientProvider extends AbstractScopedMap<IClient> {
|
||||||
@Override
|
@Override
|
||||||
protected void dispose(IClient toDispose) {
|
protected void dispose(IClient toDispose) {
|
||||||
try {
|
try {
|
||||||
//TODO ASK LUCA
|
//TODO ASK
|
||||||
// toDispose.close();
|
// toDispose.close();
|
||||||
}catch (NullPointerException e) {
|
}catch (NullPointerException e) {
|
||||||
// expected if closed without uploading
|
// expected if closed without uploading
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
|
@ -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.engine.mongo.ConcessioniMongoManager;
|
||||||
import org.gcube.application.geoportal.service.model.internal.Configuration;
|
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.faults.DeletionException;
|
||||||
|
import org.gcube.application.geoportal.service.model.internal.rest.QueryRequest;
|
||||||
import org.gcube.application.geoportal.service.utils.Serialization;
|
import org.gcube.application.geoportal.service.utils.Serialization;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
@ -196,5 +197,34 @@ public class ConcessioniOverMongo {
|
||||||
}
|
}
|
||||||
}.execute().getResult();
|
}.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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ import javax.ws.rs.client.WebTarget;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -56,6 +57,12 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
|
||||||
put(Entity.entity(Serialization.write(conc), MediaType.APPLICATION_JSON));
|
put(Entity.entity(Serialization.write(conc), MediaType.APPLICATION_JSON));
|
||||||
return check(resp,Concessione.class);
|
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 {
|
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));
|
Response resp=target.request(MediaType.APPLICATION_JSON).post(Entity.entity(Serialization.write(c), MediaType.APPLICATION_JSON));
|
||||||
return check(resp,Concessione.class);
|
return check(resp,Concessione.class);
|
||||||
|
@ -64,7 +71,23 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
|
||||||
private static Concessione get(WebTarget target) throws Exception {
|
private static Concessione get(WebTarget target) throws Exception {
|
||||||
return register(target,TestModel.prepareConcessione());
|
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
|
// ********** TESTS
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -73,6 +96,17 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
|
||||||
System.out.println(target.request(MediaType.APPLICATION_JSON).get(List.class));
|
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
|
@Test
|
||||||
public void getConfiguration() throws Exception {
|
public void getConfiguration() throws Exception {
|
||||||
|
@ -108,7 +142,7 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
|
||||||
public void republish() throws Exception{
|
public void republish() throws Exception{
|
||||||
WebTarget target=target(PATH);
|
WebTarget target=target(PATH);
|
||||||
Concessione published=getFullPublished(target);
|
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..");
|
System.out.println("Republishing..");
|
||||||
published=publish(target,published);
|
published=publish(target,published);
|
||||||
Assert.assertEquals(published.getReport().getStatus(),ValidationStatus.PASSED);
|
Assert.assertEquals(published.getReport().getStatus(),ValidationStatus.PASSED);
|
||||||
|
@ -116,9 +150,10 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void deletePrecise(){
|
public void handlePrecise() throws Exception {
|
||||||
WebTarget target=target(PATH);
|
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();
|
target.path(id).queryParam(InterfaceConstants.Parameters.FORCE,true).request(MediaType.APPLICATION_JSON).delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
{}
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"id" : {$gt : 0}
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"centroidLat" : 0
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"creationUser" : {$ne : "fabio.sinibaldi"}
|
||||||
|
}
|
Reference in New Issue