Author: lgiessmann Date: Mon Sep 12 05:18:04 2011 New Revision: 872
Log: gdl-frontend: Widgets: add new functionality to the GdlCommitButton => after a commit of a created topic/association the carrier is reset
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPanel.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlCommitButton.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlCreateButton.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlDeleteButton.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/ICommitCallback.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/isidorus/CommitCallback.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlAssociationView.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlDefaultCreatorTopicView.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlTopicView.java
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPanel.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPanel.java Mon Sep 12 02:31:58 2011 (r871) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPanel.java Mon Sep 12 05:18:04 2011 (r872) @@ -211,7 +211,7 @@ } ArrayList<Pair<Construct, TopicMapsTypes>> data = new ArrayList<Pair<Construct,TopicMapsTypes>>(); data.add(new Pair<Construct, TopicMapsTypes>(this.requestedSchemaTm, TopicMapsTypes.TopicMap)); - this.commitCallback.commitTmConstruct(data, this.tmEngine, null); + this.commitCallback.commitTmConstruct(data, null, this.tmEngine); }catch(Exception e){ for (IOnErrorCallback handler : localOnErrorContainer) { handler.onError(GdlErrorTypes.CommitError, e); @@ -276,7 +276,6 @@ }
- // Creates the actual view from the requested topic map public void createView(){ try{
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlCommitButton.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlCommitButton.java Mon Sep 12 02:31:58 2011 (r871) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlCommitButton.java Mon Sep 12 05:18:04 2011 (r872) @@ -1,12 +1,15 @@ package us.isidor.gdl.anaToMia.Widgets.button;
-import us.isidor.gdl.anaToMia.TopicMaps.TmEngineModel.TmEngine; + import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Construct; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; import us.isidor.gdl.anaToMia.Widgets.base.GdlVisibleObject; import us.isidor.gdl.anaToMia.Widgets.environment.ExecutionException; import us.isidor.gdl.anaToMia.Widgets.environment.ICommitCallback; import us.isidor.gdl.anaToMia.Widgets.environment.InvalidGdlSchemaException; +import us.isidor.gdl.anaToMia.Widgets.view.GdlAssociationView; +import us.isidor.gdl.anaToMia.Widgets.view.GdlTopicView; + import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Window; @@ -24,25 +27,34 @@ public GdlCommitButton(Topic tmRepresentative, Construct receivedData, GdlVisibleObject parent) throws InvalidGdlSchemaException, ExecutionException{ super(tmRepresentative, receivedData, parent); ((Button)this.subElements.get(0)).setText("commit"); - this.getButton().addClickHandler(new CommitButtonClickHandler(this)); + this.getButton().addClickHandler(new CommitButtonClickHandler()); } - protected class CommitButtonClickHandler implements ClickHandler { - private GdlCommitButton owner = null; + public void resetCarriers(){ + GdlVisibleObject parent = this.getGdlParent(); - public CommitButtonClickHandler(GdlCommitButton owner){ - this.owner = owner; + while(parent != null){ + if(parent instanceof GdlTopicView)((GdlTopicView)parent).resetRepresentedTopic(); + if(parent instanceof GdlAssociationView)((GdlAssociationView)parent).resetRepresentedAssociations(); + parent = parent.getGdlParent(); } + } + + + protected class CommitButtonClickHandler implements ClickHandler { + private GdlCommitButton owner = null; + + + public CommitButtonClickHandler() { } @Override public void onClick(ClickEvent event) { try{ - TmEngine tmEngine = this.owner.getRoot().getTmEngine(); ICommitCallback callback = this.owner.getRoot().getCommitCallback(); - callback.commitTmConstruct(this.owner.getGdlParent().getContent(null, true), tmEngine, this.owner.getId()); + callback.commitTmConstruct(this.owner.getGdlParent().getContent(null, true), GdlCommitButton.this, this.owner.getRoot().getTmEngine()); }catch(Exception e){ e.printStackTrace(); Window.alert("caught: " + e.getMessage());
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlCreateButton.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlCreateButton.java Mon Sep 12 02:31:58 2011 (r871) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlCreateButton.java Mon Sep 12 05:18:04 2011 (r872) @@ -8,6 +8,7 @@ import com.google.gwt.user.client.ui.Button;
public class GdlCreateButton extends GdlActionButton { + // TOOD: is this class really necessary or is GdlCommitButton sufficient??? // TODO: implement protected GdlCreateButton(){
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlDeleteButton.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlDeleteButton.java Mon Sep 12 02:31:58 2011 (r871) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlDeleteButton.java Mon Sep 12 05:18:04 2011 (r872) @@ -10,6 +10,8 @@ import us.isidor.gdl.anaToMia.Widgets.environment.ExecutionException; import us.isidor.gdl.anaToMia.Widgets.environment.IDeleteCallback; import us.isidor.gdl.anaToMia.Widgets.environment.InvalidGdlSchemaException; +import us.isidor.gdl.anaToMia.Widgets.view.GdlAssociationView; +import us.isidor.gdl.anaToMia.Widgets.view.GdlTopicView;
public class GdlDeleteButton extends GdlActionButton { // TODO: implement @@ -26,6 +28,17 @@ } + public void resetCarriers(){ + GdlVisibleObject parent = this.getGdlParent(); + + while(parent != null){ + if(parent instanceof GdlTopicView)((GdlTopicView)parent).resetRepresentedTopic(); + if(parent instanceof GdlAssociationView)((GdlAssociationView)parent).resetRepresentedAssociations(); + parent = parent.getGdlParent(); + } + } + + protected class DeleteButtonClickHandler implements ClickHandler { private GdlDeleteButton owner = null;
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/ICommitCallback.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/ICommitCallback.java Mon Sep 12 02:31:58 2011 (r871) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/ICommitCallback.java Mon Sep 12 05:18:04 2011 (r872) @@ -1,11 +1,13 @@ package us.isidor.gdl.anaToMia.Widgets.environment;
import java.util.ArrayList; + import us.isidor.gdl.anaToMia.TopicMaps.TmEngineModel.TmEngine; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Construct; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMapsTypes; +import us.isidor.gdl.anaToMia.Widgets.button.GdlCommitButton;
public interface ICommitCallback { - public void commitTmConstruct(ArrayList<Pair<Construct, TopicMapsTypes>> constructs, TmEngine tmengine, String buttonId); + public void commitTmConstruct(ArrayList<Pair<Construct, TopicMapsTypes>> constructs, GdlCommitButton sender, TmEngine tmEngine); }
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/isidorus/CommitCallback.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/isidorus/CommitCallback.java Mon Sep 12 02:31:58 2011 (r871) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/isidorus/CommitCallback.java Mon Sep 12 05:18:04 2011 (r872) @@ -3,6 +3,7 @@ import java.util.ArrayList; import us.isidor.gdl.anaToMia.Widgets.base.PSIs; import us.isidor.gdl.anaToMia.Widgets.base.TmHelper; +import us.isidor.gdl.anaToMia.Widgets.button.GdlCommitButton; import us.isidor.gdl.anaToMia.Widgets.environment.Pair; import com.google.gwt.core.client.JsArray; import com.google.gwt.http.client.Request; @@ -37,20 +38,21 @@ @Override - public void commitTmConstruct(ArrayList<Pair<Construct, TopicMapsTypes>> constructs, TmEngine tmEngine, String buttonId) { + public void commitTmConstruct(ArrayList<Pair<Construct, TopicMapsTypes>> constructs, GdlCommitButton sender, TmEngine tmEngine) { try{ + String buttonId = sender == null ? null : sender.getId(); if("hash_object_commit_button_id".equals(buttonId)){ this.commitCreatedHashObject(constructs, tmEngine, "edited_hash_object_commit_button_id".equals(buttonId)); } else if("environment_commit_button_id".equals(buttonId)){ - this.commitCreatedEnvironment(constructs, tmEngine); + this.commitCreatedEnvironment(constructs, sender, tmEngine); } - }catch(ExporterException ee){ - Window.alert("failed to commit the Topic Maps data, because: " + ee.getMessage()); + }catch(Exception e){ + Window.alert("failed to commit the Topic Maps data, because: " + e.getMessage()); } } - private void commitCreatedEnvironment(ArrayList<Pair<Construct, TopicMapsTypes>> constructs, TmEngine tmEngine) throws ExporterException { + private void commitCreatedEnvironment(ArrayList<Pair<Construct, TopicMapsTypes>> constructs, GdlCommitButton sender, TmEngine tmEngine) throws ExporterException { final String carrierPsi = PSIs.GDL.gdl + "environment_default_creator_topic_view_id"; ArrayList<Topic> topics = new ArrayList<Topic>(); ArrayList<TopicMap> topicMaps = new ArrayList<TopicMap>(); @@ -94,9 +96,7 @@ try{ // a check for an existing environment topic is not necessary, // since it would be exactly the same topic. - - //Window.alert(jtm); // TODO: remove - builder.sendRequest(jtm, new EnvironmentCommitRequest(jtm)); + builder.sendRequest(jtm, new EnvironmentCommitRequest(jtm, sender)); }catch(RequestException e){ Window.alert("could not commit the topic: " + jtm + ", because(" + e.getClass() + "): " + e.getMessage()); } @@ -177,14 +177,16 @@ private class EnvironmentCommitRequest implements RequestCallback { private String objectToBeSend = null; + private GdlCommitButton sender = null; @SuppressWarnings("unused") private EnvironmentCommitRequest(){} - public EnvironmentCommitRequest(String objectToBeCommitted){ + public EnvironmentCommitRequest(String objectToBeCommitted, GdlCommitButton sender){ this.objectToBeSend = objectToBeCommitted; + this.sender = sender; } @@ -192,6 +194,7 @@ public void onResponseReceived(Request request, Response response) { if (200 == response.getStatusCode()) { Window.alert("commit operation of the object " + this.objectToBeSend + " successed"); + this.sender.resetCarriers(); // TODO: reset the web page } else { Window.alert("commit operation of the object " + this.objectToBeSend + " failed: " + response.getStatusCode() + "(" + response.getStatusText() + ")\n" + response.getText());
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlAssociationView.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlAssociationView.java Mon Sep 12 02:31:58 2011 (r871) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlAssociationView.java Mon Sep 12 05:18:04 2011 (r872) @@ -48,6 +48,16 @@ } + public void resetRepresentedAssociations(){ + for (Widget ctrl : this.subElements) { + if(ctrl instanceof ButtonableObject){ + if(((ButtonableObject)ctrl).getMainObject() instanceof AssociationItem){ + ((AssociationItem)((ButtonableObject)ctrl).getMainObject()).resetRepresentedAssociation(); + } + } + } + } + // content orientation has no effect on a view, so here must the original method // defined in GdlVisibleObject implemented @Override @@ -221,11 +231,11 @@ // TODO: implement // reifier => topic-role - // item-identifeir => topic-role + // item-identifier => topic-role // type => association-role // reifier => association-role // item-identifier => association-role - // scope => assocition-role + // scope => association-role } return result; @@ -238,12 +248,27 @@ // represented by this class public class AssociationItem extends GdlView { private int indexInParent = -1; + private Association representedAssociation = null; @SuppressWarnings("unchecked") public Association getRepresentedAssociation() throws InvalidGdlSchemaException{ - if(this.receivedData != null) return (Association)this.receivedData; - else return this.tmRepresentative.getTopicMap().createAssociation(((GdlAssociationView)this.getGdlParent()).getAssociationType(), (JsArray<Topic>)JsArray.createArray()); + if(this.receivedData != null){ + return (Association)this.receivedData; + } else if (this.representedAssociation != null){ + return this.representedAssociation; + } else{ + this.representedAssociation = this.tmRepresentative.getTopicMap().createAssociation(((GdlAssociationView)this.getGdlParent()).getAssociationType(), (JsArray<Topic>)JsArray.createArray()); + return this.representedAssociation; + } + } + + + // can be called to set the represented topic to null, e.g. + // if a created association was submitted and a new association is created, + // so the old carrier is reset as well + public void resetRepresentedAssociation(){ + this.representedAssociation = null; }
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlDefaultCreatorTopicView.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlDefaultCreatorTopicView.java Mon Sep 12 02:31:58 2011 (r871) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlDefaultCreatorTopicView.java Mon Sep 12 05:18:04 2011 (r872) @@ -22,4 +22,12 @@ public GdlPanel getRoot(){ return this.rootPanel; } + + + // removes and destroys the carrier topic that is created when the getContent + // method is invoked, so duplicate data entries are not produced! + public void resetCarrier(){ + //TODO: implement => call for this instance and each child creator instance + + } }
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlTopicView.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlTopicView.java Mon Sep 12 02:31:58 2011 (r871) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlTopicView.java Mon Sep 12 05:18:04 2011 (r872) @@ -146,8 +146,7 @@ public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier, boolean validate) throws InvalidGdlSchemaException, ExecutionException, InvalidContentException { ArrayList<Pair<Construct, TopicMapsTypes>> result = new ArrayList<Pair<Construct,TopicMapsTypes>>(); - Topic localCarrier = (Topic)this.receivedData; - if(localCarrier == null) localCarrier = this.getRepresentedTopic(); + Topic localCarrier = this.getRepresentedTopic(); for (Widget ctrl : this.subElements) { int i = 0; @@ -225,4 +224,12 @@ return (Topic)this.receivedData; } } + + + // can be called to set the represented topic to null, e.g. + // if a created topic was submitted and a new topic is created, + // so the old carrier is reset as well + public void resetRepresentedTopic(){ + this.representedTopic = null; + } }