Author: lgiessmann Date: Thu Sep 1 09:18:20 2011 New Revision: 816
Log: gdl-frontend: Widgets: implemented a DeleteCallback, a CommitCallback and fixed some bugs
Added: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/isidorus/DeleteCallback.java Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/lib/GDL_TmEngine.jar branches/gdl-frontend/src/anaToMia/GDL_Widgets/lib/GDL_TopicMaps_Model.jar branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/TODO.txt 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/GdlVisibleObject.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/PSIs.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TestClass.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TmHelper.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/Utils.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlActionButton.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/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/environment/IDeleteCallback.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/GdlTopicView.java
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/lib/GDL_TmEngine.jar ============================================================================== Binary file (source and/or target). No diff available.
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/lib/GDL_TopicMaps_Model.jar ============================================================================== Binary file (source and/or target). No diff available.
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/TODO.txt ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/TODO.txt Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/TODO.txt Thu Sep 1 09:18:20 2011 (r816) @@ -1,4 +1,4 @@ -* finalise the GDL-Schema for creating and editing instances of tgm:Hash-Object => Hidden-Value (type-occurrence) + otherrole +* implement validation * implement the handling of default-values * Implement TopicMaps data consumption * Implement TopicMaps data generation
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 Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPanel.java Thu Sep 1 09:18:20 2011 (r816) @@ -209,7 +209,9 @@ if(this.commitCallback == null){ throw new ExecutionException("No CommitCallback was set yet"); } - this.commitCallback.commitTmConstruct(this.requestedSchemaTm, TopicMapsTypes.TopicMap, this.tmEngine); + 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); }catch(Exception e){ for (IOnErrorCallback handler : localOnErrorContainer) { handler.onError(GdlErrorTypes.CommitError, e); @@ -250,7 +252,9 @@ if(this.deleteCallback == null) throw new ExecutionException("No DeleteCallback was set yet"); - this.deleteCallback.deleteTmConstruct(requestedSchemaTm, TopicMapsTypes.TopicMap); + ArrayList<Pair<Construct, TopicMapsTypes>> data = new ArrayList<Pair<Construct,TopicMapsTypes>>(); + data.add(new Pair<Construct, TopicMapsTypes>(this.requestedSchemaTm, TopicMapsTypes.TopicMap)); + this.deleteCallback.deleteTmConstruct(data, null); }catch(Exception e){ for (IOnErrorCallback handler : localOnErrorContainer) handler.onError(GdlErrorTypes.DeleteError, e);
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java Thu Sep 1 09:18:20 2011 (r816) @@ -2215,7 +2215,9 @@ // returns the actual data that is hold by this instance public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier) throws InvalidGdlSchemaException, ExecutionException { ArrayList<Pair<Construct, TopicMapsTypes>> result = new ArrayList<Pair<Construct,TopicMapsTypes>>(); - if(carrier == null || this.getRootConstraint() == null) return result; + if(this.getRootConstraint() == null) return result; + Construct localCarrier = carrier; + if(carrier == null) localCarrier = TmHelper.getNearestTopicOrAssociation(this); //TODO: finalise for (int idx = 0; idx != this.getSelectedValues().size(); ++idx){ @@ -2226,13 +2228,27 @@ } else if (TmHelper.isInstanceOf(this.getRootConstraint(), PSIs.TMCL.tmclSubjectLocatorConstraint)){ } else if (TmHelper.isInstanceOf(this.getRootConstraint(), PSIs.TMCL.tmclTopicNameConstraint)){ + if(!(localCarrier instanceof Topic)) throw new ExecutionException("the constraint " + TmHelper.getAnyIdOfTopic(this.getRootConstraint()) + " must be bound to a Topic, but is: " + localCarrier.getClass()); + Topic nameType = TmHelper.getConstrainedStatement(this.getConstraint()); + JsArray<Name> names = ((Topic)localCarrier).getNames(nameType); + Name changedName = null; + if(this.getRootConstraint().equals(this.getConstraint())){ + if(names.length() > idx){ + changedName = names.get(idx); + changedName.setValue(this.getSelectedValues().get(idx)); + }else { + changedName = ((Topic)localCarrier).createName(this.getSelectedValues().get(idx), nameType, null); + } + } // TODO: item-identifier, reifier, variant, ... + + result.add(new Pair<Construct, TopicMapsTypes>(changedName, TopicMapsTypes.Name)); } else if (TmHelper.isInstanceOf(this.getRootConstraint(), PSIs.TMCL.tmclVariantNameConstraint)){ } else if (TmHelper.isInstanceOf(this.getRootConstraint(), PSIs.TMCL.tmclTopicOccurrenceConstraint)){ - if(!(carrier instanceof Topic)) throw new ExecutionException("the constraint " + TmHelper.getAnyIdOfTopic(this.getRootConstraint()) + " must be bound to a Topic, but is: " + carrier.getClass()); + if(!(localCarrier instanceof Topic)) throw new ExecutionException("the constraint " + TmHelper.getAnyIdOfTopic(this.getRootConstraint()) + " must be bound to a Topic, but is: " + localCarrier.getClass()); Topic occurrenceType = TmHelper.getConstrainedStatement(this.getConstraint()); - JsArray<Occurrence> occurrences = ((Topic)carrier).getOccurrences(occurrenceType); + JsArray<Occurrence> occurrences = ((Topic)localCarrier).getOccurrences(occurrenceType);
Occurrence changedOccurrence = null; if(this.getRootConstraint().equals(this.getConstraint())){ @@ -2240,18 +2256,18 @@ changedOccurrence = occurrences.get(idx); changedOccurrence.setValue(this.getSelectedValues().get(idx)); }else { - changedOccurrence = ((Topic)carrier).createOccurrence(occurrenceType, this.getSelectedValues().get(idx), null, null); + changedOccurrence = ((Topic)localCarrier).createOccurrence(occurrenceType, this.getSelectedValues().get(idx), null, null); } - } // TODO: Type, Role-Player, ... + } // TODO: item-identifier, reifier, ... result.add(new Pair<Construct, TopicMapsTypes>(changedOccurrence, TopicMapsTypes.Occurrence)); } else if (TmHelper.isInstanceOf(this.getRootConstraint(), PSIs.TMCL.tmclTopicRoleConstraint)){ - if(!(carrier instanceof Association)) throw new ExecutionException("the constraint " + TmHelper.getAnyIdOfTopic(this.getRootConstraint()) + " must be bound to an Association, but is: " + carrier.getClass()); + if(!(localCarrier instanceof Association)) throw new ExecutionException("the constraint " + TmHelper.getAnyIdOfTopic(this.getRootConstraint()) + " must be bound to an Association, but is: " + localCarrier.getClass()); Pair<Topic, Topic> roleAndPlayerType = TmHelper.getConstrainedRoleAndPlayerTypeOfConstraint(this.getRootConstraint()); Topic roleType = roleAndPlayerType.getFirst(); Topic playerType = roleAndPlayerType.getSecond(); - JsArray<Role> typedRoles = ((Association)carrier).getRoles(roleType); + JsArray<Role> typedRoles = ((Association)localCarrier).getRoles(roleType); ArrayList<Role> roles = new ArrayList<Role>(); for(int i = 0; i != typedRoles.length(); ++i) if(TmHelper.isInstanceOf(typedRoles.get(i).getPlayer(), playerType)) roles.add(typedRoles.get(i)); @@ -2266,7 +2282,7 @@ changedRole = roles.get(idx); changedRole.setPlayer(TmHelper.getTopicFromStringRepresentation(this.getSelectedValues().get(idx), this.getValueGroup())); } else { - changedRole = ((Association)carrier).createRole(roleType, TmHelper.getTopicFromStringRepresentation(this.getSelectedValues().get(idx), this.getValueGroup())); + changedRole = ((Association)localCarrier).createRole(roleType, TmHelper.getTopicFromStringRepresentation(this.getSelectedValues().get(idx), this.getValueGroup())); } } else if(TmHelper.isInstanceOf(this.getConstraint(), PSIs.GDL.TopicType.gdlType)){ // TODO: implement
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/PSIs.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/PSIs.java Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/PSIs.java Thu Sep 1 09:18:20 2011 (r816) @@ -2,7 +2,7 @@
-public class PSIs { +public class PSIs { // some psis of the TMDM public class TMDM{ public final static String tmdm = "http://psi.topicmaps.org/iso13250/model/";
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TestClass.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TestClass.java Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TestClass.java Thu Sep 1 09:18:20 2011 (r816) @@ -7,6 +7,7 @@ import us.isidor.gdl.anaToMia.Widgets.environment.Pair; import us.isidor.gdl.anaToMia.Widgets.environment.TopicIdentifierTypes; import us.isidor.gdl.anaToMia.Widgets.isidorus.CommitCallback; +import us.isidor.gdl.anaToMia.Widgets.isidorus.DeleteCallback; import us.isidor.gdl.anaToMia.Widgets.isidorus.LoadSchemaCallback; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.event.dom.client.ClickEvent; @@ -30,12 +31,12 @@ mainPanel.setPixelSize(1000, 600); ArrayList<Pair<String, TopicIdentifierTypes>> requestedTopicsToCreate = new ArrayList<Pair<String,TopicIdentifierTypes>>(); - requestedTopicsToCreate.add(new Pair<String, TopicIdentifierTypes>("http://textgrid.org/serviceregistry/model/types/Hash-Object", TopicIdentifierTypes.SubjectIdentifier)); - //requestedTopicsToCreate.add(new Pair<String, TopicIdentifierTypes>("http://textgrid.org/serviceregistry/model/types/Environment", TopicIdentifierTypes.SubjectIdentifier)); + //requestedTopicsToCreate.add(new Pair<String, TopicIdentifierTypes>("http://textgrid.org/serviceregistry/model/types/Hash-Object", TopicIdentifierTypes.SubjectIdentifier)); + requestedTopicsToCreate.add(new Pair<String, TopicIdentifierTypes>("http://textgrid.org/serviceregistry/model/types/Environment", TopicIdentifierTypes.SubjectIdentifier)); //requestedTopicsToCreate.add(new Pair<String, TopicIdentifierTypes>("http://psi.test.org/gdl-test/Poet", TopicIdentifierTypes.SubjectIdentifier)); //requestedTopicsToCreate.add(new Pair<String, TopicIdentifierTypes>("http://psi.test.org/gdl-test/Musician", TopicIdentifierTypes.SubjectIdentifier)); - //Pair<String, TopicIdentifierTypes> requestedTopicToEdit = new Pair<String, TopicIdentifierTypes>("http://textgrid.org/serviceregistry/model/types/test-env", TopicIdentifierTypes.SubjectIdentifier); + Pair<String, TopicIdentifierTypes> requestedTopicToEdit = new Pair<String, TopicIdentifierTypes>("http://textgrid.org/serviceregistry/test-env-1", TopicIdentifierTypes.SubjectIdentifier); //Pair<String, TopicIdentifierTypes> requestedTopicToEdit = new Pair<String, TopicIdentifierTypes>("http://textgrid.org/serviceregistry/test-hash-2", TopicIdentifierTypes.SubjectIdentifier); GdlPanel.addClickHandler("hash_object_reset_button_id", new ClickHandler() { @Override @@ -45,11 +46,12 @@ } }); - gdlPanel = new GdlPanel(null, requestedTopicsToCreate); + gdlPanel = new GdlPanel(requestedTopicToEdit, null); mainPanel.add(gdlPanel); gdlPanel.setTmEngine(new JtmsTmEngine()); gdlPanel.setLoadSchemaCallback(new LoadSchemaCallback()); gdlPanel.setCommitCallback(new CommitCallback()); + gdlPanel.setDeleteCallback(new DeleteCallback()); Button requestButton = new Button("load schema");
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TmHelper.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TmHelper.java Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TmHelper.java Thu Sep 1 09:18:20 2011 (r816) @@ -17,12 +17,13 @@ import us.isidor.gdl.anaToMia.Widgets.environment.Pattern; import us.isidor.gdl.anaToMia.Widgets.environment.TopicIdentifierTypes; import us.isidor.gdl.anaToMia.Widgets.view.GdlTopicView; +import us.isidor.gdl.anaToMia.Widgets.view.GdlAssociationView.AssociationItem; +import us.isidor.gdl.anaToMia.Widgets.view.GdlView; + import com.google.gwt.core.client.JsArray;
-public class TmHelper { - - +public class TmHelper { // a helper that returns the topic bound to the identifier via a subject identifier public static Topic getTopicByPsi(String subjectIdentifier, TopicMap tm){ if(subjectIdentifier == null || tm == null) return null; @@ -698,7 +699,7 @@
// returns a topic that is represented by the nearest instance of GdlTopicView - public static Topic getNearestTopic(GdlVisibleObject elem){ + public static Topic getNearestTopic(GdlVisibleObject elem) throws InvalidGdlSchemaException{ if(elem == null) return null; GdlTopicView view = null; @@ -714,6 +715,25 @@ } + // returns a topic or associaitons that is represented by the nearest instance of GdlView + public static Construct getNearestTopicOrAssociation(GdlVisibleObject elem) throws InvalidGdlSchemaException{ + if(elem == null) return null; + + GdlView view = null; + GdlVisibleObject parent = elem; + + do{ + if(parent instanceof GdlView) view = (GdlView)parent; + else parent = parent.getGdlParent(); + }while(view == null && parent != null); + + if(view == null) return null; + else if(view instanceof GdlTopicView) return ((GdlTopicView)view).getRepresentedTopic(); + else if(view instanceof AssociationItem) return ((AssociationItem)view).getRepresentedAssociation(); + else return null; + } + + // returns the topic that represents the value group that is bound to the passed // topic via a gdl:view-binding association public static Topic getValueGroupOf(Topic visibleElement) throws InvalidGdlSchemaException{
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/Utils.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/Utils.java Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/Utils.java Thu Sep 1 09:18:20 2011 (r816) @@ -1,9 +1,9 @@ package us.isidor.gdl.anaToMia.Widgets.base;
import java.util.ArrayList; - +import com.google.gwt.core.client.JavaScriptObject; import us.isidor.gdl.anaToMia.Widgets.environment.Pattern; - +import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.Element;
public class Utils { @@ -22,6 +22,16 @@ } + public static <T extends JavaScriptObject> boolean contains (JsArray<T> container, T item){ + if(container == null || item == null) return false; + + for(int i = 0; i != container.length(); ++i) + if(container.get(i).equals(item)) return true; + + return false; + } + + // returns a list that contains a union of both lists public static <T> ArrayList<T> intersection(ArrayList<T> fst, ArrayList<T> snd){ ArrayList<T> result = new ArrayList<T>();
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlActionButton.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlActionButton.java Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlActionButton.java Thu Sep 1 09:18:20 2011 (r816) @@ -60,6 +60,7 @@ ((Button)this.subElements.get(0)).addClickHandler(handler); } + // sets the id property of this element by using the GWT DOM class @Override public void setId(String id){
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 Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlCommitButton.java Thu Sep 1 09:18:20 2011 (r816) @@ -2,17 +2,15 @@
import us.isidor.gdl.anaToMia.TopicMaps.TmEngineModel.TmEngine; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Construct; -import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Association; 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.environment.Pair; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; -import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMapsTypes;
public class GdlCommitButton extends GdlActionButton { @@ -42,18 +40,9 @@ public void onClick(ClickEvent event) { try{ TmEngine tmEngine = this.owner.getRoot().getTmEngine(); - for (Pair<Construct, TopicMapsTypes> pair : this.owner.getGdlParent().getContent(null)) { - String str = ""; - if(pair.getSecond().equals(TopicMapsTypes.Topic)){ - str = tmEngine.exportTm((Topic)pair.getFirst()); - } else if(pair.getSecond().equals(TopicMapsTypes.Association)){ - str = tmEngine.exportTm((Association)pair.getFirst()); - } + ICommitCallback callback = this.owner.getRoot().getCommitCallback(); - Window.alert(str); - } - - // TODO: implement + callback.commitTmConstruct(this.owner.getGdlParent().getContent(null), tmEngine, this.owner.getId()); }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/GdlDeleteButton.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlDeleteButton.java Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlDeleteButton.java Thu Sep 1 09:18:20 2011 (r816) @@ -8,6 +8,7 @@ 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.IDeleteCallback; import us.isidor.gdl.anaToMia.Widgets.environment.InvalidGdlSchemaException;
public class GdlDeleteButton extends GdlActionButton { @@ -36,9 +37,10 @@ @Override public void onClick(ClickEvent event) { try{ - Window.alert("content: " + this.owner.getGdlParent().getContent(null)); - // TODO: implement + IDeleteCallback callback = this.owner.getRoot().getDeleteCallback(); + callback.deleteTmConstruct(this.owner.getGdlParent().getContent(null), this.owner.getId()); }catch(Exception e){ + e.printStackTrace(); Window.alert("caught: " + e.getMessage()); } }
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 Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/ICommitCallback.java Thu Sep 1 09:18:20 2011 (r816) @@ -1,10 +1,11 @@ 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;
public interface ICommitCallback { - public void commitTmConstruct(Construct construct, TopicMapsTypes constructType, TmEngine tmengine); + public void commitTmConstruct(ArrayList<Pair<Construct, TopicMapsTypes>> constructs, TmEngine tmengine, String buttonId); }
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/IDeleteCallback.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/IDeleteCallback.java Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/IDeleteCallback.java Thu Sep 1 09:18:20 2011 (r816) @@ -1,9 +1,11 @@ package us.isidor.gdl.anaToMia.Widgets.environment;
+import java.util.ArrayList; + import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Construct; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMapsTypes;
public interface IDeleteCallback { - public void deleteTmConstruct(Construct construct, TopicMapsTypes constructType); + public void deleteTmConstruct(ArrayList<Pair<Construct, TopicMapsTypes>> constructs, String buttonId); }
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 Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/isidorus/CommitCallback.java Thu Sep 1 09:18:20 2011 (r816) @@ -1,45 +1,143 @@ package us.isidor.gdl.anaToMia.Widgets.isidorus;
-import com.google.gwt.user.client.Window; +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.environment.Pair;
+import com.google.gwt.core.client.JsArray; +import com.google.gwt.user.client.Window; import us.isidor.gdl.anaToMia.TopicMaps.TmEngineModel.ExporterException; import us.isidor.gdl.anaToMia.TopicMaps.TmEngineModel.TmEngine; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Association; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Construct; -import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; +import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Locator; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Name; -import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Variant; -import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Role; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Occurrence; +import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; +import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMap; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMapsTypes; import us.isidor.gdl.anaToMia.Widgets.environment.ICommitCallback;
public class CommitCallback implements ICommitCallback{
@Override - public void commitTmConstruct(Construct construct, TopicMapsTypes constructType, TmEngine tmEngine) { + public void commitTmConstruct(ArrayList<Pair<Construct, TopicMapsTypes>> constructs, TmEngine tmEngine, String buttonId) { try{ - String jtm = null; - - switch(constructType){ - case Association: jtm = tmEngine.exportTm((Association)construct); - break; - case Role: jtm = tmEngine.exportTm((Role)construct); - break; - case Topic: jtm = tmEngine.exportTm((Topic)construct); - break; - case Name: jtm = tmEngine.exportTm((Name)construct); - break; - case Variant: jtm = tmEngine.exportTm((Variant)construct); - break; - case Occurrence: jtm = tmEngine.exportTm((Occurrence)construct); - break; + if("hash_object_commit_button_id".equals(buttonId)){ + this.commitCreatedHashObject(constructs, tmEngine); + } else if("environment_commit_button_id".equals(buttonId)){ + this.commitCreatedEnvironment(constructs, tmEngine); } - - Window.alert(jtm); - // TODO: implement }catch(ExporterException ee){ Window.alert("faild to commit the Topic Maps data, because: " + ee.getMessage()); } } + + + private void commitCreatedEnvironment(ArrayList<Pair<Construct, TopicMapsTypes>> constructs, 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>(); + + for (Pair<Construct, TopicMapsTypes> construct : constructs) { + if(construct.getSecond().equals(TopicMapsTypes.Topic)) topics.add((Topic)construct.getFirst()); + else if(construct.getSecond().equals(TopicMapsTypes.TopicMap)) topicMaps.add((TopicMap)construct.getFirst()); + else throw new ExporterException("unexpected construct types: " + construct.getSecond()+ ", only Topic and Association are allowed"); + } + + Topic top = null; + Locator carrierLocator = null; + TopicMap tm = null; + if(topicMaps.size() != 0){ + tm = topicMaps.get(0); + carrierLocator = tm.createLocator(carrierPsi); + top = (Topic)tm.getConstructByItemIdentifier(carrierLocator); + } + else if(topics.size() != 0){ + tm = topics.get(0).getTopicMap(); + top = topics.get(0); + carrierLocator = tm.createLocator(carrierPsi); + } + + if(top != null){ + Name envName = top.getNames().get(0); + Locator psi = tm.createLocator("http://textgrid.org/serviceregistry/environment/" + envName.getValue()); + top.removeSubjectIdentifier(carrierLocator); + top.addSubjectIdentifier(psi); + } + + String jtm = null; + if(topicMaps.size() != 0){ + jtm = tmEngine.exportTm(topicMaps.get(0)); + } else if(topics.size() != 0){ + jtm = tmEngine.exportTm(topics, new ArrayList<Association>()); + } + + Window.alert(jtm); + // TODO: implement actual commit and check if the topic already exists + } + + + private void commitCreatedHashObject(ArrayList<Pair<Construct, TopicMapsTypes>> constructs, TmEngine tmEngine) throws ExporterException{ + final String carrierPsi = PSIs.GDL.gdl + "hash_object_default_creator_topic_view_id"; + ArrayList<Topic> topics = new ArrayList<Topic>(); + ArrayList<Association> associations = new ArrayList<Association>(); + ArrayList<TopicMap> topicMaps = new ArrayList<TopicMap>(); + + for (Pair<Construct, TopicMapsTypes> construct : constructs) { + if(construct.getSecond().equals(TopicMapsTypes.Association)) associations.add((Association)construct.getFirst()); + else if(construct.getSecond().equals(TopicMapsTypes.Topic)) topics.add((Topic)construct.getFirst()); + else if(construct.getSecond().equals(TopicMapsTypes.TopicMap)) topicMaps.add((TopicMap)construct.getFirst()); + else throw new ExporterException("unexpected construct types: " + construct.getSecond()+ ", only Topic and Association are allowed"); + } + + Topic top = null; + Locator carrierLocator = null; + TopicMap tm = null; + if(topicMaps.size() != 0){ + tm = topicMaps.get(0); + carrierLocator = tm.createLocator(carrierPsi); + top = (Topic)tm.getConstructByItemIdentifier(carrierLocator); + } + else if(topics.size() != 0){ + tm = topics.get(0).getTopicMap(); + top = topics.get(0); + carrierLocator = tm.createLocator(carrierPsi); + } + + if(top != null){ + Association assoc = null; + if(associations.size() != 0){ + assoc = associations.get(0); + } else { + JsArray<Association> assocs = top.getTopicMap().getAssociations(); + Topic assocType = TmHelper.getTopicByPsi("http://textgrid.org/serviceregistry/model/has-environment", tm); + for(int i = 0; i != assocs.length(); ++i){ + if(assocs.get(i).getType().equals(assocType)){ + assoc = assocs.get(i); + break; + } + } + } + + Name env = assoc.getRoles(TmHelper.getTopicByPsi("http://textgrid.org/serviceregistry/model/environment", tm)).get(0).getPlayer().getNames().get(0); + Occurrence key = top.getOccurrences(TmHelper.getTopicByPsi("http://textgrid.org/serviceregistry/model/key", tm)).get(0); + Locator psi = tm.createLocator("http://textgrid.org/serviceregistry/hash-object/" + env.getValue() + "/" + key.getValue()); + top.removeSubjectIdentifier(carrierLocator); + top.addSubjectIdentifier(psi); + } + + String jtm = null; + if(topicMaps.size() != 0){ + jtm = tmEngine.exportTm(topicMaps.get(0)); + } else if(associations.size() != 0 || topics.size() != 0){ + jtm = tmEngine.exportTm(topics, associations); + } + + Window.alert(jtm); + // TODO: implement actual commit and check if the topic already exists + } }
Added: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/isidorus/DeleteCallback.java ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/isidorus/DeleteCallback.java Thu Sep 1 09:18:20 2011 (r816) @@ -0,0 +1,32 @@ +package us.isidor.gdl.anaToMia.Widgets.isidorus; + +import java.util.ArrayList; +import com.google.gwt.user.client.Window; +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.environment.IDeleteCallback; +import us.isidor.gdl.anaToMia.Widgets.environment.Pair; + +public class DeleteCallback implements IDeleteCallback { + + @Override + public void deleteTmConstruct(ArrayList<Pair<Construct, TopicMapsTypes>> constructs, String buttonId) { + this.deleteTopic(constructs); + } + + + private void deleteTopic(ArrayList<Pair<Construct, TopicMapsTypes>> constructs){ + 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(); + + Window.alert("psi of the topic to be deleted: " + psi); + // TODO: send actual delete request + } + } + } + } +}
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 Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlAssociationView.java Thu Sep 1 09:18:20 2011 (r816) @@ -9,7 +9,6 @@ import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Construct; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Occurrence; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; -import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMap; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMapsTypes; import us.isidor.gdl.anaToMia.Widgets.base.ButtonableObject; import us.isidor.gdl.anaToMia.Widgets.base.GdlHiddenValue; @@ -230,10 +229,17 @@ // Further elements are created by caling the GdlInstantiator.instantiate // method, the passed received argument is set ot the association that is // represented by this class - protected class AssociationItem extends GdlView { + public class AssociationItem extends GdlView { private int indexInParent = -1; + @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()); + } + + @SuppressWarnings("unused") private AssociationItem(){ super(); @@ -256,16 +262,11 @@ } - @SuppressWarnings("unchecked") @Override public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier) throws InvalidGdlSchemaException, ExecutionException { ArrayList<Pair<Construct, TopicMapsTypes>> result = new ArrayList<Pair<Construct,TopicMapsTypes>>(); - Association localCarrier = (Association)this.receivedData; - if(localCarrier == null){ - TopicMap tm = this.tmRepresentative.getTopicMap(); - localCarrier = tm.createAssociation(((GdlAssociationView)this.getGdlParent()).getAssociationType(), (JsArray<Topic>)JsArray.createArray()); - } + Association localCarrier = this.getRepresentedAssociation(); for (Widget ctrl : this.subElements) { if(ctrl instanceof GdlVisibleObject){
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 Thu Sep 1 09:15:03 2011 (r815) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlTopicView.java Thu Sep 1 09:18:20 2011 (r816) @@ -2,13 +2,21 @@
import java.util.ArrayList; +import com.google.gwt.core.client.JsArray; import com.google.gwt.user.client.ui.Widget; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Construct; +import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Name; +import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Occurrence; +import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Association; +import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Role; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMapsTypes; +import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Variant; import us.isidor.gdl.anaToMia.Widgets.base.ButtonableObject; import us.isidor.gdl.anaToMia.Widgets.base.GdlVisibleObject; +import us.isidor.gdl.anaToMia.Widgets.base.PSIs; import us.isidor.gdl.anaToMia.Widgets.base.TmHelper; +import us.isidor.gdl.anaToMia.Widgets.base.Utils; import us.isidor.gdl.anaToMia.Widgets.environment.ExecutionException; import us.isidor.gdl.anaToMia.Widgets.environment.InvalidGdlSchemaException; import us.isidor.gdl.anaToMia.Widgets.environment.Pair; @@ -75,6 +83,61 @@ } + // returns true if the construct that is contained in the first member of pair + // is also indirectly contained in the container + private boolean indirectlyContained(Pair<Construct, TopicMapsTypes> pair, ArrayList<Pair<Construct, TopicMapsTypes>> container){ + if(pair == null) return true; + if(container == null) return false; + + TopicMapsTypes newType = pair.getSecond(); + if(newType.equals(TopicMapsTypes.Name)){ + Name name = (Name)pair.getFirst(); + for (Pair<Construct, TopicMapsTypes> item : container) { + if(item.getSecond().equals(TopicMapsTypes.Topic)){ + JsArray<Name> names = ((Topic)item.getFirst()).getNames(); + if(Utils.contains(names, name)) return true; + } + } + } else if (newType.equals(TopicMapsTypes.Variant)){ + Variant variant = (Variant)pair.getFirst(); + for (Pair<Construct, TopicMapsTypes> item : container) { + if(item.getSecond().equals(TopicMapsTypes.Name)){ + JsArray<Variant> variants = ((Name)item.getFirst()).getVariants(); + if(Utils.contains(variants, variant)) return true; + } + } + + for (Pair<Construct, TopicMapsTypes> item : container) { + if(item.getSecond().equals(TopicMapsTypes.Topic)){ + JsArray<Name> names = ((Topic)item.getFirst()).getNames(); + for(int i = 0; i != names.length(); ++i){ + JsArray<Variant> variants = names.get(i).getVariants(); + if(Utils.contains(variants, variant)) return true; + } + } + } + } else if (newType.equals(TopicMapsTypes.Occurrence)){ + Occurrence occurrence = (Occurrence)pair.getFirst(); + for (Pair<Construct, TopicMapsTypes> item : container) { + if(item.getSecond().equals(TopicMapsTypes.Topic)){ + JsArray<Occurrence> occurrences = ((Topic)item.getFirst()).getOccurrences(); + if(Utils.contains(occurrences, occurrence)) return true; + } + } + } else if (newType.equals(TopicMapsTypes.Role)){ + Role role = (Role)pair.getFirst(); + for (Pair<Construct, TopicMapsTypes> item : container) { + if(item.getSecond().equals(TopicMapsTypes.Association)){ + JsArray<Role> roles = ((Association)item.getFirst()).getRoles(); + if(Utils.contains(roles, role)) return true; + } + } + } + + return false; + } + + @Override public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier) throws InvalidGdlSchemaException, ExecutionException { ArrayList<Pair<Construct, TopicMapsTypes>> result = new ArrayList<Pair<Construct,TopicMapsTypes>>(); @@ -83,11 +146,13 @@ if(localCarrier == null) localCarrier = this.getRepresentedTopic(); for (Widget ctrl : this.subElements) { - Pair<Construct, TopicMapsTypes> topicPair = new Pair<Construct, TopicMapsTypes>(localCarrier, TopicMapsTypes.Topic); - if(this.receivedData == null && !result.contains(topicPair)) result.add(topicPair); + int i = 0; + for( ; i != result.size(); ++i) if(result.get(i).getFirst().equals(localCarrier)) break; + if(i == result.size()) result.add(new Pair<Construct, TopicMapsTypes>(localCarrier, TopicMapsTypes.Topic)); + if(ctrl instanceof GdlVisibleObject){ for (Pair<Construct, TopicMapsTypes> pair : ((GdlVisibleObject)ctrl).getContent(localCarrier)) { - if(this.receivedData != null || (ctrl instanceof GdlView))result.add(pair); + if((this.receivedData != null || (ctrl instanceof GdlView)) && !this.indirectlyContained(pair, result))result.add(pair); } } } @@ -112,10 +177,10 @@ // returns the recieved topic or creates a topic stub - public Topic getRepresentedTopic(){ + public Topic getRepresentedTopic() throws InvalidGdlSchemaException { if(this.receivedData ==null){ if(this.representedTopic == null){ - this.representedTopic = this.tmRepresentative.getTopicMap().createTopic(); + this.representedTopic = this.tmRepresentative.getTopicMap().createTopicBySubjectIdentifier(this.tm.createLocator(PSIs.GDL.gdl + this.getId())); return this.representedTopic; } else { return this.representedTopic;