Commits

mlow  committed 35bf0db Merge

Merge with new content code and code to increase performance.

  • Participants
  • Parent commits cd360f0, 2237a24
  • Branches production

Comments (0)

Files changed (19)

File fixity-conf/properties/FixityTest.properties

 Store2Fixity.baseFile=C:/Documents and Settings/dloy/My Documents/MRTMaven/repository/fixity
 Store2Fixity.line=./k6/0c/4r/w/ark+=13030=qt1k60c4rw/v001/manifest.txt
 Store2Fixity.serverLink=http://localhost:28080/mrtfixity
-Store2Fixity.baseURL=http://localhost:28080/storage/state/10
+Store2Fixity.baseURL=http://localhost:28080/storage/content/10
 
 
 

File fixity-src/src/main/java/org/cdlib/mrt/fixity/action/ProcessFixityEntry.java

 import org.cdlib.mrt.fixity.utility.FixityDBUtil;
 import org.cdlib.mrt.fixity.utility.FixityUtil;
 import org.cdlib.mrt.core.DateState;
+import org.cdlib.mrt.core.MessageDigest;
 import org.cdlib.mrt.utility.PropertiesUtil;
 import org.cdlib.mrt.utility.LoggerInf;
 import org.cdlib.mrt.utility.TException;
                         "No matching URL was found for this item:" + entry.getUrl());
             }
             FixityEntry dbEntry = FixityDBUtil.getEntry(connection, id, logger);
+            FixityEntry.StatusType dbStatus = dbEntry.getStatus();
+            DateState dbVerifiedDate = dbEntry.getVerified();
             if (DEBUG) dbEntry.printEntry("IN UPDATE: dbEntry");
             FixityEntry mergeEntry = dbEntry.mergeFromEntry(entry);
             entry = mergeEntry;
             handler = FixityHandlerAbs.getFixityHandler(entry, logger);
             handler.validate();
             log("before runFixity");
-            handler.runFixity();
-            if (entry.getStatus() != FixityEntry.StatusType.verified) {
-                throw new TException.REQUEST_INVALID("Fixity Test fails item not updated:" + entry.getStatus().getItemDBStatus());
+            if (isFixityDiff(dbEntry, mergeEntry)) {
+                handler.runFixity();
+                if (entry.getStatus() != FixityEntry.StatusType.verified) {
+                    throw new TException.REQUEST_INVALID("Fixity Test fails item not updated:" + entry.getStatus().getItemDBStatus());
+                }
+            } else {
+                entry.setStatus(dbStatus);
+                entry.setVerified(dbVerifiedDate);
+                log ("no Fixity diff");
             }
 
             log("runUpdate before replaceEntry");
 
     }
 
+    /**
+     * If either the digest or the file size don't match then a rerun is necessare
+     * @param dbEntry - currently saved version of entry
+     * @param mergeEntry - merge version of entry
+     * @return true=rerun fixity test; false=no changes to primary fixity values
+     * @throws TException
+     */
+    public static boolean isFixityDiff(FixityEntry dbEntry, FixityEntry mergeEntry)
+        throws TException
+    {
+        MessageDigest dbDigest = dbEntry.getDigest();
+        MessageDigest mergeDigest = mergeEntry.getDigest();
+        long dbSize = dbEntry.getSize();
+        long mergeSize = mergeEntry.getSize();
+        FixityEntry.SourceType dbSourceType = dbEntry.getSource();
+        FixityEntry.SourceType mergeSourceType = mergeEntry.getSource();
+
+
+        if ((dbDigest != null) && (mergeDigest != null)) {
+            if (!dbDigest.toString().equals(mergeDigest.toString())) {
+                return true;
+            }
+
+        } else if ((dbDigest == null) && (mergeDigest == null)) {
+            return false;
+
+        } else if ((dbDigest != null) || (mergeDigest != null)) {
+            return true;
+        }
+
+        if ((dbSize <= 0) && (mergeSize <= 0)) {
+            return false;
+
+        }  else if (dbSize != mergeSize) {
+            return true;
+        }
+
+        if ((dbSourceType != null) && (mergeSourceType != null)) {
+            if (dbSourceType != mergeSourceType) {
+                return true;
+            }
+
+        } else if ((dbSourceType == null) && (mergeSourceType == null)) {
+            return false;
+
+        } else if ((dbSourceType != null) || (mergeSourceType != null)) {
+            return true;
+        }
+
+        return false;
+    }
     protected void setRunException(Exception exception)
     {
         Properties entryProp = entry.retrieveProperties();
         return getEntry();
     }
 
-    protected void log(String msg)
+    protected static void log(String msg)
     {
         if (!DEBUG) return;
         System.out.println(MESSAGE + msg);

File fixity-src/src/main/java/org/cdlib/mrt/fixity/db/FixityItemDB.java

              }
          } catch (Exception ex) { }
      }
+
+    public static String retrieveENC(String key)
+        throws TException
+    {
+        try {
+            if (StringUtil.isEmpty(key)) return "";
+            return SecurityUtil.desEncrypt(key, PW);
+
+        } catch (Exception ex) {
+            System.out.println(MESSAGE + "retrieveENC: "
+                    + " - key=\"" + key + "\""
+                    + " - Exception:" + ex);
+            return "";
+        }
+    }
 }
 

