Author: lgiessmann Date: Thu Jul 14 00:28:35 2011 New Revision: 615
Log: gdl-frontend: Widgets: implemented some helper methods that returns the start topic element of a container element and searches the descendant topic element of a containee topic
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPsis.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/IGdlContainer.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/container/GdlList.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlUnit.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlView.java
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPsis.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPsis.java Wed Jul 13 12:32:30 2011 (r614) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPsis.java Thu Jul 14 00:28:35 2011 (r615) @@ -1,16 +1,5 @@ package us.isidor.gdl.anaToMia.Widgets.base;
-import java.util.ArrayList; -import com.google.gwt.core.client.JsArray; -import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Association; -import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Construct; -import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Locator; -import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Role; -import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.ScopedStub; -import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; -import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMap; -import us.isidor.gdl.anaToMia.Widgets.environment.Pair; -import us.isidor.gdl.anaToMia.Widgets.environment.TopicIdentifierTypes;
public class GdlPsis {
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/IGdlContainer.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/IGdlContainer.java Wed Jul 13 12:32:30 2011 (r614) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/IGdlContainer.java Thu Jul 14 00:28:35 2011 (r615) @@ -1,7 +1,11 @@ package us.isidor.gdl.anaToMia.Widgets.base;
+import java.util.ArrayList; import us.isidor.gdl.anaToMia.Widgets.environment.InvalidGdlSchemaException; +import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; +
public interface IGdlContainer { public void append(GdlVisibleObject widget) throws InvalidGdlSchemaException; + public ArrayList<Topic> contains() throws InvalidGdlSchemaException; }
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 Jul 13 12:32:30 2011 (r614) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TmHelper.java Thu Jul 14 00:28:35 2011 (r615) @@ -13,6 +13,7 @@ import us.isidor.gdl.anaToMia.Widgets.base.GdlPsis.RoleType; import us.isidor.gdl.anaToMia.Widgets.base.GdlPsis.TMDM; import us.isidor.gdl.anaToMia.Widgets.base.GdlPsis.TopicType; +import us.isidor.gdl.anaToMia.Widgets.environment.InvalidGdlSchemaException; import us.isidor.gdl.anaToMia.Widgets.environment.Pair; import us.isidor.gdl.anaToMia.Widgets.environment.TopicIdentifierTypes; import com.google.gwt.core.client.JsArray; @@ -296,4 +297,74 @@ return result; } + + + // returns all topics that are related to the passed topic via a contains assciation + public static ArrayList<Topic> topicContains(Topic container) { + if(container == null) return new ArrayList<Topic>(); + + TopicMap tm = container.getTopicMap(); + Topic contains = getTopicByPsi(GdlPsis.AssociationType.gdlContains, tm); + Topic containerRoleType = getTopicByPsi(GdlPsis.RoleType.gdlContainer, tm); + Topic visibleObject = getTopicByPsi(GdlPsis.TopicType.gdlVisibleObject, tm); + Topic containeeRoleType = getTopicByPsi(GdlPsis.RoleType.gdlContainee, tm); + return getOtherPlayerOfBinaryAssociation(container, containerRoleType, contains, null, visibleObject, containeeRoleType); + } + + + // returns the topic that represetns the first item of a container, that means this item is + // not bound to an association o fthe type position in a role of the type descendant + public static Topic getFirstContainee(ArrayList<Topic> containees) throws InvalidGdlSchemaException { + if(containees == null || containees.size() == 0) return null; + + ArrayList<Topic> topicsWithoutAncestor = new ArrayList<Topic>(); + TopicMap tm = containees.get(0).getTopicMap(); + Topic descendant = getTopicByPsi(GdlPsis.RoleType.gdlDescendant, tm); + Topic position = getTopicByPsi(GdlPsis.AssociationType.gdlPosition, tm); + Topic visibleObject = getTopicByPsi(GdlPsis.TopicType.gdlVisibleObject, tm); + Topic ancestor = getTopicByPsi(GdlPsis.RoleType.gdlAncestor, tm); + for (Topic containee : containees) + if(null == getOtherPlayerOfBinaryAssociation(containee, descendant, position, null, visibleObject, ancestor)) topicsWithoutAncestor.add(containee); + + if(topicsWithoutAncestor.size() > 1){ + String values = ""; + for (Topic topic : topicsWithoutAncestor) values += ", " + getAnyIdOfTopic(topic); + if(values.length() >= 2) values = values.substring(2); + throw new InvalidGdlSchemaException("only one topic can be set as the start element of a container, but found: " + values); + } else if(topicsWithoutAncestor.size() == 1){ + return topicsWithoutAncestor.get(0); + } else { + return null; + } + } + + + // returns the descendant of the current topic related via an contains association + public static Topic getNextContainer(Topic current, ArrayList<Topic> containees) throws InvalidGdlSchemaException{ + if (current == null || containees == null || containees.size() == 0) return null; + + TopicMap tm = current.getTopicMap(); + Topic descendant = getTopicByPsi(GdlPsis.RoleType.gdlDescendant, tm); + Topic position = getTopicByPsi(GdlPsis.AssociationType.gdlPosition, tm); + Topic visibleObject = getTopicByPsi(GdlPsis.TopicType.gdlVisibleObject, tm); + Topic ancestor = getTopicByPsi(GdlPsis.RoleType.gdlAncestor, tm); + ArrayList<Topic> descendants = getOtherPlayerOfBinaryAssociation(current, ancestor, position, null, visibleObject, descendant); + + ArrayList<Topic> descendantsContainedInContainees = new ArrayList<Topic>(); + for (Topic topic : descendants) + if(containees.contains(topic) && !descendantsContainedInContainees.contains(topic)) descendantsContainedInContainees.add(topic); + + + if(descendantsContainedInContainees.size() > 1){ + String top = getAnyIdOfTopic(current); + String bindings = ""; + for (Topic topic : descendantsContainedInContainees) bindings += ", " + getAnyIdOfTopic(topic); + if(bindings.length() >= 2) bindings = bindings.substring(2); + throw new InvalidGdlSchemaException("the topic " + top + " must be bound to none or one descendant topics, but is bound to " + bindings); + }else if(descendantsContainedInContainees.size() == 1){ + return descendantsContainedInContainees.get(0); + }else{ + return null; + } + } }
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlList.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlList.java Wed Jul 13 12:32:30 2011 (r614) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlList.java Thu Jul 14 00:28:35 2011 (r615) @@ -30,6 +30,8 @@ import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; import us.isidor.gdl.anaToMia.Widgets.base.GdlPsis; import us.isidor.gdl.anaToMia.Widgets.base.GdlVisibleObject; +import us.isidor.gdl.anaToMia.Widgets.base.IGdlContainer; +import us.isidor.gdl.anaToMia.Widgets.base.TmHelper; import us.isidor.gdl.anaToMia.Widgets.environment.ActiveStyleHandler; import us.isidor.gdl.anaToMia.Widgets.environment.ExecutionException; import us.isidor.gdl.anaToMia.Widgets.environment.FocusStyleHandler; @@ -40,7 +42,7 @@ import us.isidor.gdl.anaToMia.Widgets.value.ListStyleTypeValue;
-public class GdlList extends GdlVisibleObject{ +public class GdlList extends GdlVisibleObject implements IGdlContainer { // some constructors protected GdlList() throws InvalidGdlSchemaException, ExecutionException { super(); @@ -372,4 +374,19 @@ } } } + + + @Override + public void append(GdlVisibleObject widget) throws InvalidGdlSchemaException { + // TODO Auto-generated method stub + + } + + + // returns all topics that are bound to this tm representative topic via a + // contains association + @Override + public ArrayList<Topic> contains() throws InvalidGdlSchemaException { + return TmHelper.topicContains(this.tmRepresentative); + } }
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlUnit.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlUnit.java Wed Jul 13 12:32:30 2011 (r614) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlUnit.java Thu Jul 14 00:28:35 2011 (r615) @@ -31,6 +31,7 @@ import us.isidor.gdl.anaToMia.Widgets.base.GdlPsis; import us.isidor.gdl.anaToMia.Widgets.base.GdlVisibleObject; import us.isidor.gdl.anaToMia.Widgets.base.IGdlContainer; +import us.isidor.gdl.anaToMia.Widgets.base.TmHelper; import us.isidor.gdl.anaToMia.Widgets.environment.ActiveStyleHandler; import us.isidor.gdl.anaToMia.Widgets.environment.ExecutionException; import us.isidor.gdl.anaToMia.Widgets.environment.FocusStyleHandler; @@ -1256,6 +1257,14 @@ // TODO: implement } + + // returns all topics that are bound to this tm representative topic via a + // contains association + @Override + public ArrayList<Topic> contains() throws InvalidGdlSchemaException { + return TmHelper.topicContains(this.tmRepresentative); + } + // wraps a fieldset with a legend item that represent a group-element protected class UnitWidget extends Composite implements HasFocusHandlers, HasBlurHandlers, HasMouseOutHandlers, HasMouseOverHandlers, HasMouseDownHandlers, HasMouseUpHandlers{ @@ -1541,5 +1550,5 @@ return true; } } - } + } } \ No newline at end of file
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlView.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlView.java Wed Jul 13 12:32:30 2011 (r614) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlView.java Thu Jul 14 00:28:35 2011 (r615) @@ -90,6 +90,14 @@ // TODO: implement // TODO: use GdlInstantiator } + + + // returns all topics that are bound to this tm representative topic via a + // contains association + @Override + public ArrayList<Topic> contains() throws InvalidGdlSchemaException{ + return TmHelper.topicContains(this.tmRepresentative); + }
public abstract TopicMap getContent();