2018-02-15 18:13:50 +01:00
|
|
|
package org.gcube.common.storagehub.client.proxies;
|
|
|
|
|
2018-04-20 18:26:44 +02:00
|
|
|
import java.net.URLEncoder;
|
2018-02-15 18:13:50 +01:00
|
|
|
import java.util.List;
|
|
|
|
|
2018-09-18 17:57:38 +02:00
|
|
|
import javax.ws.rs.client.Entity;
|
2018-02-15 18:13:50 +01:00
|
|
|
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;
|
2018-05-14 16:14:52 +02:00
|
|
|
import org.gcube.common.storagehub.model.expressions.OrderField;
|
2018-04-20 18:26:44 +02:00
|
|
|
import org.gcube.common.storagehub.model.expressions.SearchableItem;
|
2018-02-15 18:13:50 +01:00
|
|
|
import org.gcube.common.storagehub.model.items.Item;
|
2018-04-20 18:26:44 +02:00
|
|
|
import org.gcube.common.storagehub.model.query.Query;
|
2018-02-15 18:13:50 +01:00
|
|
|
import org.gcube.common.storagehub.model.service.ItemList;
|
2018-03-14 16:21:13 +01:00
|
|
|
import org.gcube.common.storagehub.model.service.ItemWrapper;
|
2018-02-15 18:13:50 +01:00
|
|
|
|
2018-04-20 18:26:44 +02:00
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
|
2018-02-15 18:13:50 +01:00
|
|
|
public class DefaultWorkspaceManager implements WorkspaceManagerClient {
|
|
|
|
|
|
|
|
private final ProxyDelegate<WebTarget> delegate;
|
|
|
|
|
|
|
|
|
|
|
|
public DefaultWorkspaceManager(ProxyDelegate<WebTarget> config){
|
|
|
|
this.delegate = config;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2018-03-14 16:21:13 +01:00
|
|
|
public <T extends Item> T getWorkspace(String ... excludeNodes) {
|
|
|
|
Call<WebTarget, ItemWrapper<T>> call = new Call<WebTarget, ItemWrapper<T>>() {
|
|
|
|
@Override
|
|
|
|
public ItemWrapper<T> call(WebTarget manager) throws Exception {
|
|
|
|
WebTarget myManager = manager;
|
|
|
|
if (excludeNodes !=null && excludeNodes.length>0)
|
|
|
|
myManager = myManager.queryParam("exclude",excludeNodes);
|
|
|
|
Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON);
|
|
|
|
ItemWrapper<T> response = builder.get(ItemWrapper.class);
|
|
|
|
return response;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
try {
|
|
|
|
ItemWrapper<T> result = delegate.make(call);
|
|
|
|
return result.getItem();
|
|
|
|
}catch(Exception e) {
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-11 16:58:02 +02:00
|
|
|
@Override
|
|
|
|
public <T extends Item> T retieveItemByPath(String relativePath, String... excludeNodes) {
|
|
|
|
Call<WebTarget, ItemWrapper<T>> call = new Call<WebTarget, ItemWrapper<T>>() {
|
|
|
|
@Override
|
|
|
|
public ItemWrapper<T> call(WebTarget manager) throws Exception {
|
|
|
|
WebTarget myManager = manager;
|
|
|
|
if (excludeNodes !=null && excludeNodes.length>0)
|
|
|
|
myManager = myManager.queryParam("exclude",excludeNodes);
|
|
|
|
|
|
|
|
myManager = manager.queryParam("relPath", relativePath);
|
|
|
|
Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON);
|
|
|
|
ItemWrapper<T> response = builder.get(ItemWrapper.class);
|
|
|
|
return response;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
try {
|
|
|
|
ItemWrapper<T> result = delegate.make(call);
|
|
|
|
return result.getItem();
|
|
|
|
}catch(Exception e) {
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-14 16:21:13 +01:00
|
|
|
@Override
|
|
|
|
public List<? extends Item> getVreFolders(String ... excludeNodes) {
|
2018-02-15 18:13:50 +01:00
|
|
|
Call<WebTarget, ItemList> call = new Call<WebTarget, ItemList>() {
|
|
|
|
@Override
|
|
|
|
public ItemList call(WebTarget manager) throws Exception {
|
2018-03-14 16:21:13 +01:00
|
|
|
WebTarget myManager = manager.path("vrefolders");
|
|
|
|
if (excludeNodes !=null && excludeNodes.length>0)
|
|
|
|
myManager = myManager.queryParam("exclude",excludeNodes);
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public List<? extends Item> getVreFolders(int start, int limit, String ... excludeNodes) {
|
|
|
|
Call<WebTarget, ItemList> call = new Call<WebTarget, ItemList>() {
|
|
|
|
@Override
|
|
|
|
public ItemList call(WebTarget manager) throws Exception {
|
|
|
|
WebTarget myManager = manager.path("vrefolders");
|
2018-02-15 18:13:50 +01:00
|
|
|
if (excludeNodes !=null && excludeNodes.length>0)
|
|
|
|
myManager = myManager.queryParam("exclude",excludeNodes);
|
2018-03-14 16:21:13 +01:00
|
|
|
|
|
|
|
myManager = myManager.queryParam("start", start).queryParam("limit", limit);
|
|
|
|
|
2018-02-15 18:13:50 +01:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-04-18 15:55:20 +02:00
|
|
|
@Override
|
|
|
|
public <T extends Item> T getVreFolder(String ... excludeNodes) {
|
|
|
|
Call<WebTarget, ItemWrapper<T>> call = new Call<WebTarget, ItemWrapper<T>>() {
|
|
|
|
@Override
|
|
|
|
public ItemWrapper<T> call(WebTarget manager) throws Exception {
|
|
|
|
WebTarget myManager = manager.path("vrefolder");
|
|
|
|
if (excludeNodes !=null && excludeNodes.length>0)
|
|
|
|
myManager = myManager.queryParam("exclude",excludeNodes);
|
|
|
|
|
|
|
|
Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON);
|
|
|
|
ItemWrapper<T> response = builder.get(ItemWrapper.class);
|
|
|
|
return response;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
try {
|
|
|
|
ItemWrapper<T> result = delegate.make(call);
|
|
|
|
return result.getItem();
|
|
|
|
}catch(Exception e) {
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-15 17:33:13 +02:00
|
|
|
@Override
|
|
|
|
public List<? extends Item> getRecentModifiedFilePerVre() {
|
|
|
|
Call<WebTarget, ItemList> call = new Call<WebTarget, ItemList>() {
|
|
|
|
@Override
|
|
|
|
public ItemList call(WebTarget manager) throws Exception {
|
|
|
|
WebTarget myManager = manager.path("vrefolder").path("recents");
|
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-05-14 16:14:52 +02:00
|
|
|
@Override
|
|
|
|
public <T extends Item> T getTrashFolder(String ... excludeNodes) {
|
|
|
|
Call<WebTarget, ItemWrapper<T>> call = new Call<WebTarget, ItemWrapper<T>>() {
|
|
|
|
@Override
|
|
|
|
public ItemWrapper<T> call(WebTarget manager) throws Exception {
|
|
|
|
WebTarget myManager = manager.path("trash");
|
|
|
|
if (excludeNodes !=null && excludeNodes.length>0)
|
|
|
|
myManager = myManager.queryParam("exclude",excludeNodes);
|
|
|
|
|
|
|
|
Invocation.Builder builder = myManager.request(MediaType.APPLICATION_JSON);
|
|
|
|
ItemWrapper<T> response = builder.get(ItemWrapper.class);
|
|
|
|
return response;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
try {
|
|
|
|
ItemWrapper<T> result = delegate.make(call);
|
|
|
|
return result.getItem();
|
|
|
|
}catch(Exception e) {
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-09-18 17:57:38 +02:00
|
|
|
@Override
|
|
|
|
public void emptyTrash(String id) {
|
|
|
|
Call<WebTarget, Void> call = new Call<WebTarget, Void>() {
|
|
|
|
@Override
|
|
|
|
public Void call(WebTarget manager) throws Exception {
|
|
|
|
WebTarget myManager = manager.path("trash").path("empty");
|
|
|
|
Invocation.Builder builder = myManager.request();
|
|
|
|
builder.delete();
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
try {
|
|
|
|
delegate.make(call);
|
|
|
|
}catch(Exception e) {
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String restoreFromTrash(final String id) {
|
|
|
|
Call<WebTarget, String> call = new Call<WebTarget, String>() {
|
|
|
|
@Override
|
|
|
|
public String call(WebTarget manager) throws Exception {
|
|
|
|
WebTarget myManager = manager.path("trash").path("restore");
|
|
|
|
Invocation.Builder builder = myManager.request();
|
|
|
|
return builder.put(Entity.text(id)).readEntity(String.class);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
try {
|
|
|
|
return delegate.make(call);
|
|
|
|
}catch(Exception e) {
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-04-20 18:26:44 +02:00
|
|
|
@Override
|
|
|
|
public List<? extends Item> search(Query<SearchableItem<?>> query, String ... excludeNodes) {
|
|
|
|
Call<WebTarget, ItemList> call = new Call<WebTarget, ItemList>() {
|
|
|
|
@Override
|
|
|
|
public ItemList call(WebTarget manager) throws Exception {
|
|
|
|
WebTarget myManager = manager.path("query");
|
|
|
|
if (excludeNodes !=null && excludeNodes.length>0)
|
|
|
|
myManager = myManager.queryParam("exclude",excludeNodes);
|
2018-05-07 18:05:54 +02:00
|
|
|
|
|
|
|
if (query.getOrderFields() !=null && query.getOrderFields().size() >0) {
|
2018-05-14 16:14:52 +02:00
|
|
|
for (OrderField field :query.getOrderFields())
|
|
|
|
myManager = myManager.queryParam("o","["+field.getField().getName()+"] "+field.getMode().toString());
|
2018-05-07 18:05:54 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
myManager = myManager.queryParam("n", query.getSearchableItem().getNodeValue());
|
|
|
|
|
|
|
|
if (query.getLimit()!=-1)
|
|
|
|
myManager = myManager.queryParam("l", query.getLimit());
|
|
|
|
|
|
|
|
if (query.getOffset()!=-1)
|
|
|
|
myManager = myManager.queryParam("f", query.getOffset());
|
|
|
|
|
|
|
|
|
2018-04-20 18:26:44 +02:00
|
|
|
|
|
|
|
ObjectMapper mapper = new ObjectMapper();
|
|
|
|
String serializedJson = mapper.writeValueAsString(query.getExpression());
|
|
|
|
|
2018-05-07 18:05:54 +02:00
|
|
|
myManager = myManager.queryParam("e", URLEncoder.encode(serializedJson));
|
|
|
|
|
2018-04-20 18:26:44 +02:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
2018-06-11 16:58:02 +02:00
|
|
|
|
|
|
|
|
2018-04-20 18:26:44 +02:00
|
|
|
|
2018-02-15 18:13:50 +01:00
|
|
|
}
|