File fixity-src/src/main/java/org/cdlib/mrt/fixity/service/FixityService.java

         ProcessFixityEntry add = ProcessFixityEntry.getProcessFixityEntry("add", entry, connection, logger);
         FixityEntry responseEntry = add.call();
         if (add.getException() != null) {
-            throw new TException(add.getException());
+            throwException(add.getException());
         }
         return responseEntry;
     }
         ProcessFixityEntry queue = ProcessFixityEntry.getProcessFixityEntry("queue", entry, connection, logger);
         FixityEntry responseEntry = queue.call();
         if (queue.getException() != null) {
-            throw new TException(queue.getException());
+            throwException(queue.getException());
         }
         return responseEntry;
     }
         ProcessFixityEntry test = ProcessFixityEntry.getProcessFixityEntry("test", entry, null, logger);
         FixityEntry responseEntry = test.call();
         if (test.getException() != null) {
-            throw new TException(test.getException());
+            throwException(test.getException());
         }
         return responseEntry;
     }
         ProcessFixityEntry update = ProcessFixityEntry.getProcessFixityEntry("update", entry, connection, logger);
         FixityEntry responseEntry = update.call();
         if (update.getException() != null) {
-            throw new TException(update.getException());
+            throwException(update.getException());
         }
         return responseEntry;
     }
         DeleteFixityEntry delete = DeleteFixityEntry.getDeleteFixityEntry(itemKey, connection, logger);
         FixityEntry responseEntry = delete.call();
         if (delete.getException() != null) {
-            throw new TException(delete.getException());
+            throwException(delete.getException());
         }
         return responseEntry;
     }
         DeleteFixityEntry delete = DeleteFixityEntry.getDeleteFixityEntry(url, connection, logger);
         FixityEntry responseEntry = delete.call();
         if (delete.getException() != null) {
-            throw new TException(delete.getException());
+            throwException(delete.getException());
         }
         return responseEntry;
     }
         return value.substring(7);
     }
 
+    protected void throwException(Exception ex)
+        throws TException
+    {
+        if (ex instanceof TException) {
+            throw (TException) ex;
+        }
+        throw new TException(ex);
+    }
+
     public LoggerInf getLogger() {
         return logger;
     }

File fixity-src/src/main/sql/current.db.110520.sql

