Author: lgiessmann Date: Mon Aug 29 08:22:42 2011 New Revision: 801
Log: gdl-frontend: Widgets: implemented the infrastructure for GdlVisibleObject.getContent(Construct carrier)
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPanel.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.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/button/GdlDeleteButton.java 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/GdlDefaultTopicView.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlTopicView.java
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPanel.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPanel.java Mon Aug 29 02:32:41 2011 (r800) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPanel.java Mon Aug 29 08:22:42 2011 (r801) @@ -262,7 +262,7 @@ // data by using the view's getContent method. public ArrayList<Pair<Construct, TopicMapsTypes>> getContent() throws Exception { try{ - return this.view.getContent(); + return this.view.getContent(null); }catch(Exception e){ for (IOnErrorCallback handler : localOnErrorContainer) { handler.onError(GdlErrorTypes.TopicMapsGenerationError, e);
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java Mon Aug 29 02:32:41 2011 (r800) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java Mon Aug 29 08:22:42 2011 (r801) @@ -2208,12 +2208,77 @@ // returns the strings of the control that are entered/selected + // returns the strings of the control that are entered/selected public abstract ArrayList<String> getSelectedValues(); // returns the actual data that is hold by this instance - public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(){ - // TODO: implement - return null; + public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier) throws InvalidGdlSchemaException, ExecutionException { + ArrayList<Pair<Construct, TopicMapsTypes>> result = new ArrayList<Pair<Construct,TopicMapsTypes>>(); + if(carrier == null || this.getRootConstraint() == null) return result; + + //TODO: finalise + for (int idx = 0; idx != this.getSelectedValues().size(); ++idx){ + if(TmHelper.isInstanceOf(this.getConstraint(), PSIs.TMCL.tmclItemIdentifierConstraint)){ + + } else if (TmHelper.isInstanceOf(this.getRootConstraint(), PSIs.TMCL.tmclSubjectIdentifierConstraint)){ + + } else if (TmHelper.isInstanceOf(this.getRootConstraint(), PSIs.TMCL.tmclSubjectLocatorConstraint)){ + + } else if (TmHelper.isInstanceOf(this.getRootConstraint(), PSIs.TMCL.tmclTopicNameConstraint)){ + + } else if (TmHelper.isInstanceOf(this.getRootConstraint(), PSIs.TMCL.tmclVariantNameConstraint)){ + + } else if (TmHelper.isInstanceOf(this.getRootConstraint(), PSIs.TMCL.tmclTopicOccurrenceConstraint)){ + if(!(carrier instanceof Topic)) throw new ExecutionException("the constraint " + TmHelper.getAnyIdOfTopic(this.getRootConstraint()) + " must be bound to a Topic, but is: " + carrier.getClass()); + Topic occurrenceType = TmHelper.getConstrainedStatement(this.getConstraint()); + JsArray<Occurrence> occurrences = ((Topic)carrier).getOccurrences(occurrenceType); + + Occurrence changedOccurrence = null; + if(this.getRootConstraint().equals(this.getConstraint())){ + if(occurrences.length() > idx){ + changedOccurrence = occurrences.get(idx); + changedOccurrence.setValue(this.getSelectedValues().get(idx)); + }else { + changedOccurrence = ((Topic)carrier).createOccurrence(occurrenceType, this.getSelectedValues().get(idx), null, null); + } + } // TODO: Type, Role-Player, ... + + result.add(new Pair<Construct, TopicMapsTypes>(changedOccurrence, TopicMapsTypes.Occurrence)); + } else if (TmHelper.isInstanceOf(this.getRootConstraint(), PSIs.TMCL.tmclTopicRoleConstraint)){ + if(!(carrier instanceof Association)) throw new ExecutionException("the constraint " + TmHelper.getAnyIdOfTopic(this.getRootConstraint()) + " must be bound to an Association, but is: " + carrier.getClass()); + Pair<Topic, Topic> roleAndPlayerType = TmHelper.getConstrainedRoleAndPlayerTypeOfConstraint(this.getRootConstraint()); + Topic roleType = roleAndPlayerType.getFirst(); + Topic playerType = roleAndPlayerType.getSecond(); + + JsArray<Role> typedRoles = ((Association)carrier).getRoles(roleType); + ArrayList<Role> roles = new ArrayList<Role>(); + for(int i = 0; i != typedRoles.length(); ++i) + if(TmHelper.isInstanceOf(typedRoles.get(i).getPlayer(), playerType)) roles.add(typedRoles.get(i)); + + Role changedRole = null; + if(TmHelper.isInstanceOf(this.getConstraint(), PSIs.TMCL.tmclReifierConstraint)){ + // TODO: implement + } else if(TmHelper.isInstanceOf(this.getConstraint(), PSIs.TMCL.tmclItemIdentifierConstraint)){ + // TODO: implement + } else if(TmHelper.isInstanceOf(this.getConstraint(), PSIs.GDL.TopicType.gdlRolePlayer)){ + if(roles.size() > idx){ + changedRole = roles.get(idx); + changedRole.setPlayer(TmHelper.getTopicFromStringRepresentation(this.getSelectedValues().get(idx), this.getValueGroup())); + } else { + changedRole = ((Association)carrier).createRole(roleType, TmHelper.getTopicFromStringRepresentation(this.getSelectedValues().get(idx), this.getDisplayByOfValueGroup())); + } + } else if(TmHelper.isInstanceOf(this.getConstraint(), PSIs.GDL.TopicType.gdlType)){ + // TODO: implement + } else { + throw new InvalidGdlSchemaException("the root constraint must be bound to one of: " + PSIs.TMCL.tmclReifierConstraint + ", " + PSIs.TMCL.tmclItemIdentifierConstraint + ", " + PSIs.GDL.TopicType.gdlRolePlayer + ", " + PSIs.GDL.TopicType.gdlType + ", but is: " + TmHelper.getAnyIdOfTopic(this.getConstraint())); + } + result.add(new Pair<Construct, TopicMapsTypes>(changedRole, TopicMapsTypes.Role)); + } else { + throw new InvalidGdlSchemaException("the constraint " + TmHelper.getAnyIdOfTopic(this.getRootConstraint()) + " is not supported"); + } + } + + return result; } }
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 Mon Aug 29 02:32:41 2011 (r800) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TmHelper.java Mon Aug 29 08:22:42 2011 (r801) @@ -1282,4 +1282,26 @@ return result; } + + + // Returns the topic that is rperesentated by the passed string corresponding + // to the passed representationSchema + public static Topic getTopicFromStringRepresentation(String representation, Topic valueGroup) throws ExecutionException, InvalidGdlSchemaException { + if(representation == null || valueGroup == null) return null; + + ArrayList<Topic> tmValues = getTmValuesForConstraint(getConstraintOfValueGroup(valueGroup), valueGroup); + for (Topic tmValue : tmValues) { + if(getTopicRepresentation(tmValue, getDisplayByTopicOf(valueGroup), getPrefferedScopesForTopicOf(valueGroup)).equals(representation)) return tmValue; + } + + tmValues = getTmValues(valueGroup); + for (Topic tmValue : tmValues) { + ArrayList<Topic> rawValues = getValuesForTmValue(tmValue); + for (Topic rawValue : rawValues) { + if(getTopicRepresentation(tmValue, getDisplayByTopicOf(valueGroup), getPrefferedScopesForTopicOf(valueGroup)).equals(representation)) return rawValue; + } + } + + throw new ExecutionException("no topic found for the representation string: " + representation); + } }
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlDeleteButton.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlDeleteButton.java Mon Aug 29 02:32:41 2011 (r800) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlDeleteButton.java Mon Aug 29 08:22:42 2011 (r801) @@ -1,11 +1,9 @@ package us.isidor.gdl.anaToMia.Widgets.button;
- import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; - import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Construct; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; import us.isidor.gdl.anaToMia.Widgets.base.GdlVisibleObject; @@ -37,7 +35,12 @@ @Override public void onClick(ClickEvent event) { - Window.alert("content: " + this.owner.getContent()); + try{ + Window.alert("content: " + this.owner.getGdlParent().getContent(null)); + // TODO: implement + }catch(Exception e){ + Window.alert("caught: " + e.getMessage()); + } } } }
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 Mon Aug 29 02:32:41 2011 (r800) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlAssociationView.java Mon Aug 29 08:22:42 2011 (r801) @@ -1,7 +1,6 @@ package us.isidor.gdl.anaToMia.Widgets.view;
import java.util.ArrayList; - import com.google.gwt.core.client.JsArray; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.VerticalPanel; @@ -10,6 +9,7 @@ import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Construct; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Occurrence; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; +import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMap; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMapsTypes; import us.isidor.gdl.anaToMia.Widgets.base.ButtonableObject; import us.isidor.gdl.anaToMia.Widgets.base.GdlVisibleObject; @@ -181,14 +181,25 @@ return this.validRoleCombinations; } } - + @Override - public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(){ - // TODO: implement - return null; + public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier) throws InvalidGdlSchemaException, ExecutionException { + ArrayList<Pair<Construct, TopicMapsTypes>> result = new ArrayList<Pair<Construct,TopicMapsTypes>>(); + + for (Widget ctrl : this.subElements) { + if(ctrl instanceof ButtonableObject){ + if(((ButtonableObject)ctrl).getMainObject() instanceof AssociationItem){ + for (Pair<Construct, TopicMapsTypes> pair : ((AssociationItem)((ButtonableObject)ctrl).getMainObject()).getContent(null)) { + result.add(pair); + } + } + } + } + + return result; } - +
// This class represents a single association that is displayed. // Further elements are created by caling the GdlInstantiator.instantiate @@ -220,6 +231,27 @@ } + @SuppressWarnings("unchecked") + @Override + public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier) throws InvalidGdlSchemaException, ExecutionException { + ArrayList<Pair<Construct, TopicMapsTypes>> result = new ArrayList<Pair<Construct,TopicMapsTypes>>(); + + Association localCarrier = (Association)this.receivedData; + if(localCarrier == null){ + TopicMap tm = this.tmRepresentative.getTopicMap(); + localCarrier = tm.createAssociation(((GdlAssociationView)this.getGdlParent()).getAssociationType(), (JsArray<Topic>)JsArray.createArray()); + } + + for (Widget ctrl : this.subElements) { + if(ctrl instanceof GdlVisibleObject){ + ((GdlVisibleObject)ctrl).getContent(localCarrier); + } + } + result.add(new Pair<Construct, TopicMapsTypes>(localCarrier, TopicMapsTypes.Association)); + return result; + } + + // this method should be invoked if a new sub-element is added to this instance. // instances of GdlView does not organize their sub-elements in // tables, sub-elements are placed directly on the mainpanel @@ -294,12 +326,5 @@ this.setBackgroundColor(widget, this.getBackgroundColor(styleClass), styleClass); } } - - - @Override - public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(){ - // TODO: implement - return null; - } } }
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlDefaultTopicView.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlDefaultTopicView.java Mon Aug 29 02:32:41 2011 (r800) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlDefaultTopicView.java Mon Aug 29 08:22:42 2011 (r801) @@ -1,14 +1,11 @@ package us.isidor.gdl.anaToMia.Widgets.view;
-import java.util.ArrayList;
-import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Construct; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; -import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMapsTypes; import us.isidor.gdl.anaToMia.Widgets.base.GdlVisibleObject; import us.isidor.gdl.anaToMia.Widgets.environment.ExecutionException; import us.isidor.gdl.anaToMia.Widgets.environment.InvalidGdlSchemaException; -import us.isidor.gdl.anaToMia.Widgets.environment.Pair; +
public abstract class GdlDefaultTopicView extends GdlTopicView {
@@ -18,10 +15,4 @@ } // TODO: implement - - @Override - public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(){ - // TODO: implement - return null; - } }
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlTopicView.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlTopicView.java Mon Aug 29 02:32:41 2011 (r800) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlTopicView.java Mon Aug 29 08:22:42 2011 (r801) @@ -1,10 +1,11 @@ package us.isidor.gdl.anaToMia.Widgets.view;
+ import java.util.ArrayList; import com.google.gwt.user.client.ui.Widget; - import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Construct; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.Topic; +import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMap; import us.isidor.gdl.anaToMia.TopicMaps.TopicMapsModel.TopicMapsTypes; import us.isidor.gdl.anaToMia.Widgets.base.ButtonableObject; import us.isidor.gdl.anaToMia.Widgets.base.GdlVisibleObject; @@ -74,8 +75,24 @@ @Override - public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(){ - // TODO: implement - return null; + public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier) throws InvalidGdlSchemaException, ExecutionException { + ArrayList<Pair<Construct, TopicMapsTypes>> result = new ArrayList<Pair<Construct,TopicMapsTypes>>(); + + Topic localCarrier = (Topic)this.receivedData; + if(localCarrier == null){ + TopicMap tm = this.tmRepresentative.getTopicMap(); + localCarrier = tm.createTopicBySubjectIdentifier(tm.createLocator(this.getId())); + } + + for (Widget ctrl : this.subElements) { + if(this.receivedData == null) result.add(new Pair<Construct, TopicMapsTypes>(localCarrier, TopicMapsTypes.Topic)); + if(ctrl instanceof GdlVisibleObject){ + for (Pair<Construct, TopicMapsTypes> pair : ((GdlVisibleObject)ctrl).getContent(localCarrier)) { + if(this.receivedData != null)result.add(pair); + } + } + } + + return result; } }