Author: lgiessmann Date: Fri Sep 2 02:47:08 2011 New Revision: 819
Log: gdl-frontend: Widgets: implemented the validation of literal-values of topic-names and topic-occurrences
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/TestClass.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/button/GdlCommitButton.java branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/Pattern.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/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 Fri Sep 2 02:00:04 2011 (r818) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlPanel.java Fri Sep 2 02:47:08 2011 (r819) @@ -264,9 +264,9 @@ // this method is responsible for generating a Topic Map fo the user's // data by using the view's getContent method. - public ArrayList<Pair<Construct, TopicMapsTypes>> getContent() throws Exception { + public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(boolean validate) throws Exception { try{ - return this.view.getContent(null, false); + return this.view.getContent(null, validate); }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 Fri Sep 2 02:00:04 2011 (r818) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/GdlVisibleObject.java Fri Sep 2 02:47:08 2011 (r819) @@ -59,6 +59,7 @@ import com.google.gwt.event.dom.client.MouseUpEvent; import com.google.gwt.event.dom.client.MouseUpHandler; import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.i18n.client.Messages.Select; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Window; @@ -2214,13 +2215,17 @@ // returns the actual data that is hold by this instance - public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier, boolean onlyValidate) throws InvalidGdlSchemaException, ExecutionException, InvalidContentException { + public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier, boolean validate) throws InvalidGdlSchemaException, ExecutionException, InvalidContentException { ArrayList<Pair<Construct, TopicMapsTypes>> result = new ArrayList<Pair<Construct,TopicMapsTypes>>(); if(this.getRootConstraint() == null) return result; Construct localCarrier = carrier; if(carrier == null) localCarrier = TmHelper.getNearestTopicOrAssociation(this); //TODO: finalise + ArrayList<Pattern> validLiteralValues = new ArrayList<Pattern>(); + for (String literal : this.getLiterals()) validLiteralValues.add(new Pattern(literal)); + if(validLiteralValues.size() == 0) validLiteralValues.add(new Pattern(this.getLiteralValueForConstraint())); + for (int idx = 0; idx != this.getSelectedValues().size(); ++idx){ if(TmHelper.isInstanceOf(this.getConstraint(), PSIs.TMCL.tmclItemIdentifierConstraint)){ @@ -2235,6 +2240,12 @@ Name changedName = null; if(this.getRootConstraint().equals(this.getConstraint())){ + if(validate){ + int i = 0; + for( ; i != validLiteralValues.size(); ++i) if(validLiteralValues.get(i).matches(this.getSelectedValues().get(idx))) break; + if(i == validLiteralValues.size()) throw new InvalidContentException("the user data " + this.getSelectedValues().get(idx) + " for the topic-name " + TmHelper.getAnyIdOfTopic(TmHelper.getConstrainedStatement(this.getConstraint())) + " does not satisfy any of the constraints: " + Utils.arrayToString(validLiteralValues)); + } + if(names.length() > idx){ changedName = names.get(idx); changedName.setValue(this.getSelectedValues().get(idx)); @@ -2250,9 +2261,15 @@ if(!(localCarrier instanceof Topic)) throw new ExecutionException("the constraint " + TmHelper.getAnyIdOfTopic(this.getRootConstraint()) + " must be bound to a Topic, but is: " + localCarrier.getClass()); Topic occurrenceType = TmHelper.getConstrainedStatement(this.getConstraint()); JsArray<Occurrence> occurrences = ((Topic)localCarrier).getOccurrences(occurrenceType); - + Occurrence changedOccurrence = null; if(this.getRootConstraint().equals(this.getConstraint())){ + if(validate){ + int i = 0; + for( ; i != validLiteralValues.size(); ++i) if(validLiteralValues.get(i).matches(this.getSelectedValues().get(idx))) break; + if(i == validLiteralValues.size()) throw new InvalidContentException("the user data " + this.getSelectedValues().get(idx) + " for the topic-occurrence " + TmHelper.getAnyIdOfTopic(TmHelper.getConstrainedStatement(this.getConstraint())) + " does not satisfy any of the constraints: " + Utils.arrayToString(validLiteralValues)); + } + if(occurrences.length() > idx){ changedOccurrence = occurrences.get(idx); changedOccurrence.setValue(this.getSelectedValues().get(idx));
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 Sep 2 02:00:04 2011 (r818) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/TestClass.java Fri Sep 2 02:47:08 2011 (r819) @@ -31,12 +31,12 @@ mainPanel.setPixelSize(1000, 600); ArrayList<Pair<String, TopicIdentifierTypes>> requestedTopicsToCreate = new ArrayList<Pair<String,TopicIdentifierTypes>>(); - //requestedTopicsToCreate.add(new Pair<String, TopicIdentifierTypes>("http://textgrid.org/serviceregistry/model/types/Hash-Object", TopicIdentifierTypes.SubjectIdentifier)); - requestedTopicsToCreate.add(new Pair<String, TopicIdentifierTypes>("http://textgrid.org/serviceregistry/model/types/Environment", TopicIdentifierTypes.SubjectIdentifier)); + requestedTopicsToCreate.add(new Pair<String, TopicIdentifierTypes>("http://textgrid.org/serviceregistry/model/types/Hash-Object", TopicIdentifierTypes.SubjectIdentifier)); + //requestedTopicsToCreate.add(new Pair<String, TopicIdentifierTypes>("http://textgrid.org/serviceregistry/model/types/Environment", TopicIdentifierTypes.SubjectIdentifier)); //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)); - Pair<String, TopicIdentifierTypes> requestedTopicToEdit = new Pair<String, TopicIdentifierTypes>("http://textgrid.org/serviceregistry/test-env-1", TopicIdentifierTypes.SubjectIdentifier); + //Pair<String, TopicIdentifierTypes> requestedTopicToEdit = new Pair<String, TopicIdentifierTypes>("http://textgrid.org/serviceregistry/test-env-1", TopicIdentifierTypes.SubjectIdentifier); //Pair<String, TopicIdentifierTypes> requestedTopicToEdit = new Pair<String, TopicIdentifierTypes>("http://textgrid.org/serviceregistry/test-hash-2", TopicIdentifierTypes.SubjectIdentifier); GdlPanel.addClickHandler("hash_object_reset_button_id", new ClickHandler() { @Override @@ -46,7 +46,7 @@ } }); - gdlPanel = new GdlPanel(requestedTopicToEdit, null); + gdlPanel = new GdlPanel(null, requestedTopicsToCreate); mainPanel.add(gdlPanel); gdlPanel.setTmEngine(new JtmsTmEngine()); gdlPanel.setLoadSchemaCallback(new LoadSchemaCallback());
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 Sep 2 02:00:04 2011 (r818) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/base/Utils.java Fri Sep 2 02:47:08 2011 (r819) @@ -7,6 +7,20 @@ import com.google.gwt.dom.client.Element;
public class Utils { + // returns a string of the form [item1, item2, ... ] for all + // items of an ArrayList + public static <T> String arrayToString(ArrayList<T> data){ + if(data == null || data.size() == 0) return "[ ]"; + + String result = "["; + for (T t : data) { + result += t + ", "; + } + + return result.substring(0, result.length() - 2) + "]"; + } + + // returns true if both arrays have the same items public static <T> boolean compareLists(ArrayList<T> lft, ArrayList<T> rgt){ if(lft == null && rgt == null) return true;
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlCommitButton.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlCommitButton.java Fri Sep 2 02:00:04 2011 (r818) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/button/GdlCommitButton.java Fri Sep 2 02:47:08 2011 (r819) @@ -42,7 +42,7 @@ TmEngine tmEngine = this.owner.getRoot().getTmEngine(); ICommitCallback callback = this.owner.getRoot().getCommitCallback(); - callback.commitTmConstruct(this.owner.getGdlParent().getContent(null, false), tmEngine, this.owner.getId()); + callback.commitTmConstruct(this.owner.getGdlParent().getContent(null, true), tmEngine, this.owner.getId()); }catch(Exception e){ e.printStackTrace(); Window.alert("caught: " + e.getMessage());
Modified: branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/Pattern.java ============================================================================== --- branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/Pattern.java Fri Sep 2 02:00:04 2011 (r818) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/environment/Pattern.java Fri Sep 2 02:47:08 2011 (r819) @@ -46,7 +46,7 @@ public final static int MULTILINE = 1;
/** - * Declares that characters are matched reglardless of case. + * Declares that characters are matched regardless of case. */ public final static int CASE_INSENSITIVE = 2;
@@ -178,5 +178,10 @@ return parts; }
+ + @Override + public String toString(){ + return this.pattern(); + } }
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 Fri Sep 2 02:00:04 2011 (r818) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlAssociationView.java Fri Sep 2 02:47:08 2011 (r819) @@ -185,13 +185,13 @@
@Override - public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier, boolean onlyValidate) throws InvalidGdlSchemaException, ExecutionException, InvalidContentException{ + public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier, boolean validate) throws InvalidGdlSchemaException, ExecutionException, InvalidContentException{ 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, onlyValidate)) { + for (Pair<Construct, TopicMapsTypes> pair : ((AssociationItem)((ButtonableObject)ctrl).getMainObject()).getContent(null, validate)) { result.add(pair); } } @@ -264,14 +264,14 @@ @Override - public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier, boolean onlyValidate) throws InvalidGdlSchemaException, ExecutionException, InvalidContentException { + public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier, boolean validate) throws InvalidGdlSchemaException, ExecutionException, InvalidContentException { ArrayList<Pair<Construct, TopicMapsTypes>> result = new ArrayList<Pair<Construct,TopicMapsTypes>>(); Association localCarrier = this.getRepresentedAssociation(); for (Widget ctrl : this.subElements) { if(ctrl instanceof GdlVisibleObject){ - ((GdlVisibleObject)ctrl).getContent(localCarrier, onlyValidate); + ((GdlVisibleObject)ctrl).getContent(localCarrier, validate); } } result.add(new Pair<Construct, TopicMapsTypes>(localCarrier, TopicMapsTypes.Association));
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 Fri Sep 2 02:00:04 2011 (r818) +++ branches/gdl-frontend/src/anaToMia/GDL_Widgets/src/us/isidor/gdl/anaToMia/Widgets/view/GdlTopicView.java Fri Sep 2 02:47:08 2011 (r819) @@ -140,7 +140,7 @@ @Override - public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier, boolean onlyValidate) throws InvalidGdlSchemaException, ExecutionException, InvalidContentException { + public ArrayList<Pair<Construct, TopicMapsTypes>> getContent(Construct carrier, boolean validate) throws InvalidGdlSchemaException, ExecutionException, InvalidContentException { ArrayList<Pair<Construct, TopicMapsTypes>> result = new ArrayList<Pair<Construct,TopicMapsTypes>>(); Topic localCarrier = (Topic)this.receivedData; @@ -152,7 +152,7 @@ if(i == result.size()) result.add(new Pair<Construct, TopicMapsTypes>(localCarrier, TopicMapsTypes.Topic)); if(ctrl instanceof GdlVisibleObject){ - for (Pair<Construct, TopicMapsTypes> pair : ((GdlVisibleObject)ctrl).getContent(localCarrier, onlyValidate)) { + for (Pair<Construct, TopicMapsTypes> pair : ((GdlVisibleObject)ctrl).getContent(localCarrier, validate)) { if((this.receivedData != null || (ctrl instanceof GdlView)) && !this.indirectlyContained(pair, result))result.add(pair); } }