diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultWorkspaceManager.java b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultWorkspaceManager.java index ab95631..c3f6e79 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultWorkspaceManager.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/DefaultWorkspaceManager.java @@ -1,17 +1,24 @@ package org.gcube.common.storagehub.client.proxies; +import java.net.URLEncoder; import java.util.List; +import javax.ws.rs.client.Entity; import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import org.gcube.common.clients.Call; import org.gcube.common.clients.delegates.ProxyDelegate; +import org.gcube.common.storagehub.model.expressions.SearchableItem; import org.gcube.common.storagehub.model.items.Item; +import org.gcube.common.storagehub.model.query.Query; import org.gcube.common.storagehub.model.service.ItemList; import org.gcube.common.storagehub.model.service.ItemWrapper; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.Gson; + public class DefaultWorkspaceManager implements WorkspaceManagerClient { private final ProxyDelegate delegate; @@ -111,4 +118,35 @@ public class DefaultWorkspaceManager implements WorkspaceManagerClient { } } + @Override + public List search(Query> query, String ... excludeNodes) { + Call call = new Call() { + @Override + public ItemList call(WebTarget manager) throws Exception { + WebTarget myManager = manager.path("query"); + if (excludeNodes !=null && excludeNodes.length>0) + myManager = myManager.queryParam("exclude",excludeNodes); + + myManager = myManager.queryParam("node", query.getSearchableItem().getNodeValue()); + + ObjectMapper mapper = new ObjectMapper(); + String serializedJson = mapper.writeValueAsString(query.getExpression()); + + System.out.println("serialized json "+serializedJson); + + myManager = myManager.queryParam("expr", URLEncoder.encode(serializedJson)); + + Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON); + ItemList response = builder.get(ItemList.class); + return response; + } + }; + try { + ItemList result = delegate.make(call); + return result.getItemlist(); + }catch(Exception e) { + throw new RuntimeException(e); + } + } + } diff --git a/src/main/java/org/gcube/common/storagehub/client/proxies/WorkspaceManagerClient.java b/src/main/java/org/gcube/common/storagehub/client/proxies/WorkspaceManagerClient.java index 615dbc0..9572149 100644 --- a/src/main/java/org/gcube/common/storagehub/client/proxies/WorkspaceManagerClient.java +++ b/src/main/java/org/gcube/common/storagehub/client/proxies/WorkspaceManagerClient.java @@ -2,7 +2,9 @@ package org.gcube.common.storagehub.client.proxies; import java.util.List; +import org.gcube.common.storagehub.model.expressions.SearchableItem; import org.gcube.common.storagehub.model.items.Item; +import org.gcube.common.storagehub.model.query.Query; public interface WorkspaceManagerClient { @@ -13,5 +15,7 @@ public interface WorkspaceManagerClient { List getVreFolders(int start, int limit, String ... excludeNodes); T getVreFolder(String ... excludeNodes); + + List search(Query> query, String ... excludeNodes); } diff --git a/src/test/java/org/gcube/data/access/fs/TestCall.java b/src/test/java/org/gcube/data/access/fs/TestCall.java index 31d164c..91228e8 100644 --- a/src/test/java/org/gcube/data/access/fs/TestCall.java +++ b/src/test/java/org/gcube/data/access/fs/TestCall.java @@ -12,7 +12,12 @@ import org.gcube.common.storagehub.client.StreamDescriptor; import org.gcube.common.storagehub.client.plugins.AbstractPlugin; import org.gcube.common.storagehub.client.proxies.ItemManagerClient; import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient; +import org.gcube.common.storagehub.model.expressions.GenericSearchableItem; +import org.gcube.common.storagehub.model.expressions.SearchableItem; +import org.gcube.common.storagehub.model.expressions.text.Contains; import org.gcube.common.storagehub.model.items.Item; +import org.gcube.common.storagehub.model.query.Queries; +import org.gcube.common.storagehub.model.query.Query; import org.junit.BeforeClass; import org.junit.Test; @@ -87,6 +92,20 @@ public class TestCall { } + @Test + public void search() { + + Query> query = Queries.queryFor(Item.class); + + query.setExpression(new Contains(GenericSearchableItem.get().title, "Data")); + + + WorkspaceManagerClient wsclient = AbstractPlugin.workspace().build(); + List items = wsclient.search(query, "hl:accounting", "jcr:content"); + System.out.println("items are "+items.size()); + + } + /* @Test public void createFolder() throws Exception{