From f2b32c8cb5c5ab1bfddd5cdde3a292576f447211 Mon Sep 17 00:00:00 2001 From: Nathan Dunn Date: Tue, 12 Feb 2019 09:54:20 -0800 Subject: [PATCH 1/4] fixed the styling and cleaned up a bit --- .../org/bbop/apollo/gwt/client/Annotator.java | 3 - .../apollo/gwt/client/AnnotatorPanel.java | 22 ++ .../apollo/gwt/client/AnnotatorPanel.ui.xml | 209 ++++++++---------- 3 files changed, 113 insertions(+), 121 deletions(-) diff --git a/src/gwt/org/bbop/apollo/gwt/client/Annotator.java b/src/gwt/org/bbop/apollo/gwt/client/Annotator.java index 79c03870fe..94e1b03f65 100644 --- a/src/gwt/org/bbop/apollo/gwt/client/Annotator.java +++ b/src/gwt/org/bbop/apollo/gwt/client/Annotator.java @@ -2,9 +2,7 @@ import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.Scheduler; -import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Style; import com.google.gwt.event.shared.EventBus; import com.google.gwt.event.shared.SimpleEventBus; @@ -14,7 +12,6 @@ import com.google.gwt.i18n.client.Dictionary; import com.google.gwt.storage.client.Storage; import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.rpc.core.java.util.HashMap_CustomFieldSerializer; import com.google.gwt.user.client.ui.RootLayoutPanel; import org.bbop.apollo.gwt.client.rest.RestService; import org.bbop.apollo.gwt.shared.ClientTokenGenerator; diff --git a/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.java b/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.java index c3cc2b4dab..e67db6f813 100644 --- a/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.java +++ b/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.java @@ -52,6 +52,7 @@ import org.gwtbootstrap3.client.ui.ListBox; import org.gwtbootstrap3.client.ui.TextBox; import org.gwtbootstrap3.extras.bootbox.client.Bootbox; +import org.gwtbootstrap3.extras.bootbox.client.callback.ConfirmCallback; import java.util.Date; import java.util.HashSet; @@ -124,6 +125,8 @@ interface AnnotatorPanelUiBinder extends UiBinder - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - - - - - - - - - -
- - - - -
-
-
- - - -
-
- - - - Details - - - - - - - - - - - - - Coding - - - - Alternate Alleles - - - - Variant Info - - - - Allele Info - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +
+ + + +
+
+
+ + + +
+
+ + + + Details + + + + + + + + + + + Coding + + + + Alternate Alleles + + + + Variant Info + + + + Allele Info + + - - - -
- + + + + + + + + + + + + + + + + + + + + + - - + + + + From c988cf4e551318cc02bd6cdd080e966f6d844d15 Mon Sep 17 00:00:00 2001 From: Nathan Dunn Date: Tue, 12 Feb 2019 11:15:12 -0800 Subject: [PATCH 2/4] deletes a single annotation from the annotator panel --- .../apollo/AnnotationEditorController.groovy | 1 + .../bbop/apollo/RequestHandlingService.groovy | 2 +- .../apollo/gwt/client/AnnotatorPanel.java | 28 +++++++++++++++---- .../apollo/gwt/client/AnnotatorPanel.ui.xml | 2 +- .../client/rest/AnnotationRestService.java | 18 +++++++++++- 5 files changed, 43 insertions(+), 8 deletions(-) diff --git a/grails-app/controllers/org/bbop/apollo/AnnotationEditorController.groovy b/grails-app/controllers/org/bbop/apollo/AnnotationEditorController.groovy index 746f08bca2..7ac9e39386 100644 --- a/grails-app/controllers/org/bbop/apollo/AnnotationEditorController.groovy +++ b/grails-app/controllers/org/bbop/apollo/AnnotationEditorController.groovy @@ -823,6 +823,7 @@ class AnnotationEditorController extends AbstractApolloController implements Ann , @RestApiParam(name = "features", type = "JSONArray", paramType = RestApiParamType.QUERY, description = "JSONArray of features objects to delete defined by unique name {'uniquename':'ABC123'}") ]) def deleteFeature() { + println "delete feature input ${request.JSON} and ${params.data}" JSONObject inputObject = permissionService.handleInput(request, params) if (permissionService.hasPermissions(inputObject, PermissionEnum.WRITE)) { render requestHandlingService.deleteFeature(inputObject) diff --git a/grails-app/services/org/bbop/apollo/RequestHandlingService.groovy b/grails-app/services/org/bbop/apollo/RequestHandlingService.groovy index 87ec505b23..64a3ecb342 100644 --- a/grails-app/services/org/bbop/apollo/RequestHandlingService.groovy +++ b/grails-app/services/org/bbop/apollo/RequestHandlingService.groovy @@ -1814,7 +1814,7 @@ class RequestHandlingService { // { "track": "Group1.3", "features": [ { "uniquename": "179e77b9-9329-4633-9f9e-888e3cf9b76a" } ], "operation": "delete_feature" }: @Timed def deleteFeature(JSONObject inputObject) { - log.debug "in delete feature ${inputObject as JSON}" + println "in delete feature ${inputObject as JSON}" Sequence sequence = permissionService.checkPermissions(inputObject, PermissionEnum.WRITE) boolean suppressEvents = false if (inputObject.has(FeatureStringEnum.SUPPRESS_EVENTS.value)) { diff --git a/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.java b/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.java index e67db6f813..b9e9b9a5cd 100644 --- a/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.java +++ b/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.java @@ -43,6 +43,7 @@ import org.bbop.apollo.gwt.client.event.UserChangeEvent; import org.bbop.apollo.gwt.client.event.UserChangeEventHandler; import org.bbop.apollo.gwt.client.resources.TableResources; +import org.bbop.apollo.gwt.client.rest.AnnotationRestService; import org.bbop.apollo.gwt.client.rest.UserRestService; import org.bbop.apollo.gwt.shared.FeatureStringEnum; import org.bbop.apollo.gwt.shared.PermissionEnum; @@ -737,16 +738,33 @@ void gotoAnnotation(ClickEvent clickEvent) { @UiHandler("deleteAnnotation") void deleteAnnotation(ClickEvent clickEvent) { String confirmString = "Delete the annotaiton"+selectedAnnotationInfo.getName(); + + final RequestCallback requestCallback = new RequestCallback() { + @Override + public void onResponseReceived(Request request, Response response) { + if(response.getStatusCode()==200){ + reload(); + } + else{ + Bootbox.alert("Problem with deletion: "+response.getText()); + } + } + + @Override + public void onError(Request request, Throwable exception) { + Bootbox.alert("Problem with deletion: "+exception.getMessage()); + } + }; + Bootbox.confirm(confirmString,new ConfirmCallback() { @Override public void callback(boolean result) { - Bootbox.alert("Confirmed? "+result); + GWT.log("Confirmed? "+result); + if(result){ + AnnotationRestService.deleteAnnotation(requestCallback,selectedAnnotationInfo); + } } }); -// Integer min = selectedAnnotationInfo.getMin() - 50; -// Integer max = selectedAnnotationInfo.getMax() + 50; -// min = min < 0 ? 0 : min; -// MainPanel.updateGenomicViewerForLocation(selectedAnnotationInfo.getSequence(), min, max, false, false); } private static AnnotationInfo getChildAnnotation(AnnotationInfo annotationInfo, String uniqueName) { diff --git a/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.ui.xml b/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.ui.xml index 96bda22516..67fa4456d3 100644 --- a/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.ui.xml +++ b/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.ui.xml @@ -74,7 +74,7 @@ text="Go to Annotation" ui:field="gotoAnnotation" enabled="false" addStyleNames="{style.action-buttons}"/> diff --git a/src/gwt/org/bbop/apollo/gwt/client/rest/AnnotationRestService.java b/src/gwt/org/bbop/apollo/gwt/client/rest/AnnotationRestService.java index dcee222419..389dc1a233 100644 --- a/src/gwt/org/bbop/apollo/gwt/client/rest/AnnotationRestService.java +++ b/src/gwt/org/bbop/apollo/gwt/client/rest/AnnotationRestService.java @@ -1,5 +1,7 @@ package org.bbop.apollo.gwt.client.rest; +import com.google.gwt.http.client.RequestCallback; +import com.google.gwt.json.client.JSONArray; import com.google.gwt.json.client.JSONNumber; import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONString; @@ -10,7 +12,7 @@ /** * Created by ndunn on 1/28/15. */ -public class AnnotationRestService { +public class AnnotationRestService extends RestService{ public static JSONObject convertAnnotationInfoToJSONObject(AnnotationInfo annotationInfo){ JSONObject jsonObject = new JSONObject(); @@ -33,4 +35,18 @@ public static JSONObject convertAnnotationInfoToJSONObject(AnnotationInfo annota return jsonObject; } + + + public static JSONObject deleteAnnotation(RequestCallback requestCallback, AnnotationInfo annotationInfo){ + JSONObject jsonObject = new JSONObject(); + JSONArray featuresArray = new JSONArray(); + JSONObject uniqueNameObject = new JSONObject(); + uniqueNameObject.put(FeatureStringEnum.UNIQUENAME.getValue(),new JSONString(annotationInfo.getUniqueName())); + featuresArray.set(0,uniqueNameObject); + jsonObject.put(FeatureStringEnum.FEATURES.getValue(),featuresArray); + + sendRequest(requestCallback,"annotationEditor/deleteFeature","data="+jsonObject.toString()); + return jsonObject; + } + } From 0bfe267e5d3a04b5df0964166daf1cd477f995c8 Mon Sep 17 00:00:00 2001 From: Nathan Dunn Date: Tue, 12 Feb 2019 12:07:26 -0800 Subject: [PATCH 3/4] fixed so will delete multiple annotations from gene --- .../bbop/apollo/RequestHandlingService.groovy | 1 - .../apollo/gwt/client/AnnotatorPanel.java | 50 +++++++++++++------ .../apollo/gwt/client/ExonDetailPanel.java | 7 +-- .../apollo/gwt/client/dto/AnnotationInfo.java | 13 +++-- .../client/rest/AnnotationRestService.java | 14 ++++-- 5 files changed, 52 insertions(+), 33 deletions(-) diff --git a/grails-app/services/org/bbop/apollo/RequestHandlingService.groovy b/grails-app/services/org/bbop/apollo/RequestHandlingService.groovy index 64a3ecb342..d382d8500a 100644 --- a/grails-app/services/org/bbop/apollo/RequestHandlingService.groovy +++ b/grails-app/services/org/bbop/apollo/RequestHandlingService.groovy @@ -1814,7 +1814,6 @@ class RequestHandlingService { // { "track": "Group1.3", "features": [ { "uniquename": "179e77b9-9329-4633-9f9e-888e3cf9b76a" } ], "operation": "delete_feature" }: @Timed def deleteFeature(JSONObject inputObject) { - println "in delete feature ${inputObject as JSON}" Sequence sequence = permissionService.checkPermissions(inputObject, PermissionEnum.WRITE) boolean suppressEvents = false if (inputObject.has(FeatureStringEnum.SUPPRESS_EVENTS.value)) { diff --git a/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.java b/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.java index b9e9b9a5cd..339f6d81ba 100644 --- a/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.java +++ b/src/gwt/org/bbop/apollo/gwt/client/AnnotatorPanel.java @@ -31,7 +31,6 @@ import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.cellview.client.*; import com.google.gwt.user.cellview.client.Column; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.*; import com.google.gwt.view.client.*; import org.bbop.apollo.gwt.client.dto.AnnotationInfo; @@ -263,7 +262,7 @@ public void execute() { } // if a child, we need to get the index I think? final String thisUniqueName = selectedChildUniqueName; - for (AnnotationInfo annotationInfoChild : annotationInfo.getAnnotationInfoSet()) { + for (AnnotationInfo annotationInfoChild : annotationInfo.getChildAnnotations()) { GWT.log("next-level: " + annotationInfoChild.getType()); if (annotationInfoChild.getUniqueName().equals(selectedAnnotationInfo.getUniqueName())) { // selectedAnnotationInfo = annotationInfo; @@ -737,38 +736,59 @@ void gotoAnnotation(ClickEvent clickEvent) { @UiHandler("deleteAnnotation") void deleteAnnotation(ClickEvent clickEvent) { - String confirmString = "Delete the annotaiton"+selectedAnnotationInfo.getName(); + final Set deletableChildren = getDeletableChildren(selectedAnnotationInfo); + String confirmString = ""; + if (deletableChildren.size() > 0) { + confirmString = "Delete the " + deletableChildren.size() + " annotation" + (deletableChildren.size() > 1 ? "s" : "") + " belonging to the " + selectedAnnotationInfo.getType() + " " + selectedAnnotationInfo.getName() + "?"; + } else { + confirmString = "Delete the " + selectedAnnotationInfo.getType() + " " + selectedAnnotationInfo.getName() + "?"; + } + final RequestCallback requestCallback = new RequestCallback() { @Override public void onResponseReceived(Request request, Response response) { - if(response.getStatusCode()==200){ - reload(); - } - else{ - Bootbox.alert("Problem with deletion: "+response.getText()); + if (response.getStatusCode() == 200) { +// reload(); + } else { + Bootbox.alert("Problem with deletion: " + response.getText()); } } @Override public void onError(Request request, Throwable exception) { - Bootbox.alert("Problem with deletion: "+exception.getMessage()); + Bootbox.alert("Problem with deletion: " + exception.getMessage()); } }; - Bootbox.confirm(confirmString,new ConfirmCallback() { + Bootbox.confirm(confirmString, new ConfirmCallback() { @Override public void callback(boolean result) { - GWT.log("Confirmed? "+result); - if(result){ - AnnotationRestService.deleteAnnotation(requestCallback,selectedAnnotationInfo); + if (result) { + if (deletableChildren.size() == 0) { + Set annotationInfoSet = new HashSet<>(); + annotationInfoSet.add(selectedAnnotationInfo); + AnnotationRestService.deleteAnnotations(requestCallback, annotationInfoSet); + } else { + JSONObject jsonObject = AnnotationRestService.deleteAnnotations(requestCallback, deletableChildren); + } } } }); } + + private Set getDeletableChildren(AnnotationInfo selectedAnnotationInfo) { + String type = selectedAnnotationInfo.getType(); + GWT.log("type:" + type); + if (type.equalsIgnoreCase(FeatureStringEnum.GENE.getValue()) || type.equalsIgnoreCase(FeatureStringEnum.PSEUDOGENE.getValue())) { + return selectedAnnotationInfo.getChildAnnotations(); + } + return new HashSet<>(); + } + private static AnnotationInfo getChildAnnotation(AnnotationInfo annotationInfo, String uniqueName) { - for (AnnotationInfo childAnnotation : annotationInfo.getAnnotationInfoSet()) { + for (AnnotationInfo childAnnotation : annotationInfo.getChildAnnotations()) { if (childAnnotation.getUniqueName().equalsIgnoreCase(uniqueName)) { return childAnnotation; } @@ -844,7 +864,7 @@ protected void buildRowImpl(AnnotationInfo rowValue, int absRowIndex) { if (showingTranscripts.contains(rowValue.getUniqueName())) { // add some random rows - Set annotationInfoSet = rowValue.getAnnotationInfoSet(); + Set annotationInfoSet = rowValue.getChildAnnotations(); if (annotationInfoSet.size() > 0) { for (AnnotationInfo annotationInfo : annotationInfoSet) { buildAnnotationRow(annotationInfo, absRowIndex, true); diff --git a/src/gwt/org/bbop/apollo/gwt/client/ExonDetailPanel.java b/src/gwt/org/bbop/apollo/gwt/client/ExonDetailPanel.java index 37d2ef6e64..5a8686c1bb 100644 --- a/src/gwt/org/bbop/apollo/gwt/client/ExonDetailPanel.java +++ b/src/gwt/org/bbop/apollo/gwt/client/ExonDetailPanel.java @@ -2,7 +2,6 @@ import com.google.gwt.cell.client.NumberCell; import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; import com.google.gwt.event.dom.client.BlurEvent; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.KeyCodes; @@ -18,7 +17,6 @@ import com.google.gwt.user.cellview.client.ColumnSortEvent; import com.google.gwt.user.cellview.client.DataGrid; import com.google.gwt.user.cellview.client.TextColumn; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Widget; @@ -30,7 +28,6 @@ import org.bbop.apollo.gwt.client.resources.TableResources; import org.bbop.apollo.gwt.client.rest.AnnotationRestService; import org.bbop.apollo.gwt.client.rest.RestService; -import org.bbop.apollo.gwt.shared.FeatureStringEnum; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.Container; import org.gwtbootstrap3.client.ui.TextBox; @@ -202,8 +199,8 @@ public boolean updateData(AnnotationInfo annotationInfo,AnnotationInfo selectedA //displayAnnotationInfo(annotationInfo); getAnnotationInfoWithTopLevelFeature(annotationInfo); annotationInfoList.clear(); - GWT.log("sublist: " + annotationInfo.getAnnotationInfoSet().size()); - for (AnnotationInfo annotationInfo1 : annotationInfo.getAnnotationInfoSet()) { + GWT.log("sublist: " + annotationInfo.getChildAnnotations().size()); + for (AnnotationInfo annotationInfo1 : annotationInfo.getChildAnnotations()) { GWT.log("adding: " + annotationInfo1.getName()); annotationInfoList.add(annotationInfo1); } diff --git a/src/gwt/org/bbop/apollo/gwt/client/dto/AnnotationInfo.java b/src/gwt/org/bbop/apollo/gwt/client/dto/AnnotationInfo.java index 1918d1a37d..6e69f776db 100644 --- a/src/gwt/org/bbop/apollo/gwt/client/dto/AnnotationInfo.java +++ b/src/gwt/org/bbop/apollo/gwt/client/dto/AnnotationInfo.java @@ -2,7 +2,6 @@ import com.google.gwt.json.client.JSONArray; import com.google.gwt.json.client.JSONObject; -import org.bbop.apollo.gwt.shared.FeatureStringEnum; import java.util.*; @@ -15,7 +14,7 @@ public class AnnotationInfo { private String type; private Integer min; private Integer max; - private Set annotationInfoSet = new HashSet<>(); + private Set childAnnotations = new HashSet<>(); // children private String symbol; private String description; private Integer strand; @@ -95,15 +94,15 @@ public void setUniqueName(String uniqueName) { } public void addChildAnnotation(AnnotationInfo annotationInfo) { - annotationInfoSet.add(annotationInfo); + childAnnotations.add(annotationInfo); } - public Set getAnnotationInfoSet() { - return annotationInfoSet; + public Set getChildAnnotations() { + return childAnnotations; } - public void setAnnotationInfoSet(Set annotationInfoSet) { - this.annotationInfoSet = annotationInfoSet; + public void setChildAnnotations(Set childAnnotations) { + this.childAnnotations = childAnnotations; } public void setSymbol(String symbol) { diff --git a/src/gwt/org/bbop/apollo/gwt/client/rest/AnnotationRestService.java b/src/gwt/org/bbop/apollo/gwt/client/rest/AnnotationRestService.java index 389dc1a233..7fa483b44f 100644 --- a/src/gwt/org/bbop/apollo/gwt/client/rest/AnnotationRestService.java +++ b/src/gwt/org/bbop/apollo/gwt/client/rest/AnnotationRestService.java @@ -9,6 +9,8 @@ import org.bbop.apollo.gwt.client.dto.AnnotationInfo; import org.bbop.apollo.gwt.shared.FeatureStringEnum; +import java.util.Set; + /** * Created by ndunn on 1/28/15. */ @@ -37,16 +39,18 @@ public static JSONObject convertAnnotationInfoToJSONObject(AnnotationInfo annota } - public static JSONObject deleteAnnotation(RequestCallback requestCallback, AnnotationInfo annotationInfo){ + public static JSONObject deleteAnnotations(RequestCallback requestCallback, Set annotationInfoSet){ JSONObject jsonObject = new JSONObject(); JSONArray featuresArray = new JSONArray(); - JSONObject uniqueNameObject = new JSONObject(); - uniqueNameObject.put(FeatureStringEnum.UNIQUENAME.getValue(),new JSONString(annotationInfo.getUniqueName())); - featuresArray.set(0,uniqueNameObject); jsonObject.put(FeatureStringEnum.FEATURES.getValue(),featuresArray); + for(AnnotationInfo annotationInfo : annotationInfoSet){ + JSONObject uniqueNameObject = new JSONObject(); + uniqueNameObject.put(FeatureStringEnum.UNIQUENAME.getValue(),new JSONString(annotationInfo.getUniqueName())); + featuresArray.set(featuresArray.size(),uniqueNameObject); + } + sendRequest(requestCallback,"annotationEditor/deleteFeature","data="+jsonObject.toString()); return jsonObject; } - } From bef98bf3a948e081f7df4047e989f03cec5d032c Mon Sep 17 00:00:00 2001 From: Nathan Dunn Date: Tue, 12 Feb 2019 12:09:22 -0800 Subject: [PATCH 4/4] cleaned up --- .../org/bbop/apollo/AnnotationEditorController.groovy | 1 - .../services/org/bbop/apollo/RequestHandlingService.groovy | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/grails-app/controllers/org/bbop/apollo/AnnotationEditorController.groovy b/grails-app/controllers/org/bbop/apollo/AnnotationEditorController.groovy index 7ac9e39386..746f08bca2 100644 --- a/grails-app/controllers/org/bbop/apollo/AnnotationEditorController.groovy +++ b/grails-app/controllers/org/bbop/apollo/AnnotationEditorController.groovy @@ -823,7 +823,6 @@ class AnnotationEditorController extends AbstractApolloController implements Ann , @RestApiParam(name = "features", type = "JSONArray", paramType = RestApiParamType.QUERY, description = "JSONArray of features objects to delete defined by unique name {'uniquename':'ABC123'}") ]) def deleteFeature() { - println "delete feature input ${request.JSON} and ${params.data}" JSONObject inputObject = permissionService.handleInput(request, params) if (permissionService.hasPermissions(inputObject, PermissionEnum.WRITE)) { render requestHandlingService.deleteFeature(inputObject) diff --git a/grails-app/services/org/bbop/apollo/RequestHandlingService.groovy b/grails-app/services/org/bbop/apollo/RequestHandlingService.groovy index d382d8500a..87ec505b23 100644 --- a/grails-app/services/org/bbop/apollo/RequestHandlingService.groovy +++ b/grails-app/services/org/bbop/apollo/RequestHandlingService.groovy @@ -1814,6 +1814,7 @@ class RequestHandlingService { // { "track": "Group1.3", "features": [ { "uniquename": "179e77b9-9329-4633-9f9e-888e3cf9b76a" } ], "operation": "delete_feature" }: @Timed def deleteFeature(JSONObject inputObject) { + log.debug "in delete feature ${inputObject as JSON}" Sequence sequence = permissionService.checkPermissions(inputObject, PermissionEnum.WRITE) boolean suppressEvents = false if (inputObject.has(FeatureStringEnum.SUPPRESS_EVENTS.value)) {