made SimpleClientConfig externally configurable and added mechanism to prevent invali...
[vamsas.git] / src / uk / ac / vamsas / client / simpleclient / ClientDocument.java
index 0a8dc41..b9e918e 100644 (file)
@@ -103,6 +103,11 @@ public class ClientDocument extends uk.ac.vamsas.client.ClientDocument implement
    * internal reference to single copy of Document Roots array
    */
   private VAMSAS[] _VamsasRoots=null;
+  /**
+   * set if the client has corrupted the Vamsas Document structure somehow.
+   * if this is set the document will never be written back to the session unless the corruption is fixed.
+   */
+  private boolean invalidModification=false;
 
   protected void updateDocumentRoots() {
     if (doc==null) {
@@ -189,13 +194,16 @@ public class ClientDocument extends uk.ac.vamsas.client.ClientDocument implement
       }
       // just do internal validation for moment.
       try {
-        if (SimpleClientConfig.validateUpdatedRoots())
+        if (getSimpleClientConfig().validateUpdatedRoots())
+        {
           newVersion.validate();
+        }
         return true;
       }
       catch (Exception e)
       {
         log.error("Validation Exception for new vamsas root :"+newVersion.getVorbaId(),e);
+        modflag.invalidModification=true;
       }
       return false;
     } else {
@@ -206,7 +214,7 @@ public class ClientDocument extends uk.ac.vamsas.client.ClientDocument implement
         modflag.isModified=true;
       }
       try {
-        if (SimpleClientConfig.validateMergedRoots())
+        if (getSimpleClientConfig().validateMergedRoots())
         {
           newVersion.validate();
         }
@@ -268,6 +276,9 @@ public class ClientDocument extends uk.ac.vamsas.client.ClientDocument implement
         }
       }*/
   }
+  private SimpleClientConfig getSimpleClientConfig() {
+    return sclient.getSimpleClientConfig();
+}
   /**
    * merge old and new root vectors
    * @param newr This array may be written to
@@ -277,7 +288,6 @@ public class ClientDocument extends uk.ac.vamsas.client.ClientDocument implement
    */
   private VAMSAS[] _combineRoots(VAMSAS[] newr, final VAMSAS[] original, ClientDocument modflag) {
     Vector rts = new Vector();
-    boolean modified=false;
     for (int i=0,j=original.length; i<j; i++) {
       int k = _contains(original[i], newr);
       if (k>-1) {
@@ -581,4 +591,19 @@ public class ClientDocument extends uk.ac.vamsas.client.ClientDocument implement
     // TODO: WALK through the document objects calling the update mechanism for each one, or just pass this vector back to client ?return updatedObjects;
     return null;
   }
+  /**
+   * if this is set the document will never be written back to the session unless the corruption is fixed.
+   * @return the invalidModification
+   */
+  public boolean isInvalidModification() {
+    return invalidModification;
+  }
+  /**
+   * set if the client has corrupted the Vamsas Document structure somehow.
+   * if this is set the document will never be written back to the session unless the corruption is fixed.
+   * @param invalidModification the invalidModification to set
+   */
+  public void setInvalidModification(boolean invalidModification) {
+    this.invalidModification = invalidModification;
+  }
 }