From 584af6db766f9d09770e891fd156b4a89808a4a2 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Thu, 25 Oct 2007 15:54:02 +0000
Subject: [PATCH] add variant to Format

SVN: 2255
---
 .../java/ch/systemsx/cisd/bds/Format.java     | 40 ++++++++++++++++---
 .../systemsx/cisd/bds/UnknownFormat1_0.java   |  2 +-
 .../cisd/bds/DataStructureV1_0Test.java       |  8 ++--
 3 files changed, 39 insertions(+), 11 deletions(-)

diff --git a/bds/source/java/ch/systemsx/cisd/bds/Format.java b/bds/source/java/ch/systemsx/cisd/bds/Format.java
index 06c5bcfd8b0..5d780694f15 100644
--- a/bds/source/java/ch/systemsx/cisd/bds/Format.java
+++ b/bds/source/java/ch/systemsx/cisd/bds/Format.java
@@ -29,6 +29,7 @@ public class Format
 {
     static final String FORMAT_CODE_FILE = "format_code";
     static final String FORMAT_DIR = "format";
+    static final String FORMAT_VARIANT_FILE = "format_variant";
 
     /**
      * Loads the format from the specified directory.
@@ -51,21 +52,33 @@ public class Format
         IFile codeFile = (IFile) file;
         String formatCode = codeFile.getStringContent().trim();
         Version formatVersion = Version.loadFrom(formatDir);
-        return new Format(formatCode, formatVersion);
+        String variant = null;
+        file = formatDir.tryToGetNode(FORMAT_VARIANT_FILE);
+        if (file != null)
+        {
+            if (file instanceof IFile == false)
+            {
+                throw new DataStructureException("Not a plain file: " + file);
+            }
+            variant = ((IFile) file).getStringContent().trim();
+        }
+        return new Format(formatCode, formatVersion, variant);
     }
     
     private final String code;
     private final Version version;
+    private final String variant;
 
     /**
-     * Creates a new instance based on the specified format code and version.
+     * Creates a new instance based on the specified format code, format variant (optional), and version.
      */
-    public Format(String code, Version version)
+    public Format(String code, Version version, String variantOrNull)
     {
         assert code != null : "Unspecified format code.";
         assert version != null : "Unpsecified version.";
         this.code = code;
         this.version = version;
+        variant = variantOrNull;
     }
     
     /**
@@ -84,11 +97,25 @@ public class Format
         return version;
     }
 
+    /**
+     * Returns the format variant.
+     * 
+     * @return <code>null</code> if undefined.
+     */
+    public final String getVariant()
+    {
+        return variant;
+    }
+
     void saveTo(IDirectory directory)
     {
         IDirectory dir = directory.makeDirectory(FORMAT_DIR);
         dir.addKeyValuePair(FORMAT_CODE_FILE, code);
         version.saveTo(dir);
+        if (variant != null)
+        {
+            dir.addKeyValuePair(FORMAT_VARIANT_FILE, variant);
+        }
     }
 
     @Override
@@ -103,19 +130,20 @@ public class Format
             return false;
         }
         Format format = (Format) obj;
-        return format.code.equals(code) && format.version.equals(version);
+        return format.code.equals(code) && format.version.equals(version) 
+                && (format.variant == null ? null == variant : format.variant.equals(variant));
     }
 
     @Override
     public int hashCode()
     {
-        return code.hashCode() * 37 + version.hashCode();
+        return (code.hashCode() * 37 + version.hashCode()) * 37 + (variant == null ? 0 : variant.hashCode());
     }
 
     @Override
     public String toString()
     {
-        return "Format: " + code + " " + version;
+        return "Format: " + code + " " + version + (variant == null ? "" : "[" + variant + "]");
     }
 
 }
diff --git a/bds/source/java/ch/systemsx/cisd/bds/UnknownFormat1_0.java b/bds/source/java/ch/systemsx/cisd/bds/UnknownFormat1_0.java
index db7ca5f0e92..cec05c6e51c 100644
--- a/bds/source/java/ch/systemsx/cisd/bds/UnknownFormat1_0.java
+++ b/bds/source/java/ch/systemsx/cisd/bds/UnknownFormat1_0.java
@@ -30,7 +30,7 @@ public final class UnknownFormat1_0 extends Format
 
     private UnknownFormat1_0()
     {
-        super("UNKNOWN", new Version(1, 0));
+        super("UNKNOWN", new Version(1, 0), null);
     }
 
     
diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureV1_0Test.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureV1_0Test.java
index 21567dd80c3..3fb10173646 100644
--- a/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureV1_0Test.java
+++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/DataStructureV1_0Test.java
@@ -467,7 +467,7 @@ public class DataStructureV1_0Test
         storage.mount();
         IDirectory root = storage.getRoot();
         IDirectory metaData = Utilities.getSubDirectory(root, DataStructureV1_0.DIR_METADATA);
-        new Format(UnknownFormat1_0.UNKNOWN_1_0.getCode(), new Version(1, 1)).saveTo(metaData);
+        new Format(UnknownFormat1_0.UNKNOWN_1_0.getCode(), new Version(1, 1), null).saveTo(metaData);
         storage.unmount();
         dataStructure.open();
         assertEquals(UnknownFormat1_0.UNKNOWN_1_0, dataStructure.getFormatedData().getFormat());
@@ -480,7 +480,7 @@ public class DataStructureV1_0Test
         storage.mount();
         IDirectory root = storage.getRoot();
         IDirectory metaData = Utilities.getSubDirectory(root, DataStructureV1_0.DIR_METADATA);
-        new Format(UnknownFormat1_0.UNKNOWN_1_0.getCode(), new Version(2, 0)).saveTo(metaData);
+        new Format(UnknownFormat1_0.UNKNOWN_1_0.getCode(), new Version(2, 0), null).saveTo(metaData);
         storage.unmount();
         dataStructure.open();
         try
@@ -500,7 +500,7 @@ public class DataStructureV1_0Test
         storage.mount();
         IDirectory root = storage.getRoot();
         IDirectory metaData = Utilities.getSubDirectory(root, DataStructureV1_0.DIR_METADATA);
-        new Format("another format", new Version(1,1)).saveTo(metaData);
+        new Format("another format", new Version(1, 1), null).saveTo(metaData);
         storage.unmount();
         dataStructure.open();
         assertEquals(UnknownFormat1_0.UNKNOWN_1_0, dataStructure.getFormatedData().getFormat());
@@ -516,7 +516,7 @@ public class DataStructureV1_0Test
         IDirectory originalDataDir = data.makeDirectory(DataStructureV1_0.DIR_ORIGINAL);
         originalDataDir.addKeyValuePair("hello", "world");
         IDirectory metaData = root.makeDirectory(DataStructureV1_0.DIR_METADATA);
-        new Format(UnknownFormat1_0.UNKNOWN_1_0.getCode(), new Version(2, 0)).saveTo(metaData);
+        new Format(UnknownFormat1_0.UNKNOWN_1_0.getCode(), new Version(2, 0), null).saveTo(metaData);
         new ExperimentIdentifier("g", "p", "e").saveTo(metaData);
         new ExperimentRegistratorDate(new Date(0)).saveTo(metaData);
         new ExperimentRegistrator("john", "doe", "j@doe").saveTo(metaData);
-- 
GitLab