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.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{
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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