+DROP TABLE IF EXISTS `fixity_item`;
+CREATE TABLE `fixity_item` (
+  `itemkey` bigint NOT NULL AUTO_INCREMENT,
+  `url` varchar(511) NOT NULL,
+  `source` enum('merritt','file','web')
+        NOT NULL,
+  `size` bigint(20) DEFAULT NULL,
+  `type` enum('ADLER-32','CRC-32','MD2','MD5','SHA-1','SHA-256','SHA-384','SHA-512') DEFAULT NULL,
+  `value` varchar(255) DEFAULT NULL,
+  `status` enum('verified','unverified','size-mismatch','digest-mismatch','system-unavailable','processing')
+        NOT NULL DEFAULT 'unverified',
+  `verified` timestamp NULL,
+  `lastsize` bigint(20) NULL,
+  `lastvalue` varchar(255) DEFAULT NULL,
+  `note` text,
+  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+  `modified` timestamp NULL,
+  PRIMARY KEY (`itemkey`),
+  KEY `url` (`url`),
+  KEY `status` (`status`),
+  KEY `verified` (`verified`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+DROP TABLE IF EXISTS `fixity_context`;
+CREATE TABLE `fixity_context` (
+  `contextkey` bigint NOT NULL AUTO_INCREMENT,
+  `itemkey` bigint NOT NULL,
+  `context` varchar(255) NOT NULL,
+  PRIMARY KEY (`contextkey`),
+  KEY `context` (`context`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+DROP TABLE IF EXISTS `fixity_history`;
+CREATE TABLE `fixity_history` (
+  `historykey` bigint NOT NULL AUTO_INCREMENT,
+  `itemkey` bigint NOT NULL,
+  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+  `subject` varchar(255) DEFAULT NULL,
+  `note` varchar(255) DEFAULT NULL,
+  PRIMARY KEY (`historykey`),
+  KEY `subject` (`subject`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+
+INSERT INTO `fixity_item` (`url`, `context`, `source`, `type`, `value`, `size`)
+  VALUES (
+  'https://confluence.ucop.edu/download/attachments/20250670/testG23.xls',
+  '|node=10|objectid=12345-abcde|version=3|fileid=fptr109.xls|',
+  'web',
+  'SHA-256',
+  'be18adbda20306f18bc2c725e3c3e9efe6fb3d5da933ba7c62184a4f3c373820',
+  '21504'
+);
+
+INSERT INTO `fixity_item` (`url`, `context`, `source`, `type`, `value`, `size`)
+  VALUES (
+  'https://confluence.ucop.edu/download/attachments/20250670/testG27.xls',
+  '|fileid=testG27.xls|',
+  'web',
+  'MD5',
+  '9ef33b30e80ef01a0e8ae2488ed68aab',
+  '18944'
+);
+
+INSERT INTO `fixity_item` (`url`, `context`, `source`, `type`, `value`, `size`)
+  VALUES (
+  'https://confluence.ucop.edu/download/attachments/20250670/testG27.xls',
+  '|bad size|',
+  'web',
+  'MD5',
+  '9ef33b30e80ef01a0e8ae2488ed68aab',
+  '18945'
+);
+
+INSERT INTO `fixity_item` (`url`, `context`, `source`, `type`, `value`, `size`)
+  VALUES (
+  'https://confluence.ucop.edu/download/attachments/20250670/testG27.xls',
+  '|bad checksum|',
+  'web',
+  'MD5',
+  'fff33b30e80ef01a0e8ae2488ed68aab',
+  '18944'
+);
+
+
+INSERT INTO `fixity_item` (`url`, `source`)
+  VALUES (
+  'http://localhost:28080/storage/fixity/10/12345-abcde/3/fptr109.xls?t=anvl',
+  'merritt'
+);
+
+
+INSERT INTO `fixity_history` (`itemkey`, `subject`, `note`)
+  VALUES (
+  '2',
+  'add',
+  'validated'
+);

File fixity-src/src/main/sql/current.db.sql

   PRIMARY KEY (`contextkey`),
   KEY `context` (`context`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-DROP TABLE IF EXISTS `fixity_history`;
-CREATE TABLE `fixity_history` (
-  `historykey` bigint NOT NULL AUTO_INCREMENT,
-  `itemkey` bigint NOT NULL,
-  `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
-  `subject` varchar(255) DEFAULT NULL,
-  `note` varchar(255) DEFAULT NULL,
-  PRIMARY KEY (`historykey`),
-  KEY `subject` (`subject`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-
-
-INSERT INTO `fixity_item` (`url`, `context`, `source`, `type`, `value`, `size`)
-  VALUES (
-  'https://confluence.ucop.edu/download/attachments/20250670/testG23.xls',
-  '|node=10|objectid=12345-abcde|version=3|fileid=fptr109.xls|',
-  'web',
-  'SHA-256',
-  'be18adbda20306f18bc2c725e3c3e9efe6fb3d5da933ba7c62184a4f3c373820',
-  '21504'
-);
-
-INSERT INTO `fixity_item` (`url`, `context`, `source`, `type`, `value`, `size`)
-  VALUES (
-  'https://confluence.ucop.edu/download/attachments/20250670/testG27.xls',
-  '|fileid=testG27.xls|',
-  'web',
-  'MD5',
-  '9ef33b30e80ef01a0e8ae2488ed68aab',
-  '18944'
-);
-
-INSERT INTO `fixity_item` (`url`, `context`, `source`, `type`, `value`, `size`)
-  VALUES (
-  'https://confluence.ucop.edu/download/attachments/20250670/testG27.xls',
-  '|bad size|',
-  'web',
-  'MD5',
-  '9ef33b30e80ef01a0e8ae2488ed68aab',
-  '18945'
-);
-
-INSERT INTO `fixity_item` (`url`, `context`, `source`, `type`, `value`, `size`)
-  VALUES (
-  'https://confluence.ucop.edu/download/attachments/20250670/testG27.xls',
-  '|bad checksum|',
-  'web',
-  'MD5',
-  'fff33b30e80ef01a0e8ae2488ed68aab',
-  '18944'
-);
-
-
-INSERT INTO `fixity_item` (`url`, `source`)
-  VALUES (
-  'http://localhost:28080/storage/fixity/10/12345-abcde/3/fptr109.xls?t=anvl',
-  'merritt'
-);
-
-
-INSERT INTO `fixity_history` (`itemkey`, `subject`, `note`)
-  VALUES (
-  '2',
-  'add',
-  'validated'
-);

File fixity-src/src/test/java/org/cdlib/mrt/fixity/service/action/ProcessFixityEntryTest.java

+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.cdlib.mrt.fixity.service.action;
+
+import java.util.Properties;
+import java.io.File;
+import org.cdlib.mrt.utility.DateUtil;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+import org.cdlib.mrt.fixity.action.ProcessFixityEntry;
+import org.cdlib.mrt.fixity.db.FixityContextEntry;
+import org.cdlib.mrt.utility.FileUtil;
+import org.cdlib.mrt.utility.LoggerAbs;
+import org.cdlib.mrt.utility.LoggerInf;
+import org.cdlib.mrt.utility.PropertiesUtil;
+import org.cdlib.mrt.utility.TException;
+
+
+import java.util.Date;
+import org.cdlib.mrt.fixity.db.FixityEntry;
+
+/**
+ *
+ * @author dloy
+ */
+public class ProcessFixityEntryTest {
+    private LoggerInf logger = null;
+    public ProcessFixityEntryTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception {
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception {
+    }
+
+    @Before
+    public void setUp() {
+        try {
+            logger = LoggerAbs.getTFileLogger("testFormatter", 10, 10);
+        } catch (Exception ex) {
+            logger = null;
+        }
+    }
+
+    @After
+    public void tearDown() {
+    }
+
+
+
+    @Test
+    public void match()
+    {
+
+        try {
+            Properties propDB = new Properties();
+            propDB.setProperty("source", "web");
+            propDB.setProperty("url", "http://hokusai.cdlib.org:28080/storage/content/1001/ark%3A%2F13030%2Fqt11z1k021/1/system%2Fmrt-ingest.txt");
+            propDB.setProperty("type", "SHA-256");
+            propDB.setProperty("value", "cd64f74c242a36cc7e467e4788cece9a44ef60e18b84f4bd72e36addb4940242");
+            propDB.setProperty("size", "1653");
+            propDB.setProperty("verified", "2011-04-28 08:32:03");
+            propDB.setProperty("created", "2011-04-27 12:55:53");
+            propDB.setProperty("status", "verified");
+            propDB.setProperty("context", "this is an old context");
+            //System.out.println(PropertiesUtil.dumpProperties("propDB ", propDB));
+
+            Properties propDiff = PropertiesUtil.copyProperties(propDB);
+            isDiff("same", propDB, propDiff, false);
+
+            propDiff = PropertiesUtil.copyProperties(propDB);
+            propDiff.setProperty("context", "this is a new context");
+            isDiff("new context", propDB, propDiff, false);
+
+            propDiff = PropertiesUtil.copyProperties(propDB);
+            propDiff.setProperty("size", "1653");
+            isDiff("same size change", propDB, propDiff, false);
+
+            propDiff = PropertiesUtil.copyProperties(propDB);
+            propDiff.remove("size");
+            isDiff("one size", propDB, propDiff, true);
+
+            isDiff("no size", propDiff, propDiff, false);
+
+            propDiff = PropertiesUtil.copyProperties(propDB);
+            propDiff.setProperty("size", "1654");
+            isDiff("bad size", propDB, propDiff, true);
+
+            propDiff = PropertiesUtil.copyProperties(propDB);
+            propDiff.setProperty("value", "cd64f74c242a36cc7e467e4788cece9a44ef60e18b84f4bd72e36addb4940242");
+            isDiff("same checksum", propDB, propDiff, false);
+
+            propDiff = PropertiesUtil.copyProperties(propDB);
+            propDiff.setProperty("value", "aa64f74c242a36cc7e467e4788cece9a44ef60e18b84f4bd72e36addb4940242");
+            isDiff("diff checksum", propDB, propDiff, true);
+            assertTrue(true);
+
+            propDiff = PropertiesUtil.copyProperties(propDB);
+            propDiff.remove("value");
+            propDiff.remove("type");
+            isDiff("one digest", propDB, propDiff, true);
+
+            isDiff("no digest", propDiff, propDiff, false);
+
+            propDiff = PropertiesUtil.copyProperties(propDB);
+            propDiff.setProperty("source", "web");
+            isDiff("same source", propDB, propDiff, false);
+
+            propDiff = PropertiesUtil.copyProperties(propDB);
+            propDiff.setProperty("source", "merritt");
+            isDiff("diff source", propDB, propDiff, true);
+
+            propDiff = PropertiesUtil.copyProperties(propDB);
+            propDiff.setProperty("source", "file");
+            isDiff("diff source", propDB, propDiff, true);
+
+
+            propDiff = PropertiesUtil.copyProperties(propDB);
+            propDiff.remove("source");
+            isDiff("one source", propDB, propDiff, true);
+
+            isDiff("no source", propDiff, propDiff, false);
+            assertTrue(true);
+
+        } catch (Exception ex) {
+            System.out.println("Exception:" + ex);
+            ex.printStackTrace();
+            assertFalse("Exception:" + ex, true);
+        }
+    }
+
+    public void isDiff(String header, Properties propDb, Properties propDiff, boolean diff)
+    {
+        try {
+            System.out.println("------------------->" + header);
+            System.out.println(PropertiesUtil.dumpProperties("propDB ", propDb));
+            FixityEntry dbEntry = new FixityEntry(propDb);
+            System.out.println(PropertiesUtil.dumpProperties("diff   ", propDiff));
+            FixityEntry diffEntry = new FixityEntry(propDiff);
+            FixityContextEntry dbContext = dbEntry.getContextEntry(0);
+            if (dbContext != null) {
+                System.out.println("db   context:" + dbContext.getContext());
+            } else {
+                System.out.println("db   context: NONE");
+            }
+
+            FixityContextEntry diffContext = diffEntry.getContextEntry(0);
+            if (diffContext != null) {
+                System.out.println("diff context:" + diffContext.getContext());
+            } else {
+                System.out.println("diff context: NONE");
+            }
+            boolean matchEntry = ProcessFixityEntry.isFixityDiff(dbEntry, diffEntry);
+            System.out.println("expect=" + diff + " - got=" + matchEntry);
+            assertTrue(diff == matchEntry);
+
+        } catch (Exception ex) {
+            assertFalse("Exception:" + ex, true);
+        }
+    }
+
+}

File fixity-storeload/src/main/java/org/cdlib/mrt/fixity/tools/Store2Fixity.java

 import org.cdlib.mrt.core.Manifest;
 import org.cdlib.mrt.core.ManifestRowAbs;
 import org.cdlib.mrt.core.MessageDigest;
+import org.cdlib.mrt.utility.FileUtil;
 import org.cdlib.mrt.utility.TFileLogger;
 import org.cdlib.mrt.utility.TFrame;
 import org.cdlib.mrt.utility.URLEncoder;
 {
     private static final String NAME = "Store2Fixity";
     private static final String MESSAGE = NAME + ": ";
+    public enum CmdType {add, queue};
 
     private static final String NL = System.getProperty("line.separator");
     private static final boolean DEBUG = true;
     protected int maxout = 10000;
     protected FixityClient client = null;
     protected String serverLink = null;
+    protected String[] owners = null;
+    protected String[] members = null;
+    protected CmdType cmdType = null;
 
     public Store2Fixity(
             File baseFile,
             String baseURL,
             String serverLink,
+            String cmdS,
             String line,
             LoggerInf logger)
         throws TException
         this.line = line;
         this.serverLink = serverLink;
         this.client = new FixityClient(logger);
-        validate();
+        validate(cmdS);
     }
 
-    protected void validate()
+    protected void validate(String cmdS)
         throws TException
     {
         if (StringUtil.isEmpty(serverLink)) {
         if (StringUtil.isEmpty(line)) {
             throw new TException.INVALID_OR_MISSING_PARM(MESSAGE + "Missing line");
         }
+        if (StringUtil.isEmpty(cmdS)) {
+            cmdS = "add";
+        }
+        try {
+            cmdS = cmdS.toLowerCase();
+            cmdType = CmdType.valueOf(cmdS);
+        } catch (Exception ex) {
+            cmdType = CmdType.add;
+        }
         setLine();
     }
 
             if (content == null) {
                 throw new TException.INVALID_OR_MISSING_PARM(MESSAGE + "not able to process manifest");
             }
+            extractMembership();
+            extractOwner();
 
         } catch (Exception ex) {
             throw new TException(ex);
         }
     }
-    
+
     public static Identifier getArk(String arkP)
         throws TException
     {
             }
             File manifestFile = new File(baseFile, line);
             if (!manifestFile.exists()) {
-                throw new TException.INVALID_OR_MISSING_PARM(MESSAGE + "manifest.txt file does not exist");
+                throw new TException.INVALID_OR_MISSING_PARM(MESSAGE + "manifest.txt file does not exist:" + manifestFile.getCanonicalPath());
             }
              
             Manifest manifest = Manifest.getManifest(logger, ManifestRowAbs.ManifestType.object);
                 baseFile,
                 baseURL,
                 serverLink,
+                "add",
                 line,
                 logger);
             System.out.println(test.dump("MAIN dump"));
+            if (true) return;
             test.run();
 
         } catch(Exception e) {
 
             String note = null;
             String formatTypeS = "XML";
-        client.add(
-            linkS,
-            timeout,
-            retry,
-            urlS,
-            source,
-            sizeS,
-            digestType,
-            digestValue,
-            context,
-            note,
-            formatTypeS);
+            Properties prop = null;
+            if (cmdType == CmdType.add) {
+                prop = client.add(
+                    linkS,
+                    timeout,
+                    retry,
+                    urlS,
+                    source,
+                    sizeS,
+                    digestType,
+                    digestValue,
+                    context,
+                    note,
+                    formatTypeS);
+
+            } else if (cmdType == CmdType.queue) {
+                prop = client.queue(
+                    linkS,
+                    timeout,
+                    retry,
+                    urlS,
+                    source,
+                    sizeS,
+                    digestType,
+                    digestValue,
+                    context,
+                    note,
+                    formatTypeS);
+
+            } else {
+                throw new TException.REQUEST_INVALID(
+                        MESSAGE + "command type not supported:" + cmdType);
+            }
+            if (isError(prop)) {
+                handleException(prop);
+            }
+
+            for (String member: members) {
+                String memberContext = "|member=" + member + "|";
+                Properties contextProp = client.update(
+                    linkS,
+                    timeout,
+                    retry,
+                    urlS,
+                    null,
+                    null,
+                    null,
+                    null,
+                    memberContext,
+                    null,
+                    formatTypeS);
+                if (isError(contextProp)) {
+                    handleException(prop);
+                }
+            }
+
+            for (String owner: owners) {
+                String ownerContext = "|owner=" + owner + "|";
+                Properties contextProp = client.update(
+                    linkS,
+                    timeout,
+                    retry,
+                    urlS,
+                    null,
+                    null,
+                    null,
+                    null,
+                    ownerContext,
+                    null,
+                    formatTypeS);
+                if (isError(contextProp)) {
+                    handleException(prop);
+                }
+            }
 
         } catch (Exception ex) {
             ex.printStackTrace();
 
     }
 
+    protected void handleException(Properties prop)
+        throws TException
+    {
+        if ((prop == null) || (prop.size() == 0)) {
+            throw new TException.INVALID_OR_MISSING_PARM("No properties returned from FixityClient");
+        }
+        String exceptionS = prop.getProperty("response.state");
+        if (StringUtil.isEmpty(exceptionS)) {
+            throw new TException.INVALID_OR_MISSING_PARM("No exception state retunred from FixityClient");
+        }
+        if (exceptionS.contains("exc:tException.REQUEST_ITEM_EXISTS")) {
+            throw new TException.REQUEST_ITEM_EXISTS(exceptionS);
+        } else {
+            throw new TException.GENERAL_EXCEPTION(exceptionS);
+        }
+    }
+
+    protected int getStatus(Properties prop)
+    {
+        int statusVal = 200;
+        String statusValS = prop.getProperty("response.status");
+        if (StringUtil.isNotEmpty(statusValS)) {
+            statusVal = Integer.parseInt(statusValS);
+        }
+        return statusVal;
+    }
+
+
+
+    protected boolean isError(Properties prop)
+    {
+        if (prop == null) return true;
+
+        String errorStatus = prop.getProperty("error.status");
+        if (StringUtil.isNotEmpty(errorStatus)) return true;
+        return false;
+    }
 
     protected void log(String msg)
     {
                     + " - baseFile=" + baseFile.getCanonicalPath() + NL
                     + " - baseURL=" + baseURL + NL
                     + " - serverLink=" + serverLink + NL
+                    + " - cmdType=" + cmdType.toString() + NL
                     );
+            if (members != null) {
+                for (String item: members) {
+                    buf.append(" - member=" + item + NL);
+                }
+            }
+            if (owners != null) {
+                for (String item: owners) {
+                    buf.append(" - owner=" + item + NL);
+                }
+            }
             return buf.toString();
             
         } catch (Exception ex) {
             return ex.toString();
         }
     }
+
+    protected void extractMembership()
+        throws TException
+    {
+        try {
+            String urlS = baseURL
+                    + "/" + URLEncoder.encode(id.getValue(), "utf-8")
+                    + "/" + version
+                    + "/" + URLEncoder.encode("system/mrt-membership.txt", "utf-8");
+            members = FileUtil.getLinesFromURL(logger, urlS);
+
+        } catch (Exception ex) {
+            log("Warning - getMembership Exception:" + ex);
+        }
+
+    }
+
+    protected void extractOwner()
+        throws TException
+    {
+        try {
+            String urlS = baseURL
+                    + "/" + URLEncoder.encode(id.getValue(), "utf-8")
+                    + "/" + version
+                    + "/" + URLEncoder.encode("system/mrt-owner.txt", "utf-8");
+            owners = FileUtil.getLinesFromURL(logger, urlS);
+
+        } catch (Exception ex) {
+            log("Warning - getMembership Exception:" + ex);
+        }
+
+    }
+
+    public String[] getMembers() {
+        return members;
+    }
+
+    public String[] getOwners() {
+        return owners;
+    }
+
+
 }

File fixity-storeload/src/main/java/org/cdlib/mrt/fixity/tools/Store2FixityList.java

     protected File baseFile = null;
     protected String baseURL = null;
     protected String serverLink = null;
+    protected String cmdTypeS = null;
     protected BufferedReader reader = null;
     protected Vector <String> exArr = new Vector <String> (100);
     protected int maxExceptions = 100;
             File baseFile,
             String baseURL,
             String serverLink,
+            String cmdTypeS,
             LoggerInf logger)
         throws TException
     {
         this.logger = logger;
         this.listFile = listFile;
         this.serverLink = serverLink;
+        this.cmdTypeS = cmdTypeS;
         validate();
     }
 
         if (!listFile.exists()) {
             throw new TException.INVALID_OR_MISSING_PARM(MESSAGE + "listFile does not exist");
         }
+        if (StringUtil.isEmpty(cmdTypeS)) {
+            cmdTypeS = "add";
+        }
         setList();
     }
 
                     break;
                 }
                 System.out.println("Line:" + line);
-                Store2Fixity s2f = new Store2Fixity(baseFile, baseURL, serverLink, line, logger);
+                Store2Fixity s2f = new Store2Fixity(baseFile, baseURL, serverLink, cmdTypeS, line, logger);
                 try {
                     s2f.run();
 
 
             String serverLink = get(prop, "serverLink");
 
+            String cmdTypeS = prop.getProperty("cmdType");
+
             String maxoutS = prop.getProperty("maxout", "10");
             int maxout = Integer.parseInt(maxoutS);
 
                 baseFile,
                 baseURL,
                 serverLink,
+                cmdTypeS,
                 logger);
             System.out.println(test.dump("MAIN dump"));
             test.run();

File fixity-storeload/src/main/resources/resources/FixityTest.properties

+#         mrt Test properties
+#-----------------------------------------------------------------
+#-----------------------------------------------------------------
+db.url=jdbc:mysql://127.0.0.1:3306/merritt?characterEncoding=UTF-8&characterSetResults=UTF-8
+db.user=merrittrw
+db.pw=rInueot2oCxT88IZNAumMA==
+
+#db.url=jdbc:mysql://mysql-dev.cdlib.org:3333/mrt?characterEncoding=UTF-8&characterSetResults=UTF-8
+#db.user=mrtrw
+#db.pw=XhruRdVATeA=
+
+#db.url=jdbc:mysql://mysql-dev.cdlib.org:3333/mrt2?characterEncoding=UTF-8&characterSetResults=UTF-8
+#db.user=mrt2rw
+#db.pw=3rM2GDetwQM=
+
+#hsqldb
+#db.url=jdbc:hsqldb:file:C:/Documents and Settings/dloy/My Documents/MRTMaven/db
+#db.user=sa
+#db.password=
+
+SaveDirectory.path=C:/Documents and Settings/dloy/My Documents/CDL6/tomcat_base/webapps/fixity
+SaveDirectory.maxout=3000
+SaveDirectory.baseURL=http://localhost:28080/fixity/
+
+RunQueue.capacity=100
+
+FixityServiceStateManager.infoPath=C:/Documents and Settings/dloy/My Documents/MRTMaven/fixity/fixity-info.txt
+TestFixityReport.select=status,count(status) from fixity_item group by status
+TestFixityReport.mailTo=dloy@ucop.edu
+TestFixityItemReport.mailTo=dloy@ucop.edu
+TestFixityItemsReport.mailTo=dloy@ucop.edu
+
+mail.smtp.host=exchangemail.ad.ucop.edu
+mail.from=user@cdlib.org
+
+
+Store2Fixity.baseFile=C:/Documents and Settings/dloy/My Documents/MRTMaven/repository/fixity/node/store/pairtree_root/ar/k+/=1/30/30/=q/t1
+Store2Fixity.line=./k6/0c/4r/w/ark+=13030=qt1k60c4rw/v001/manifest.txt
+Store2Fixity.serverLink=http://localhost:28080/mrtfixity
+Store2Fixity.baseURL=http://localhost:28080/storage/content/10
+
+FixityPeriodicReport.frequency=60
+FixityPeriodicReport.delay=30
+FixityService=C:/Documents and Settings/dloy/My Documents/MRTMaven/fixity
+
+TestClientProcessFixity.url=http://localhost:28080/mrtfixity

File html-jsp/src/main/webapp/html/getdbpw.html

+<html>
+<head>
+    <title>Get database pw</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+<body>
+<h3>Get database pw</h3>
+<form METHOD=POST ACTION="../jsp/getdbpw.jsp">
+    db key: <input type="text" name="key" /><br />
+    <input type="submit" value="Submit" />
+</form>
+</body>
+</html>

File html-jsp/src/main/webapp/jsp/add.html

-<html>
-<head>
-    <title>Test Store</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-</head>
-<body>
-<h3>Test Store</h3>
-<form METHOD=PUT ACTION="add.jsp">
-<table>
-<tr>
-<td>
-Delivery format:<br>
-<input type="radio" name="format" value="xml" CHECKED>xml<br>
-<input type="radio" name="format" value="json">json<br>
-<input type="radio" name="format" value="turtle">turtle<br>
-<input type="radio" name="format" value="rdf">rdf<br>
-<input type="radio" name="format" value="xhtml">xhtml<br>
-<input type="radio" name="format" value="anvl">ANVL
-<input type="radio" name="format" value="">none
-</td>
-</tr>
-<tr>
-<td>
-Action:<br>
-<input type="radio" name="action" value="resume">resume<br>
-<input type="radio" name="action" value="pause">pause<br>
-<input type="radio" name="action" value="shutdown">shutdown<br>
-</td>
-</tr>
-
-</table>
-</form>
-</body>
-</html>

File html-jsp/src/main/webapp/jsp/add.jsp

-<%@ page import="java.util.*" %>
-<%@ page import="java.io.*" %>
-<%@ page import="org.cdlib.mrt.utility.*" %>
-<%@ page import="org.cdlib.mrt.core.*" %>
-<%
-    FixityClient client = new FixityClient();
-    StringBuffer servletPath = request.getRequestURL();
-    String path = servletPath.toString();
-    int pos = path.lastIndexOf("/");
-    if (pos >= 0) path = path.substring(0,pos);
-    pos = path.lastIndexOf("/");
-    if (pos >= 0) path = path.substring(0,pos);
-
-    String validate = request.getParameter("action");
-    String formatType = request.getParameter("format");
-    Properties prop = client.addVersion(
-            link,
-            nodeIDS,
-            objectIDS,
-            context,
-            identifier,
-            manifestS,
-            urlS,
-            validate,
-            formatType);
-    response.setContentType(prop.getProperty("header.Content-Type"));
-    String outdata = prop.getProperty("add.state");
-    //String outdata = PropertiesUtil.dumpProperties("add", prop);
-    out.clear();
-    out.print(outdata);
-%>

File html-jsp/src/main/webapp/jsp/add_example.jsp

-<%@ page import="java.util.*" %>
-<%@ page import="java.io.*" %>
-<%@ page import="org.cdlib.mrt.utility.*" %>
-<%
-    File test = new File("C:/Documents and Settings/dloy/My Documents/CDLMerritt/data/test/test.xml");
-    String outdata = FileUtil.file2String(test);
-    response.setContentType("text/xml");
-    out.clear();
-    out.print(outdata);
-%>

File html-jsp/src/main/webapp/jsp/getdbpw.jsp

+<%@page pageEncoding="UTF-8"%>
+<%@page contentType="text/html;charset=UTF-8"%>
+<%@ page import="org.cdlib.mrt.utility.URLEncoder" %>
+<%@ page import="java.util.*" %>
+<%@ page import="java.net.*" %>
+<%@ page import="org.cdlib.mrt.utility.*" %>
+<%@ page import="org.cdlib.mrt.fixity.db.FixityItemDB" %>
+<%
+    request.setCharacterEncoding("UTF-8");
+    String key = request.getParameter("key");
+    String msg = FixityItemDB.retrieveENC(key);
+%>
+<html>
+<head>
+    <title>Get database pw</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+<body>
+
+<h3>Get database pw</h3>
+<% if (StringUtil.isNotEmpty(msg)) { %>
+<table>
+    <tr>
+        <td><b>Input key:</b></td>
+        <td><%= key %>
+    </tr>
+    <tr>
+        <td><b>Encrypted key:</b></td>
+        <td><%= msg %>
+    </tr>
+</table>
+<% } else { %>
+<h4>ERROR: no value returned</h4>
+<% } %>
+</body>
+</html>

File html-jsp/src/main/webapp/jsp/service-badger.html

+<html>
+<head>
+    <title>Test Store</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+<body>
+<h3>Test Service</h3>
+<form METHOD=POST ACTION="http://badger.cdlib.org:33143/service/resume">
+<table>
+<tr>
+<td>
+<hr>
+<input type="submit" value="resume">
+</td></tr>
+</table>
+</form>
+
+<form METHOD=POST ACTION="http://badger.cdlib.org:33143/service/pause">
+<table>
+<tr>
+<td>
+<hr>
+<input type="submit" value="pause">
+</td></tr>
+</table>
+</form><form METHOD=POST ACTION="http://badger.cdlib.org:33143/service/shutdown">
+<table>
+<tr>
+<td>
+<hr>
+<input type="submit" value="shutdown">
+</td></tr>
+</table>
+</form>
+</body>
+</html>

File html-jsp/src/main/webapp/jsp/service-hokusai.html

+<html>
+<head>
+    <title>Test Store</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+</head>
+<body>
+<h3>Test Service</h3>
+<form METHOD=POST ACTION="http://hokusai.cdlib.org:28080/mrtfixity/service/resume">
+<table>
+<tr>
+<td>
+<hr>
+<input type="submit" value="resume">
+</td></tr>
+</table>
+</form>
+
+<form METHOD=POST ACTION="http://hokusai.cdlib.org:28080/mrtfixity/service/pause">
+<table>
+<tr>
+<td>
+<hr>
+<input type="submit" value="pause">
+</td></tr>
+</table>
+</form><form METHOD=POST ACTION="http://hokusai.cdlib.org:28080/mrtfixity/service/shutdown">
+<table>
+<tr>
+<td>
+<hr>
+<input type="submit" value="shutdown">
+</td></tr>
+</table>
+</form>
+</body>
+</html>

File html-jsp/src/main/webapp/jsp/testVersion.jsp

-<%@page pageEncoding="UTF-8"%>
-<%@page contentType="text/html;charset=UTF-8"%>
-<!-- filename: short-2-head-ctest -->
-<html>
-<head>
-    <title>Test Store</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-</head>
-<body>
-<h3>Test Store</h3>
-<form METHOD=POST ACTION="version.jsp">
-<table>
-<tr>
-<td>
-Remote Link: <input type="text" name="link" SIZE="60" value="http://localhost:28080/storage"><br>
-</td>
-</tr>
-<tr>
-<td>
-Delivery format:<br>
-<input type="radio" name="format" value="xml" checked>xml<br>
-<input type="radio" name="format" value="json">json<br>
-<input type="radio" name="format" value="turtle">turtle<br>
-<input type="radio" name="format" value="rdf">rdf<br>
-<input type="radio" name="format" value="xhtml">xhtml<br>
-<input type="radio" name="format" value="anvl">ANVL
-</td>
-</tr>
-<tr>
-<td>
-Archive format:<br>
-<input type="radio" name="archiveFormat" value="zip" checked>zip<br>
-<input type="radio" name="archiveFormat" value="targz" >tar.gz<br>
-<input type="radio" name="archiveFormat" value="tar">tar
-</td>
-</tr>
-<tr>
-<td>
-nodeID<INPUT TYPE=text name="nodeID" SIZE="5" MAXLENGTH=30 value="15">
-</td>
-</tr>
-<tr>
-<td>
-objectID<INPUT TYPE=text name="objectID" SIZE="30" MAXLENGTH=30 value="12345-abcde">
-</td>
-</tr>
-<tr>
-<td>
-versionID<INPUT TYPE=text name="versionID" SIZE="5" MAXLENGTH=30 value="3">
-</td>
-</tr>
-<tr>
-<td>
-fileName<INPUT TYPE=text name="fileName" SIZE="30" MAXLENGTH=30 value="fptr109.xls">
-</td>
-</tr>
-<tr>
-<td>
-context<INPUT TYPE=text name="context" SIZE="30" MAXLENGTH=30 value="UCI_GroupA001001">
-</td>
-</tr>
-<tr>
-<td>
-localID<INPUT TYPE=text name="localID" SIZE="30" MAXLENGTH=30 value="uci:10432">
-</td>
-</tr>
-<tr>
-<td>
-<hr>
-<input type="submit" name="submit" value="submit">
-</td></tr>
-</table>
-</form>
-</body>
-</html>
- 

File html-jsp/src/main/webapp/jsp/version.jsp

-<%@page pageEncoding="UTF-8"%>
-<%@page contentType="text/html;charset=UTF-8"%>
-<%@ page import="org.cdlib.mrt.utility.URLEncoder" %>
-<%@ page import="java.util.*" %>
-<%@ page import="java.net.*" %>
-<%@ page import="org.cdlib.mrt.utility.*" %>
-<%@ page import="org.cdlib.mrt.store.app.jersey.KeyNameHttpInf" %>
-<%
-    request.setCharacterEncoding("UTF-8");
-    StringBuffer servletPath = request.getRequestURL();
-    String path = servletPath.toString();
-    int pos = path.lastIndexOf("/");
-    if (pos >= 0) path = path.substring(0,pos);
-    pos = path.lastIndexOf("/");
-    if (pos >= 0) path = path.substring(0,pos);
-    String link = request.getParameter("link");
-    String locDir = link + "/" ;
-    String nodeID = request.getParameter("nodeID");
-    String objectID = request.getParameter("objectID");
-    if (objectID != null)
-        objectID = URLEncoder.encode(objectID, "UTF-8");
-    String versionID = request.getParameter("versionID");
-    String fileName = request.getParameter("fileName");
-    if (StringUtil.isNotEmpty(fileName)) 
-	    fileName = URLEncoder.encode(fileName, "UTF-8");
-    String context = request.getParameter("context");
-    if (StringUtil.isNotEmpty(context))
-	    context = URLEncoder.encode(context, "UTF-8");
-    String localID = request.getParameter("localID");
-    if (StringUtil.isNotEmpty(localID))
-	    localID = URLEncoder.encode(localID, "UTF-8");
-    String manifest = request.getParameter("manifest");
-    String manifestPath = request.getParameter("manifestPath");
-    String format = request.getParameter("format");
-    String archiveFormat = request.getParameter("archiveFormat");
-    String versionResponseMode = request.getParameter("responseMode");
-    if (StringUtil.isEmpty(format))
-	     format = "xml";
-
-%>
-<html>
-<head>
-    <title>Test Store Version</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-</head>
-<body>
-
-<h3>Test Store Version</h3>
-<h4><%= path %></h4>
-
-
-<h4>ServiceState - <%= locDir %>serviceState</h4>
-<form name="serviceState" method="get" action="<%= locDir %>state">
-   <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= format %>">
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>NodeState - <%= locDir %>nodeState/<%= nodeID %></h4>
-<form name="nodeState" method="get" action="<%= locDir %>state/<%= nodeID %>">
-   <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= format %>"><br>
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>ObjectState - <%= locDir %>state/<%= nodeID %>/<%= objectID %></h4>
-<form name="objectState" method="get" action="<%= locDir %>state/<%= nodeID %>/<%= objectID %>">
-   <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= format %>"><br>
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>VersionState - <%= locDir %>state/<%= nodeID %>/<%= objectID %>/0</h4>
-<form name="versionState" method="get" action="<%= locDir %>state/<%= nodeID %>/<%= objectID %>/0">
-   <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= format %>">
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>VersionState - <%= locDir %>state/<%= nodeID %>/<%= objectID %>/<%= versionID %></h4>
-<form name="versionState" method="get" action="<%= locDir %>state/<%= nodeID %>/<%= objectID %>/<%= versionID %>">
-   <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= format %>">
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>FileState - <%= locDir %>state/<%= nodeID %>/<%= objectID %>/<%= versionID %>/<%= fileName %></h4>
-<form name="fileState" method="get" action="<%= locDir %>state/<%= nodeID %>/<%= objectID %>/<%= versionID %>/<%= fileName %>">
-   <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= format %>">
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>FileFixityState - <%= locDir %>fixity/<%= nodeID %>/<%= objectID %>/<%= versionID %>/<%= fileName %></h4>
-<form name="fileFixityState" method="get" action="<%= locDir %>fixity/<%= nodeID %>/<%= objectID %>/<%= versionID %>/<%= fileName %>">
-   <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= format %>">
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>PrimaryIDState - <%= locDir %>primary/<%= nodeID %>/<%= context %>/<%= localID %></h4>
-<form name="versionState" method="get" action="<%= locDir %>primary/<%= nodeID %>/<%= context %>/<%= localID %>">
-   <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= format %>">
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>File - <%= locDir %>content/<%= nodeID %>/<%= objectID %>/<%= versionID %>/<%= fileName %></h4>
-<form name="fileState" method="get" action="<%= locDir %>content/<%= nodeID %>/<%= objectID %>/<%= versionID %>/<%= fileName %>">
-   <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= format %>">
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>VersionArchive - <%= locDir %>content/<%= nodeID %>/<%= objectID %>/<%= versionID %> ? t=<%= archiveFormat %></h4>
-<form name="versionArchive" method="get" action="<%= locDir %>content/<%= nodeID %>/<%= objectID %>/<%= versionID %>">
-   <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= archiveFormat %>">
-   <input type="hidden" name="r" value="by-value">
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>VersionLink - <%= locDir %>content/<%= nodeID %>/<%= objectID %>/<%= versionID %></h4>
-<form name="versionLink" method="get" action="<%= locDir %>content/<%= nodeID %>/<%= objectID %>/<%= versionID %>">
-   <input type="hidden" name="r" value="by-reference">
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>ObjectArchive - <%= locDir %>content/<%= nodeID %>/<%= objectID %> ? t=<%= archiveFormat %></h4>
-<form name="versionArchive" method="get" action="<%= locDir %>content/<%= nodeID %>/<%= objectID %>">
-   <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= archiveFormat %>">
-   <input type="hidden" name="r" value="by-value">
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>ObjectLink - <%= locDir %>content/<%= nodeID %>/<%= objectID %></h4>
-<form name="versionLink" method="get" action="<%= locDir %>content/<%= nodeID %>/<%= objectID %>">
-   <input type="hidden" name="r" value="by-reference">
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>AddLink - <%= locDir %>add/<%= nodeID %>/<%= objectID %></h4>
-<form name="addVersionLink" method="post" action="<%= locDir %>add/<%= nodeID %>/<%= objectID %>">
-Manifest URL: : <input type="text" name="url" SIZE="60" value="<%= path %>/manifest/testmanifest1.txt"><br>
-   <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= format %>">
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>AddMultipart - <%= locDir %>add/<%= nodeID %>/<%= objectID %></h4>
-<form action="<%= locDir %>add/<%= nodeID %>/<%= objectID %>"
-       name="addMultipart"
-       enctype="multipart/form-data"
-       method="post">
-Manifest File: : <input type="file" name="manifest" SIZE="60" value="<%= manifestPath %>"><br>
-   <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= format %>">
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-
-<h4>AddManifest - <%= locDir %>add/<%= nodeID %>/<%= objectID %></h4>
-<form name="addVersionManifest" method="post" action="<%= locDir %>add/<%= nodeID %>/<%= objectID %>">
-   <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= format %>">
-   <textarea rows="10" cols="60" name="manifest">
-   </textarea>
-   <input type="submit" value="Submit">
-</form>
-<hr/>
-
-<h4>deleteVersion - <%= locDir %>content/<%= nodeID %>/<%= objectID %></h4>
-<form name="deleteVersion" method="delete" action="<%= locDir %>content/<%= nodeID %>/<%= objectID %>">
-  <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= format %>"><br>
-  <input type="submit" value="Submit">
-</form>
-
-<h4>deleteObject - <%= locDir %>content/<%= nodeID %>/<%= objectID %></h4>
-<form name="deleteObject" method="delete" action="<%= locDir %>content/<%= nodeID %>/<%= objectID %>">
-  <input type="hidden" name="<%= KeyNameHttpInf.RESPONSEFORM %>" value="<%= format %>"><br>
-  <input type="submit" value="Submit">
-</form>
-
-</body>
-</html>