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