[isidorus-cvs] r624 - in branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets: base container text
lgiessmann at common-lisp.net
lgiessmann at common-lisp.net
Fri Jul 15 10:00:51 UTC 2011
Author: lgiessmann
Date: Fri Jul 15 03:00:51 2011
New Revision: 624
Log:
gdl-frontend: Widgets: implemented GDL positioning in GdlList
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/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/container/GdlList.java
branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/text/GdlText.java
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 Fri Jul 15 00:55:20 2011 (r623)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TestClass.java Fri Jul 15 03:00:51 2011 (r624)
@@ -33,7 +33,7 @@
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));
gdlPanel = new GdlPanel(null, requestedTopicsToCreate);
- gdlPanel.setPixelSize(100, 100);
+ gdlPanel.setPixelSize(450, 450);
DOM.setStyleAttribute(gdlPanel.getElement(), "backgroundColor", "yellow");
mainPanel.add(gdlPanel);
gdlPanel.setTmEngine(new JtmsTmEngine());
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 Jul 15 00:55:20 2011 (r623)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TmHelper.java Fri Jul 15 03:00:51 2011 (r624)
@@ -1,10 +1,12 @@
package us.isidor.gdl.anaToMia.Widgets.base;
import java.util.ArrayList;
+import java.util.List;
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.Occurrence;
import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Role;
import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.ScopedStub;
import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic;
@@ -315,14 +317,77 @@
// returns all topics that are related to the passed topic via a contains association
public static ArrayList<Topic> topicContains(Topic container) {
- if(container == null) return new ArrayList<Topic>();
-
+ if(container == null) return new ArrayList<Topic>();
TopicMap tm = container.getTopicMap();
- Topic contains = getTopicByPsi(GdlPsis.AssociationType.gdlContains, tm);
+ Topic containsAssocType = 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, containsAssocType, null, visibleObject, containeeRoleType);
+ }
+
+
+ // returns an ordered list of the list items and their index stored in a pair instance
+ public static ArrayList<Pair<Topic, Integer>> listContains(Topic list) throws InvalidGdlSchemaException {
+ if(list == null) return new ArrayList<Pair<Topic,Integer>>();
+ TopicMap tm = list.getTopicMap();
+ Topic containsAssocType = 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);
+ Topic nthElement = getTopicByPsi(GdlPsis.TopicType.gdlNthElement, tm);
+ Topic nthElementRoleType = getTopicByPsi(GdlPsis.RoleType.gdlNthElement, tm);
+
+ ArrayList<Pair<Topic, Topic>> rolePlayertypesAndTypes = new ArrayList<Pair<Topic,Topic>>();
+ rolePlayertypesAndTypes.add(new Pair<Topic, Topic>(visibleObject, containeeRoleType));
+ rolePlayertypesAndTypes.add(new Pair<Topic, Topic>(nthElement, nthElementRoleType));
+ ArrayList<Association> validAssociations = getAssociationsOfTopic(list, containerRoleType, containsAssocType, null, rolePlayertypesAndTypes);
+
+ List<Pair<Topic, Integer>> result = new ArrayList<Pair<Topic,Integer>>();
+ for (Association validAssoc : validAssociations) {
+ Topic idx = validAssoc.getRoles(nthElementRoleType).get(0).getPlayer();
+ JsArray<Occurrence> idxOccs = idx.getOccurrences(tm.getTopicBySubjectIdentifier(tm.createLocator(GdlPsis.OccurrenceType.gdlNthValue)));
+ ArrayList<Occurrence> validIdxOccs = new ArrayList<Occurrence>();
+ for(int i = 0; i != idxOccs.length(); ++i) if(idxOccs.get(i).getScope().length() == 0) validIdxOccs.add(idxOccs.get(i));
+
+ if(validIdxOccs.size() != 1){
+ throw new InvalidGdlSchemaException("the topic " + getAnyIdOfTopic(idx) + " must be bound exaclty once to an occurrence of the type " + GdlPsis.OccurrenceType.gdlNthValue + " but is bound " + validIdxOccs.size() + " times");
+ }else{
+ Occurrence validOcc = validIdxOccs.get(0);
+ if(!validOcc.getValue().toUpperCase().equals("LAST") && !Utils.isDecNumber(validOcc.getValue())){
+ throw new InvalidGdlSchemaException("the topic " + getAnyIdOfTopic(idx) + " must be bound exaclty once to an occurrence of the type " + GdlPsis.OccurrenceType.gdlNthValue + " with a the value \"last\" or <positive integer>, but is " + validOcc.getValue());
+ }
+
+ int idxValue = -1; // -1 represents last
+ if(!validOcc.getValue().toUpperCase().equals("LAST")) idxValue = Integer.valueOf(validOcc.getValue());
+ Topic item = validAssoc.getRoles(containeeRoleType).get(0).getPlayer();
+
+ if(result.size() == 0){
+ result.add(new Pair<Topic, Integer>(item, idxValue));
+ }else {
+ for(int i = 0; i != result.size(); ++i){
+ if (result.get(i).getSecond() == idxValue){
+ String idxStr = idxValue == -1 ? "last" : "" + idxValue;
+ throw new InvalidGdlSchemaException("the list " + getAnyIdOfTopic(list) + " contains more than one item with the idx " + idxStr);
+ }
+
+ if(result.get(i).getSecond() > idxValue){
+ result.add(i, new Pair<Topic, Integer>(item, idxValue));
+ break;
+ }
+
+ if(i == result.size() - 1){
+ result.add(new Pair<Topic, Integer>(item, idxValue));
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ ArrayList<Pair<Topic, Integer>> orderedResult = new ArrayList<Pair<Topic,Integer>>(result);
+ return orderedResult;
}
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 Jul 15 00:55:20 2011 (r623)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/Utils.java Fri Jul 15 03:00:51 2011 (r624)
@@ -17,4 +17,12 @@
return true;
}
+
+
+ // returns true if the string consists only of digits
+ public static boolean isDecNumber(String str){
+ if(str == null) return false;
+ for(int i = 0; i != str.length(); ++i) if(!Character.isDigit(str.charAt(i))) return false;
+ return true;
+ }
}
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 Fri Jul 15 00:55:20 2011 (r623)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/container/GdlList.java Fri Jul 15 03:00:51 2011 (r624)
@@ -35,6 +35,7 @@
import us.isidor.gdl.anaToMia.Widgets.environment.ActiveStyleHandler;
import us.isidor.gdl.anaToMia.Widgets.environment.ExecutionException;
import us.isidor.gdl.anaToMia.Widgets.environment.FocusStyleHandler;
+import us.isidor.gdl.anaToMia.Widgets.environment.GdlInstantiator;
import us.isidor.gdl.anaToMia.Widgets.environment.HoverStyleHandler;
import us.isidor.gdl.anaToMia.Widgets.environment.InvalidGdlSchemaException;
import us.isidor.gdl.anaToMia.Widgets.environment.Pair;
@@ -43,6 +44,9 @@
public class GdlList extends GdlVisibleObject implements IGdlContainer {
+ private ArrayList<Pair<Topic, Integer>> storedItems = null;
+
+
// some constructors
protected GdlList() throws InvalidGdlSchemaException, ExecutionException {
super();
@@ -53,6 +57,19 @@
public GdlList(Topic tmRepresentative) throws InvalidGdlSchemaException, ExecutionException{
super(tmRepresentative);
this.createList();
+
+ ArrayList<Topic> objectsContained = this.contains();
+
+ Topic currentTopic = objectsContained.size() == 0 ? null : objectsContained.get(0);
+ Topic lastTopic = null;
+
+ if(objectsContained.size() != 0){
+ for(int i = 1; i != objectsContained.size(); ++i){
+ this.append(lastTopic, currentTopic);
+ lastTopic = currentTopic;
+ currentTopic = objectsContained.get(i);
+ }
+ }
}
@@ -261,7 +278,7 @@
}
- // returns the position index of the item, that was psecified when
+ // returns the position index of the item, that was specified when
// inserting the passed ListItem
public int indexOfItem(ListItem item){
for (Pair<ListItem, Integer> pair : this.itemsAndIndexes) {
@@ -314,7 +331,7 @@
}
- // this class wrapps a list item, i.e. a div element within a li element
+ // this class wraps a list item, i.e. a div element within a li element
protected class ListItem{
private Element liElement = null;
private Element divElement = null;
@@ -379,15 +396,36 @@
@Override
public GdlVisibleObject append(Topic ancestor, Topic current) throws InvalidGdlSchemaException, ExecutionException {
// TODO Auto-generated method stub
+ if(this.subElements.size() == 0) return null;
+ if(this.storedItems == null) this.storedItems = this.containsItems();
- return null;
+ // the ancestor element can be ignore, since the current idx can be looked up
+ // from the storedItem array list directly
+ int idx = -1;
+ for (Pair<Topic, Integer> pair : this.storedItems) if(pair.getFirst().equals(current)) idx = pair.getSecond();
+
+ ListWidget list = (ListWidget)this.subElements.get(0);
+ GdlVisibleObject newObj = GdlInstantiator.instantiate(current);
+ list.insertWidget(newObj, idx);
+
+ return newObj;
}
-
+
// returns all topics that are bound to this tm representative topic via a
- // contains association
+ // contains association i an ordered list
@Override
public ArrayList<Topic> contains() throws InvalidGdlSchemaException {
- return TmHelper.topicContains(this.tmRepresentative);
+ ArrayList<Topic> result = new ArrayList<Topic>();
+ for (Pair<Topic, Integer> pair : TmHelper.listContains(super.getTmRepresentative()))
+ result.add(pair.getFirst());
+
+ return result;
+ }
+
+
+ // returns an ordered list of items with their index
+ public ArrayList<Pair<Topic, Integer>> containsItems() throws InvalidGdlSchemaException{
+ return TmHelper.listContains(super.getTmRepresentative());
}
}
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/text/GdlText.java
==============================================================================
--- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/text/GdlText.java Fri Jul 15 00:55:20 2011 (r623)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/text/GdlText.java Fri Jul 15 03:00:51 2011 (r624)
@@ -48,7 +48,6 @@
super(tmRepresentative);
// TODO: create a text element for each TM-elem
this.createNewTextArea(); // TODO: remove only for debugging
- this.createNewTextArea(); // TODO: remove only for debugging
}
More information about the Isidorus-cvs
mailing list