+ private QueryStatus processDeleteMetadata(String resource, String key, SvcLogicContext ctx, HashMap<String, String> nameValues) {
+ try {
+ AAIRequest request = AAIRequest.createRequest(resource, nameValues);
+ if(request == null) {
+ return QueryStatus.FAILURE;
+ }
+
+ request.processRequestPathValues(nameValues);
+ URL url = request.getRequestUrl("GET", null);
+
+ Class<?> resourceClass = request.getModelClass();
+ Object instance = getResource(url.toString(), resourceClass);
+
+ // get resource version
+ String resourceVersion = null;
+ Method getResourceVersionMethod = resourceClass.getMethod("getResourceVersion");
+ if(getResourceVersionMethod != null){
+ try {
+ resourceVersion = (String) getResourceVersionMethod.invoke(instance);
+ } catch (InvocationTargetException x) {
+ }
+ }
+
+ Metadata metadata = null;
+ Object obj = null;
+ Method getMetadataMethod = resourceClass.getMethod("getMetadata");
+ if(getMetadataMethod != null){
+ try {
+ obj = getMetadataMethod.invoke(instance);
+ } catch (InvocationTargetException x) {
+ Throwable cause = x.getCause();
+ }
+ }
+ if(obj != null && obj instanceof Metadata){
+ metadata = (Metadata)obj;
+ } else {
+ getLogger().debug("No metadata found to process.");
+ return QueryStatus.NOT_FOUND;
+ }
+
+ if(metadata.getMetadatum() == null || metadata.getMetadatum().isEmpty()) {
+ return QueryStatus.NOT_FOUND;
+ }
+
+ List<Metadatum> metadatumList = metadata.getMetadatum();
+ Metadatum metadatumToDelete = null;
+
+ final String metaname = nameValues.get("metaname");
+
+ for(Metadatum metadatum : metadatumList) {
+ getLogger().debug(String.format("Comparing existing metadatum of '%s' to keyword '%s'", metadatum.getMetaname(), metaname));
+ if(metaname.equals(metadatum.getMetaname())) {
+ metadatumToDelete = metadatum;
+ break;
+ }
+ }
+ if(metadatumToDelete == null) {
+ getLogger().info(String.format("Metadatum has not been found for %s", key));
+ return QueryStatus.NOT_FOUND;
+ }
+
+ String path = url.toString();
+ path = path + "/metadata/metadatum/" + encodeQuery( metadatumToDelete.getMetaname() ) +
+ "?resource-version=" + metadatumToDelete.getResourceVersion();
+ URL deleteUrl = new URL(path);
+ boolean response = deleteList(deleteUrl, null);
+
+ if(!response)
+ return QueryStatus.FAILURE;
+
+ return QueryStatus.SUCCESS;
+
+ } catch(Exception exc) {
+ getLogger().warn("processDelete", exc);
+ return QueryStatus.FAILURE;
+ }
+ }
+
+ protected String encodeQuery(String param) throws UnsupportedEncodingException {
+ return URLEncoder.encode(param, "UTF-8").replace("+", "%20");
+ }
+