Author: lgiessmann Date: Wed Sep 21 01:18:16 2011 New Revision: 946
Log: gdl-frontend: Widgets: started to implement a separate delete-handler for environment topics => each hash-object associated with the environment that will be deleted must also be deleted and the delete-operation must be confirmed by the user
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/isidorus/DeleteCallback.java
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/isidorus/DeleteCallback.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/isidorus/DeleteCallback.java Wed Sep 21 00:50:25 2011 (r945) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/isidorus/DeleteCallback.java Wed Sep 21 01:18:16 2011 (r946) @@ -18,12 +18,21 @@ import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Construct; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMapsTypes; +import us.isidor.gdl.anaToMia.Widgets.base.TmHelper; +import us.isidor.gdl.anaToMia.Widgets.base.Utils; import us.isidor.gdl.anaToMia.Widgets.environment.IDeleteCallback; import us.isidor.gdl.anaToMia.Widgets.environment.Pair;
public class DeleteCallback implements IDeleteCallback { - public final String REUQEST_URL = IsidorusConstants.DELETE_REQUEST_URL; + private final String REUQEST_URL = IsidorusConstants.DELETE_REQUEST_URL; + private final String TM_SPARQL_QUERY_PART_1 = "PREFIX types:http://textgrid.org/serviceregistry/model/types/\n" + + "PREFIX model:http://textgrid.org/serviceregistry/model/\n" + + "PREFIX env:http://textgrid.org/serviceregistry/environment/\n" + + "SELECT ?topics WHERE {\n" + + "?topics a types:Hash-Object.\n" + + "?topics model:environment env:"; + private final String TM_SPARQL_QUERY_PART_2 = ".\n}";
@Override @@ -35,36 +44,61 @@ private void deleteTopic(ArrayList<Pair<Construct, TopicMapsTypes>> constructs, TmEngine tmEngine){ for (Pair<Construct, TopicMapsTypes> pair : constructs) { if(pair.getSecond().equals(TopicMapsTypes.Topic)){ - Topic env = (Topic)pair.getFirst(); - if(env.getSubjectIdentifiers().length() != 0){ - String psi = env.getSubjectIdentifiers().get(0).getReference(); - - JSONArray psis = new JSONArray(); - psis.set(0, new JSONString(psi)); - - JSONObject delObj = new JSONObject(); - delObj.put("type", new JSONString("Topic")); - - try{ - JSONValue val = JSONParser.parseStrict(tmEngine.exportTm(env)); - delObj.put("delete", val.isObject()); - - String url = URL.encode(this.REUQEST_URL); - RequestBuilder builder = new RequestBuilder(RequestBuilder.DELETE, url); - builder.setHeader("Content-type", "application/json"); - - builder.sendRequest(delObj.toString(), new DeleteRequest(delObj, env)); - }catch(RequestException e){ - Window.alert("could not delete the topic: " + psi + ", because(" + e.getClass() + "): " + e.getMessage()); - }catch(ExporterException e){ - Window.alert("could not delete the topic: " + psi + ", because(" + e.getClass() + "): " + e.getMessage()); - } - } + Topic top = (Topic)pair.getFirst(); + + if(TmHelper.isInstanceOf(top, IsidorusConstants.ENVIRONMENT_PSI)) this.deleteEnvironmentTopic(top); + else this.deleteNonEnvironment(top, tmEngine); } } } + + private String createTmSparqlQuery(Topic environment){ + String psi = environment.getSubjectLocators().get(0).getReference(); + String psiSuffix = Utils.splitUriByLastFragment(psi)[1]; + return this.TM_SPARQL_QUERY_PART_1 + psiSuffix + this.TM_SPARQL_QUERY_PART_2; + } + + + private void deleteEnvironmentTopic(Topic env){ + Window.alert(this.createTmSparqlQuery(env)); + // TODO: get all associated hash-objects + // TODO: create a list for the user + // TODO: check the user's input + // TODO: delete all hash-objects + // TODO: delete the environment + } + + + private void deleteNonEnvironment(Topic top, TmEngine tmEngine){ + if(top.getSubjectIdentifiers().length() != 0){ + String psi = top.getSubjectIdentifiers().get(0).getReference(); + + JSONArray psis = new JSONArray(); + psis.set(0, new JSONString(psi)); + + JSONObject delObj = new JSONObject(); + delObj.put("type", new JSONString("Topic")); + + try{ + JSONValue val = JSONParser.parseStrict(tmEngine.exportTm(top)); + delObj.put("delete", val.isObject()); + + String url = URL.encode(this.REUQEST_URL); + RequestBuilder builder = new RequestBuilder(RequestBuilder.DELETE, url); + builder.setHeader("Content-type", "application/json"); + + builder.sendRequest(delObj.toString(), new DeleteRequest(delObj, top)); + }catch(RequestException e){ + Window.alert("could not delete the topic: " + psi + ", because(" + e.getClass() + "): " + e.getMessage()); + }catch(ExporterException e){ + Window.alert("could not delete the topic: " + psi + ", because(" + e.getClass() + "): " + e.getMessage()); + } + } + } + + private class DeleteRequest implements RequestCallback { private JSONObject objectToBeSend = null; private Topic topicToBeDeleted = null; @@ -85,7 +119,6 @@ if (200 == response.getStatusCode()) { Window.Location.reload(); this.topicToBeDeleted.remove(); - // TODO: reset the web page } else { Window.alert("delete operation of the object " + this.objectToBeSend + " failed: " + response.getStatusCode() + "(" + response.getStatusText() + ")\n" + response.getText()); }