Author: lgiessmann Date: Wed Aug 17 09:16:43 2011 New Revision: 752
Log: gdl-frontend: Widgets: fixed some bugs when a a visible-object follows after a container-element in the GUI
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TmHelper.java
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 Wed Aug 17 08:30:29 2011 (r751) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TmHelper.java Wed Aug 17 09:16:43 2011 (r752) @@ -473,7 +473,7 @@ JsArray<Role> descendantRoles = descendantAssociation.getRoles(descendantRoleType); for(int i = 0; i != descendantRoles.length(); ++i){ Topic player = descendantRoles.get(i).getPlayer(); - if(isInstanceOf(player, visibleObject) && !validDescendants.contains(player)) validDescendants.add(player); + if(isInstanceOf(player, visibleObject) && !validDescendants.contains(player) && containees.contains(player)) validDescendants.add(player); } } @@ -483,7 +483,7 @@ for (Topic topic : validDescendants) bindings += ", " + getAnyIdOfTopic(topic); if(bindings.length() == 0) bindings = "[]"; else bindings = bindings.substring(2); - throw new InvalidGdlSchemaException("the topic " + top + " must be bound to exaclty one descendant element, but found " + bindings); + throw new InvalidGdlSchemaException("the topic " + top + " must be bound to exactly one descendant element, but found " + bindings); }else { return validDescendants.get(0); } @@ -542,7 +542,12 @@ Topic position = getTopicByPsi(PSIs.TopicType.gdlPosition, tm); rolePlayertypesAndTypes.add(new Pair<Topic, Topic>(position, descriptor)); rolePlayertypesAndTypes.add(new Pair<Topic, Topic>(visibleObject, descendantRoleType)); - ArrayList<Association> posAssocs = getAssociationsOfTopic(ancestor, ancestorRoleType, positionAssocType, null, rolePlayertypesAndTypes); + ArrayList<Association> possiblePosAssocs = getAssociationsOfTopic(ancestor, ancestorRoleType, positionAssocType, null, rolePlayertypesAndTypes); + ArrayList<Association> posAssocs = new ArrayList<Association>(); + for (Association candidate : possiblePosAssocs) { + JsArray<Role> descendantRole = candidate.getRoles(descendantRoleType); + if(descendantRole.length() == 1 && descendantRole.get(0).getPlayer().equals(descendant)) posAssocs.add(candidate); + } if(posAssocs.size() != 1){ String top1 = getAnyIdOfTopic(ancestor); @@ -554,7 +559,7 @@ bindings += ", " + getAnyIdOfTopic(assoc.getRoles(descriptor).get(i).getPlayer()); if(bindings.length() == 0) bindings = "[]"; else bindings = bindings.substring(2); - throw new InvalidGdlSchemaException("the topics " + top1 + " and " + top2 + " must be bound to exaclty one position topic, but is bound to " + bindings); + throw new InvalidGdlSchemaException("the topics " + top1 + " and " + top2 + " must be bound to exactly one position topic, but is bound to " + bindings); }else { ArrayList<Topic> positions = new ArrayList<Topic>(); for (Association assoc : posAssocs) {