Author: lgiessmann
Date: Thu Sep 8 07:54:00 2011
New Revision: 858
Log:
gdl-frontend: Widgets: fixed a bug in the hanlding of GdlHiddenValue in GdlAssociationView instances
Modified:
branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlAssociationView.java
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 8 07:47:55 2011 (r857)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlAssociationView.java Thu Sep 8 07:54:00 2011 (r858)
@@ -8,6 +8,7 @@
import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Association;
import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Construct;
import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Occurrence;
+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.Widgets.base.ButtonableObject;
@@ -201,14 +202,19 @@
// process hidden values
for (Topic hd : this.getHiddenValues()) {
GdlHiddenValue hdv = new GdlHiddenValue(hd, this);
+ Topic player = hdv.getRawTmValue();
+ if(player == null) throw new InvalidGdlSchemaException("the hidden value " + TmHelper.getAnyIdOfTopic(hd) + " must be bound to exactly one topic, but is unbound");
+ Topic roleType = TmHelper.getConstrainedRoleAndPlayerTypeOfConstraint(hdv.getRootConstraint()).getFirst();
+
if(TmHelper.isInstanceOf(hdv.getConstraint(), PSIs.GDL.TopicType.gdlRolePlayer)){
if(!TmHelper.isInstanceOf(hdv.getRootConstraint(), PSIs.TMCL.tmclTopicRoleConstraint)) throw new InvalidGdlSchemaException("the constraint " + TmHelper.getAnyIdOfTopic(hdv.getConstraint()) + " must be bound to an instance of " + PSIs.TMCL.tmclTopicRoleConstraint + ", but is: " + TmHelper.getAnyIdOfTopic(hdv.getRootConstraint()));
for (Pair<Construct, TopicMapsTypes> pair : result) {
if(pair.getSecond().equals(TopicMapsTypes.Association)){
Association assoc = (Association)pair.getFirst();
- Topic player = hdv.getRawTmValue();
- if(player == null) throw new InvalidGdlSchemaException("the hidden value " + TmHelper.getAnyIdOfTopic(hd) + " must be bound to exactly one topic, but is unbound");
- assoc.createRole(TmHelper.getConstrainedRoleAndPlayerTypeOfConstraint(hdv.getRootConstraint()).getFirst(), player);
+ JsArray<Role> roles = assoc.getRoles(roleType);
+ int i = 0;
+ for( ; i != roles.length(); ++i) if(roles.get(i).getPlayer().equals(player)) break;
+ if(i == roles.length()) assoc.createRole(roleType, player);
}
}
}