Added owner filter in lsiting and deleteAll
This commit is contained in:
parent
e8e29532fa
commit
abc354ee1b
|
@ -331,7 +331,7 @@ public class CKANPackage extends CKAN implements Moderated {
|
|||
}
|
||||
}
|
||||
|
||||
protected Map<String,String> getListCountParameters(int limit, int offset) {
|
||||
protected Map<String,String> getListingParameters(int limit, int offset) {
|
||||
Map<String,String> parameters = new HashMap<>();
|
||||
if(limit <= 0) {
|
||||
// According to CKAN documentation
|
||||
|
@ -346,21 +346,72 @@ public class CKANPackage extends CKAN implements Moderated {
|
|||
}
|
||||
parameters.put(START_KEY, String.valueOf(offset * limit));
|
||||
|
||||
if(uriInfo != null) {
|
||||
MultivaluedMap<String,String> queryParameters = uriInfo.getQueryParameters();
|
||||
parameters = checkListParameters(queryParameters, parameters);
|
||||
}
|
||||
|
||||
if(!parameters.containsKey(GCatConstants.Q_KEY)) {
|
||||
String filter = getFilterForOrganizations();
|
||||
parameters.put(GCatConstants.Q_KEY, filter);
|
||||
}
|
||||
MultivaluedMap<String,String> queryParameters = uriInfo.getQueryParameters();
|
||||
parameters = checkListParameters(queryParameters, parameters);
|
||||
|
||||
parameters = addModerationStatusFilter(parameters);
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param purge indicate if the item
|
||||
* @return the name list of deleted items
|
||||
*/
|
||||
public String deleteAll(boolean purge){
|
||||
MultivaluedMap<String,String> queryParameters = uriInfo.getQueryParameters();
|
||||
if(queryParameters.containsKey(GCatConstants.OWN_ONLY_QUERY_PARAMETER)) {
|
||||
if(ckanUser.getRole() != Role.ADMIN) {
|
||||
queryParameters.remove(GCatConstants.OWN_ONLY_QUERY_PARAMETER);
|
||||
queryParameters.add(GCatConstants.OWN_ONLY_QUERY_PARAMETER, Boolean.TRUE.toString());
|
||||
}
|
||||
}else {
|
||||
queryParameters.add(GCatConstants.OWN_ONLY_QUERY_PARAMETER, Boolean.TRUE.toString());
|
||||
}
|
||||
|
||||
Map<String,String> parameters = getListingParameters(0,0);
|
||||
ObjectNode objectNode = mapper.createObjectNode();
|
||||
|
||||
ArrayNode deleted = mapper.createArrayNode();
|
||||
objectNode.set("deleted", deleted);
|
||||
|
||||
ArrayNode notDeleted = mapper.createArrayNode();
|
||||
objectNode.set("failed", notDeleted);
|
||||
|
||||
sendGetRequest(LIST, parameters);
|
||||
ArrayNode results = (ArrayNode) result.get(RESULTS_KEY);
|
||||
|
||||
while(results.size()>0) {
|
||||
for(JsonNode node : results) {
|
||||
try {
|
||||
this.name = null;
|
||||
this.result = node;
|
||||
this.name = node.get(NAME_KEY).asText();
|
||||
this.itemID = node.get(ID_KEY).asText();
|
||||
delete(purge);
|
||||
deleted.add(name);
|
||||
} catch(Exception e) {
|
||||
try {
|
||||
if(name!=null) {
|
||||
notDeleted.add(name);
|
||||
logger.error("Error while trying to delete item with name {}", name);
|
||||
}else {
|
||||
logger.error("Unable to get the name of {}.",mapper.writeValueAsString(node));
|
||||
}
|
||||
} catch(Exception ex) {
|
||||
logger.error("", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sendGetRequest(LIST, parameters);
|
||||
results = (ArrayNode) result.get(RESULTS_KEY);
|
||||
}
|
||||
|
||||
return getAsString(objectNode);
|
||||
}
|
||||
|
||||
public String list(Map<String,String> parameters) {
|
||||
sendGetRequest(LIST, parameters);
|
||||
|
||||
|
@ -373,7 +424,7 @@ public class CKANPackage extends CKAN implements Moderated {
|
|||
arrayNode.add(name);
|
||||
} catch(Exception e) {
|
||||
try {
|
||||
logger.error("Unable to get the ID of {}. the result will not be included in the result",
|
||||
logger.error("Unable to get the name of {}. The Item will not be included in the result",
|
||||
mapper.writeValueAsString(node));
|
||||
} catch(Exception ex) {
|
||||
logger.error("", ex);
|
||||
|
@ -386,12 +437,12 @@ public class CKANPackage extends CKAN implements Moderated {
|
|||
|
||||
@Override
|
||||
public String list(int limit, int offset) {
|
||||
Map<String,String> parameters = getListCountParameters(limit, offset);
|
||||
Map<String,String> parameters = getListingParameters(limit, offset);
|
||||
return list(parameters);
|
||||
}
|
||||
|
||||
public int count() {
|
||||
Map<String,String> parameters = getListCountParameters(1, 0);
|
||||
Map<String,String> parameters = getListingParameters(1, 0);
|
||||
|
||||
sendGetRequest(LIST, parameters);
|
||||
|
||||
|
@ -410,7 +461,7 @@ public class CKANPackage extends CKAN implements Moderated {
|
|||
return matches;
|
||||
}
|
||||
|
||||
protected static String[] allowedListQueryParameters = new String[] {"q", "fq", "fq_list", "sort",
|
||||
protected static String[] allowedListQueryParameters = new String[] {"fq", "fq_list", "sort",
|
||||
/* "facet", "facet.mincount", "facet.limit", "facet.field", */
|
||||
"include_drafts", "include_private", "ext_bbox"};
|
||||
|
||||
|
@ -443,7 +494,7 @@ public class CKANPackage extends CKAN implements Moderated {
|
|||
if(organizations.size()==0) {
|
||||
// Adding organization filter to q
|
||||
String filter = getFilterForOrganizations();
|
||||
parameters.put(GCatConstants.Q_KEY, String.format("%s AND %s", q, filter));
|
||||
q = String.format("%s AND %s", q, filter);
|
||||
}else {
|
||||
organizations.removeAll(this.supportedOrganizations);
|
||||
if(organizations.size()>0) {
|
||||
|
@ -454,9 +505,17 @@ public class CKANPackage extends CKAN implements Moderated {
|
|||
|
||||
} else {
|
||||
String filter = getFilterForOrganizations();
|
||||
parameters.put(GCatConstants.Q_KEY, filter);
|
||||
q = filter;
|
||||
}
|
||||
|
||||
if(queryParameters.containsKey(GCatConstants.OWN_ONLY_QUERY_PARAMETER)) {
|
||||
if(!queryParameters.get(GCatConstants.OWN_ONLY_QUERY_PARAMETER).isEmpty() && Boolean.parseBoolean(queryParameters.get(GCatConstants.OWN_ONLY_QUERY_PARAMETER).get(0))) {
|
||||
String filter = String.format("%s:%s", AUTHOR_EMAIL_KEY, ckanUser.getPortalUser().getEMail());
|
||||
q = String.format("%s AND %s", q, filter);
|
||||
}
|
||||
}
|
||||
|
||||
parameters.put(GCatConstants.Q_KEY, q);
|
||||
|
||||
for(String key : allowedListQueryParameters) {
|
||||
if(queryParameters.containsKey(key)) {
|
||||
|
@ -587,9 +646,13 @@ public class CKANPackage extends CKAN implements Moderated {
|
|||
}
|
||||
|
||||
protected void readItem() throws Exception {
|
||||
String ret = super.read();
|
||||
result = mapper.readTree(ret);
|
||||
this.itemID = result.get(ID_KEY).asText();
|
||||
if(this.result == null) {
|
||||
String ret = super.read();
|
||||
this.result = mapper.readTree(ret);
|
||||
}
|
||||
if(this.itemID == null) {
|
||||
this.itemID = result.get(ID_KEY).asText();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -68,6 +68,22 @@ public class Item extends REST<CKANPackage> implements org.gcube.gcat.api.interf
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
@DELETE
|
||||
@Produces(ResourceInitializer.APPLICATION_JSON_CHARSET_UTF_8)
|
||||
public String deleteAll(@QueryParam(GCatConstants.PURGE_QUERY_PARAMETER) @DefaultValue("false") Boolean purge) {
|
||||
CKANPackage ckan = getInstance();
|
||||
return ckan.deleteAll(purge);
|
||||
}
|
||||
|
||||
@PURGE
|
||||
@Produces(ResourceInitializer.APPLICATION_JSON_CHARSET_UTF_8)
|
||||
public String purgeAll() {
|
||||
CKANPackage ckan = getInstance();
|
||||
return ckan.deleteAll(true);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Not used as REST method, implemented to respect {@link org.gcube.gcat.api.interfaces.Item} interface
|
||||
*/
|
||||
|
|
|
@ -174,6 +174,108 @@ public class CKANPackageTest extends ContextTest {
|
|||
logger.debug("List:\n{}", mapper.writeValueAsString(gotList));
|
||||
}
|
||||
|
||||
protected UriInfo getListingUriInfo(final MultivaluedMap<String, String> queryParameters) {
|
||||
UriInfo uriInfo = new UriInfo() {
|
||||
|
||||
@Override
|
||||
public URI resolve(URI uri) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public URI relativize(URI uri) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UriBuilder getRequestUriBuilder() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public URI getRequestUri() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MultivaluedMap<String, String> getQueryParameters(boolean decode) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MultivaluedMap<String, String> getQueryParameters() {
|
||||
return queryParameters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PathSegment> getPathSegments(boolean decode) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PathSegment> getPathSegments() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MultivaluedMap<String, String> getPathParameters(boolean decode) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MultivaluedMap<String, String> getPathParameters() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPath(boolean decode) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPath() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getMatchedURIs(boolean decode) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getMatchedURIs() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Object> getMatchedResources() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UriBuilder getBaseUriBuilder() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public URI getBaseUri() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UriBuilder getAbsolutePathBuilder() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public URI getAbsolutePath() {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
return uriInfo;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void listWithParameters() throws Exception {
|
||||
String contextName = "/gcube/devNext/NextNext";
|
||||
|
@ -183,15 +285,13 @@ public class CKANPackageTest extends ContextTest {
|
|||
|
||||
CKANPackage ckanPackage = new CKANPackage();
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
Map<String,String> parameters = new HashMap<>();
|
||||
parameters.put(CKANPackage.ROWS_KEY, String.valueOf(10));
|
||||
parameters.put(CKANPackage.START_KEY, String.valueOf(0));
|
||||
|
||||
boolean[] values = new boolean[]{true, false};
|
||||
for(boolean includeValidOrganization : values) {
|
||||
for(boolean includeFakeOrganization : values) {
|
||||
|
||||
MultivaluedMap<String,String> queryParameters = new MultivaluedHashMap<>();
|
||||
|
||||
StringWriter stringWriter = new StringWriter();
|
||||
|
||||
boolean addOr = false;
|
||||
|
@ -213,16 +313,21 @@ public class CKANPackageTest extends ContextTest {
|
|||
queryParameters.add(GCatConstants.Q_KEY, filter);
|
||||
}
|
||||
|
||||
|
||||
queryParameters.add(GCatConstants.OWN_ONLY_QUERY_PARAMETER, Boolean.TRUE.toString());
|
||||
|
||||
/*
|
||||
parameters.put("fl","[\"name\"]");
|
||||
queryParameters.add("fl","[\"name\"]");
|
||||
*/
|
||||
/*
|
||||
parameters.put("facet.field","[\"name\"]");
|
||||
parameters.put("sort","name asc");
|
||||
queryParameters.add("facet.field","[\"name\"]");
|
||||
queryParameters.add("sort","name asc");
|
||||
*/
|
||||
|
||||
Map<String,String> parameters = null;
|
||||
try {
|
||||
parameters = ckanPackage.checkListParameters(queryParameters, parameters);
|
||||
ckanPackage.setUriInfo(getListingUriInfo(queryParameters));
|
||||
parameters = ckanPackage.getListingParameters(10, 0);
|
||||
}catch (ForbiddenException e) {
|
||||
if(includeFakeOrganization) {
|
||||
// This is the expected behaviour
|
||||
|
|
Loading…
Reference in New Issue