[isidorus-cvs] r776 - in branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets: base text view
lgiessmann at common-lisp.net
lgiessmann at common-lisp.net
Tue Aug 23 18:06:16 UTC 2011
Author: lgiessmann
Date: Tue Aug 23 11:06:14 2011
New Revision: 776
Log:
gdl-frontend: Widgets: implemented the topic representation => gdl:display-by + gdl:preferred-scope
Modified:
branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/IGdlHasValueGroup.java
branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/PSIs.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/text/GdlText.java
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/base/IGdlHasValueGroup.java
==============================================================================
--- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/IGdlHasValueGroup.java Tue Aug 23 09:03:08 2011 (r775)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/IGdlHasValueGroup.java Tue Aug 23 11:06:14 2011 (r776)
@@ -58,7 +58,22 @@
// returns all topics of a topic map that can be used for a defined constraint
public ArrayList<Topic> getTmValuesForConstraint() throws InvalidGdlSchemaException, ExecutionException;
+
// returns a regular expression that must be satisfied to satisfy the
// constraint, that is bound to the element's value group instance
public String getLiteralValueForConstraint() throws InvalidGdlSchemaException;
+
+
+ // returns the Topic that represents the constraint, which is used to
+ // determine the topic's display-schema
+ public Topic getDisplayByConstraintOfValueGroup() throws InvalidGdlSchemaException;
+
+
+ // Returns a list of topics that represent the topic's preferred scope(s)
+ public ArrayList<Topic> getPreferredScopeOfValueGroup() throws InvalidGdlSchemaException;
+
+
+ // Returns a string that represents the topic as a string corresponding
+ // to the defined display-by and preferred-scope topics
+ public String getTopicRepresentation(Topic topicToRepresent, Topic displayBy, ArrayList<Topic> preferredScopes) throws InvalidGdlSchemaException;
}
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/PSIs.java
==============================================================================
--- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/PSIs.java Tue Aug 23 09:03:08 2011 (r775)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/PSIs.java Tue Aug 23 11:06:14 2011 (r776)
@@ -222,6 +222,8 @@
public final static String gdlTopicViewBinding = gdl + "topic-view-binding";
public final static String gdlAssociationViewBinding = gdl + "association-view-binding";
public final static String gdlValueBinding = gdl + "value-binding";
+ public final static String gdlDisplayBy = gdl + "display-by";
+ public final static String gdlPrefferedScope = gdl + "preferred-scope";
}
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 Tue Aug 23 09:03:08 2011 (r775)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TmHelper.java Tue Aug 23 11:06:14 2011 (r776)
@@ -5,6 +5,7 @@
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.Name;
import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Occurrence;
import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Role;
import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.ScopedStub;
@@ -13,6 +14,7 @@
import us.isidor.gdl.anaToMia.Widgets.environment.ExecutionException;
import us.isidor.gdl.anaToMia.Widgets.environment.InvalidGdlSchemaException;
import us.isidor.gdl.anaToMia.Widgets.environment.Pair;
+import us.isidor.gdl.anaToMia.Widgets.environment.Pattern;
import us.isidor.gdl.anaToMia.Widgets.environment.TopicIdentifierTypes;
import com.google.gwt.core.client.JsArray;
@@ -1058,4 +1060,106 @@
else if(occs.length() == 0) return null;
else return occs.get(0);
}
+
+
+ // Returns an array of topics that represent the preffered scope that is set
+ // to a tm-value or value-group instance
+ public static ArrayList<Topic> getPrefferedScopesForTopicOf(Topic tmValueOrValueGroup){
+ if(tmValueOrValueGroup == null) return new ArrayList<Topic>();
+
+ TopicMap tm = tmValueOrValueGroup.getTopicMap();
+ Topic descriptorRoleType = getTopicByPsi(PSIs.RoleType.gdlDescriptor, tm);
+ Topic preferredScopeAssocType = getTopicByPsi(PSIs.AssociationType.gdlPrefferedScope, tm);
+ Topic tmConstructRoleType = getTopicByPsi(PSIs.RoleType.gdlTmConstruct, tm);
+ return getOtherPlayerOfBinaryAssociation(tmValueOrValueGroup, descriptorRoleType, preferredScopeAssocType, null, tmConstructRoleType);
+ }
+
+
+ // Returns the topic that is bound to the passed tm-value or value-group topic
+ // and represents the representation schema of the topics that must be displayed
+ public static Topic getDisplayByTopicOf(Topic tmValueOrvalueGroup) throws InvalidGdlSchemaException{
+ if(tmValueOrvalueGroup == null) return null;
+
+ TopicMap tm = tmValueOrvalueGroup.getTopicMap();
+ Topic displayByAssocType = getTopicByPsi(PSIs.AssociationType.gdlDisplayBy, tm);
+ Topic descriptorRoleType = getTopicByPsi(PSIs.RoleType.gdlDescriptor, tm);
+ Topic tmConstruct = getTopicByPsi(PSIs.RoleType.gdlTmConstruct, tm);
+ Topic subjectIdentifierConstraintType = getTopicByPsi(PSIs.TMCL.tmclSubjectIdentifierConstraint, tm);
+ Topic subjectLocatorConstraintType = getTopicByPsi(PSIs.TMCL.tmclSubjectLocatorConstraint, tm);
+ Topic itemIdentifierConstraintType = getTopicByPsi(PSIs.TMCL.tmclItemIdentifierConstraint, tm);
+ Topic topicNameConstraintType = getTopicByPsi(PSIs.TMCL.tmclTopicNameConstraint, tm);
+ ArrayList<Topic> resultPsi = getOtherPlayerOfBinaryAssociation(tmValueOrvalueGroup, descriptorRoleType, displayByAssocType, null, tmConstruct, subjectIdentifierConstraintType);
+ ArrayList<Topic> resultSl = getOtherPlayerOfBinaryAssociation(tmValueOrvalueGroup, descriptorRoleType, displayByAssocType, null, tmConstruct, subjectLocatorConstraintType);
+ ArrayList<Topic> resultIi = getOtherPlayerOfBinaryAssociation(tmValueOrvalueGroup, descriptorRoleType, displayByAssocType, null, tmConstruct, itemIdentifierConstraintType);
+ ArrayList<Topic> resultName = getOtherPlayerOfBinaryAssociation(tmValueOrvalueGroup, descriptorRoleType, displayByAssocType, null, tmConstruct, topicNameConstraintType);
+
+ ArrayList<Topic> result = Utils.merge(Utils.merge(Utils.merge(resultPsi, resultSl), resultIi), resultName);
+
+ if(result.size() > 1) throw new InvalidGdlSchemaException("the topic " + getAnyIdOfTopic(tmValueOrvalueGroup) + " must be bound none or once to a tmcl:constraint via a " + PSIs.AssociationType.gdlDisplayBy + " assciation, but is: " + result.size());
+ else if(result.size() == 1) return result.get(0);
+ else return null;
+ }
+
+
+ // Returns a string that represents the topic. The returned string must
+ // correspond to the passed diplayBy and preferredScopes data.
+ public static String getTopicRepresentation(Topic topicToRepresent, Topic displayBy, ArrayList<Topic> preferredScopes) throws InvalidGdlSchemaException {
+ if(topicToRepresent == null) return null;
+
+ if(displayBy == null){
+ if(topicToRepresent.getSubjectIdentifiers().length() == 0) throw new InvalidGdlSchemaException("the topic " + getAnyIdOfTopic(topicToRepresent) + " is not bound to a " + PSIs.AssociationType.gdlDisplayBy + " association and is not bound to a Subject-Identifier - but one of them must be set");
+ else return topicToRepresent.getSubjectIdentifiers().get(0).getReference();
+ } else {
+ TopicMap tm = topicToRepresent.getTopicMap();
+ Topic subjectIdentifierConstraint = getTopicByPsi(PSIs.TMCL.tmclSubjectIdentifierConstraint, tm);
+ Topic subjectLocatorConstraint = getTopicByPsi(PSIs.TMCL.tmclSubjectLocatorConstraint, tm);
+ Topic itemIdentifierConstraint = getTopicByPsi(PSIs.TMCL.tmclItemIdentifierConstraint, tm);
+ Topic topicNameConstraint = getTopicByPsi(PSIs.TMCL.tmclTopicNameConstraint, tm);
+
+ String result = null;
+ if(isInstanceOf(displayBy, topicNameConstraint)){
+ Topic nameType = TmHelper.getConstrainedStatement(displayBy);
+ ArrayList<Name> names = new ArrayList<Name>();
+ for(int i = 0; i != topicToRepresent.getNames(nameType).length(); ++i)
+ names.add(topicToRepresent.getNames(nameType).get(i));
+
+ if(preferredScopes != null && preferredScopes.size() != 0){
+ // TODO: implement
+ }
+ if(names.size() != 0) result = names.get(0).getValue();
+ } else if(isInstanceOf(displayBy, subjectIdentifierConstraint)){
+ Pattern rex = new Pattern(TmHelper.getLiteralValueForConstraint(displayBy));
+ for(int i = 0; i != topicToRepresent.getSubjectIdentifiers().length(); ++i){
+ String psi = topicToRepresent.getSubjectIdentifiers().get(i).getReference();
+ if(rex.matches(psi)){
+ result = psi;
+ break;
+ }
+ }
+ } else if(isInstanceOf(displayBy, subjectLocatorConstraint)){
+ Pattern rex = new Pattern(TmHelper.getLiteralValueForConstraint(displayBy));
+ for(int i = 0; i != topicToRepresent.getSubjectLocators().length(); ++i){
+ String psi = topicToRepresent.getSubjectLocators().get(i).getReference();
+ if(rex.matches(psi)){
+ result = psi;
+ break;
+ }
+ }
+ } else if(isInstanceOf(displayBy, itemIdentifierConstraint)){
+ Pattern rex = new Pattern(TmHelper.getLiteralValueForConstraint(displayBy));
+ for(int i = 0; i != topicToRepresent.getItemIdentifiers().length(); ++i){
+ String psi = topicToRepresent.getItemIdentifiers().get(i).getReference();
+ if(rex.matches(psi)){
+ result = psi;
+ break;
+ }
+ }
+ } else {
+ throw new InvalidGdlSchemaException("the topic " + getAnyIdOfTopic(displayBy) + " is not a valid representation schema type");
+ }
+
+ if(result == null) throw new InvalidGdlSchemaException("");
+ else return result;
+ }
+ }
}
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 Tue Aug 23 09:03:08 2011 (r775)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/text/GdlText.java Tue Aug 23 11:06:14 2011 (r776)
@@ -57,6 +57,11 @@
protected boolean tmValueTopicsSet = false;
protected ArrayList<Topic> literalValueTopics = new ArrayList<Topic>();
protected boolean literalValueTopicsSet = false;
+ protected ArrayList<Topic> preferredScopes = new ArrayList<Topic>();
+ protected boolean prefferedScopesSet = false;
+ protected Topic displayByConstraint = null;
+ protected boolean displayByConstraintSet = false;
+
// some constructors
protected GdlText() throws InvalidGdlSchemaException, ExecutionException {
@@ -124,13 +129,15 @@
Topic occurrenceType = TmHelper.getConstrainedStatement(this.getConstraint());
for(int i = 0; i != ((Topic)this.receivedData).getOccurrences(occurrenceType).length(); ++i)
this.createNewTextArea().setText(((Topic)this.receivedData).getOccurrences(occurrenceType).get(i).getValue());
+ } else if(TmHelper.isInstanceOf(this.getConstraint(), PSIs.TopicType.gdlRolePlayer)){
+ this.createNewTextArea().setText("gdl:Role-Player instance");
}
- // TODO: implement type, variant, datatype, association, ... constraints
+ // TODO: implement type, variant, datatype, associations, roles, ... constraints
}
// sets the field for the set default value or sets at least one empty field
- public void setDefaultValue() throws InvalidGdlSchemaException, ExecutionException {
+ protected void setDefaultValue() throws InvalidGdlSchemaException, ExecutionException {
if(this.getDefaultLiteralValue() != null && this.getDefaultTmValue() != null) throw new InvalidGdlSchemaException("the topic " + TmHelper.getAnyIdOfTopic(this.getValueGroup()) + " must be bound to maximal one " + PSIs.TopicType.gdlDefaultValue + ", but is: 2");
if(this.getDefaultLiteralValue() != null){
@@ -1040,4 +1047,34 @@
public String getLiteralValueForConstraint() throws InvalidGdlSchemaException {
return TmHelper.getLiteralValueForConstraint(this.getConstraint());
}
+
+
+ @Override
+ public Topic getDisplayByConstraintOfValueGroup() throws InvalidGdlSchemaException {
+ if(this.displayByConstraintSet){
+ return this.displayByConstraint;
+ } else {
+ this.displayByConstraintSet = true;
+ this.displayByConstraint = TmHelper.getDisplayByTopicOf(this.getValueGroup());
+ return this.displayByConstraint;
+ }
+ }
+
+
+ @Override
+ public ArrayList<Topic> getPreferredScopeOfValueGroup() throws InvalidGdlSchemaException {
+ if(this.prefferedScopesSet){
+ return this.preferredScopes;
+ } else {
+ this.prefferedScopesSet = true;
+ this.preferredScopes = TmHelper.getPrefferedScopesForTopicOf(this.getValueGroup());
+ return this.preferredScopes;
+ }
+ }
+
+
+ @Override
+ public String getTopicRepresentation(Topic topicToRepresent, Topic displayBy, ArrayList<Topic> preferredScopes) throws InvalidGdlSchemaException {
+ return TmHelper.getTopicRepresentation(topicToRepresent, displayBy, preferredScopes);
+ }
}
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 Tue Aug 23 09:03:08 2011 (r775)
+++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlAssociationView.java Tue Aug 23 11:06:14 2011 (r776)
@@ -1,7 +1,6 @@
package us.isidor.gdl.anaToMia.Widgets.view;
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.Role;
@@ -28,10 +27,30 @@
private ArrayList<Pair<Pair<Topic, Topic>, Pair<Topic, Topic>>> validRoleCombinations = new ArrayList<Pair<Pair<Topic,Topic>,Pair<Topic,Topic>>>();
private boolean validRoleCombinationsSet = false;
+
+ protected GdlAssociationView(){
+ super();
+ }
+
public GdlAssociationView(Topic tmRepresentative, Topic receivedData) throws InvalidGdlSchemaException, ExecutionException {
- super(tmRepresentative, receivedData);
+ this();
+ this.tmRepresentative = tmRepresentative;
+ this.tm = this.tmRepresentative.getTopicMap();
+ this.receivedData = receivedData;
+ this.setId(this.getId());
+ this.setGdlStyle();
if(this instanceof GdlEditorAssociationView) this.associationsToRepresent = this.filterAssociations();
+
+ ArrayList<Topic> objectsContained = this.contains();
+
+ Topic currentTopic = this.getStartElement(objectsContained);
+ Topic lastTopic = super.getTmRepresentative();
+ while(currentTopic != null){
+ this.append(lastTopic, currentTopic);
+ lastTopic = currentTopic;
+ currentTopic = TmHelper.getNextContainee(currentTopic, objectsContained);
+ }
}
More information about the Isidorus-cvs
mailing list