Author: lgiessmann Date: Fri Sep 2 03:54:41 2011 New Revision: 821
Log: gdl-frontend: Widgets: implemented the validation of gdlt:Role-Player values
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/TmHelper.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/Utils.java
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 Fri Sep 2 02:59:10 2011 (r820) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java Fri Sep 2 03:54:41 2011 (r821) @@ -109,6 +109,8 @@ protected boolean cardMinSet = false; protected int cardMax = 0; protected boolean cardMaxSet = false; + protected ArrayList<Topic> rawTmValues = new ArrayList<Topic>(); + protected boolean rawTmValuesSet = false;
// some constructors @@ -2096,8 +2098,9 @@ }
- // returns all topic maps values that are valid and declared for the value-group - // of this element - or an empty ArrayList + // returns all topic maps values represented by topics of the type gdlt:Tm-Value + // that are valid and declared for the value-group of this element - or + // an empty ArrayList public ArrayList<Topic> getTmValues() throws InvalidGdlSchemaException { if(this.tmValueTopicsSet){ return this.tmValueTopics; @@ -2235,6 +2238,33 @@ } } + + // validates the the tm values of a constraint + private void validateTmValue(Topic selectedPlayer) throws InvalidContentException, InvalidGdlSchemaException, ExecutionException { + if(this.getRawTmValues().size() != 0 && !this.getRawTmValues().contains(selectedPlayer)){ + throw new InvalidContentException("the topic " + TmHelper.getAnyIdOfTopic(selectedPlayer) + " does not satisfy the contraint " + TmHelper.getAnyIdOfTopic(this.getConstraint()) + " and the topic values: " + Utils.topicArrayToString(this.getRawTmValues())); + } else { + if(!this.getTmValuesForConstraint().contains(selectedPlayer)){ + throw new InvalidContentException("the topic " + TmHelper.getAnyIdOfTopic(selectedPlayer) + " does not satisfy the constraint " + TmHelper.getAnyIdOfTopic(this.getConstraint()) + " and topic values: " + Utils.topicArrayToString(this.getTmValuesForConstraint())); + } + } + } + + + + // returns the actual topics that are set as possible tm-values + private ArrayList<Topic> getRawTmValues() throws InvalidGdlSchemaException{ + if(this.rawTmValuesSet){ + return this.rawTmValues; + } else { + this.rawTmValuesSet = true; + ArrayList<Topic> tmValues = this.getTmValues(); + for (Topic tmValue : tmValues) this.rawTmValues = Utils.union(this.rawTmValues, TmHelper.getValuesForTmValue(tmValue)); + return this.rawTmValues; + } + } + + // returns the actual data that is hold by this instance public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier, boolean validate) throws InvalidGdlSchemaException, ExecutionException, InvalidContentException { ArrayList<Pair<Construct, TopicMapsTypes>> result = new ArrayList<Pair<Construct,TopicMapsTypes>>(); @@ -2306,8 +2336,10 @@ // TODO: implement } else if(TmHelper.isInstanceOf(this.getConstraint(), PSIs.GDL.TopicType.gdlRolePlayer)){ if(roles.size() > idx){ + Topic player = TmHelper.getTopicFromStringRepresentation(this.getSelectedValues().get(idx), this.getValueGroup()); + if(validate) this.validateTmValue(player); changedRole = roles.get(idx); - changedRole.setPlayer(TmHelper.getTopicFromStringRepresentation(this.getSelectedValues().get(idx), this.getValueGroup())); + changedRole.setPlayer(player); } else { changedRole = ((Association)localCarrier).createRole(roleType, TmHelper.getTopicFromStringRepresentation(this.getSelectedValues().get(idx), this.getValueGroup())); }
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 Fri Sep 2 02:59:10 2011 (r820) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TmHelper.java Fri Sep 2 03:54:41 2011 (r821) @@ -715,7 +715,7 @@ } - // returns a topic or associaitons that is represented by the nearest instance of GdlView + // returns a topic or associations that is represented by the nearest instance of GdlView public static Construct getNearestTopicOrAssociation(GdlVisibleObject elem) throws InvalidGdlSchemaException{ if(elem == null) return null; @@ -1021,6 +1021,7 @@ return result; } + // returns the topic that can be used to satisfy the passed constraint. public static ArrayList<Topic> getTmValuesForConstraint(Topic constraint, Topic valueGroup) throws InvalidGdlSchemaException, ExecutionException { ArrayList<Topic> result = new ArrayList<Topic>();
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 Fri Sep 2 02:59:10 2011 (r820) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/Utils.java Fri Sep 2 03:54:41 2011 (r821) @@ -2,6 +2,8 @@
import java.util.ArrayList; import com.google.gwt.core.client.JavaScriptObject; + +import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; import us.isidor.gdl.anaToMia.Widgets.environment.Pattern; import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.Element; @@ -18,6 +20,21 @@ } return result.substring(0, result.length() - 2) + "]"; + } + + + // returns a string of the form [item1, item2, ... ] for all + // topics of an ArrayList, whereas each item is any identifier + // of the topic + public static String topicArrayToString(ArrayList<Topic> topicList){ + if(topicList == null || topicList.size() == 0) return "[ ]"; + + String result = "["; + for (Topic top : topicList) { + result += TmHelper.getAnyIdOfTopic(top) + ", "; + } + + return result.substring(0, result.length() - 2) + "]"; }