From d6d17c795a113873d087cd9e6ca6a312b1180cb4 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Tue, 9 Oct 2007 15:40:44 +0000 Subject: [PATCH] second approach SVN: 2076 --- .../cisd/bds/AbstractDataStructure.java | 29 +++++-- .../cisd/bds/DataStructureFactory.java | 83 +++++++++++++++++++ ...uctureV1_0.java => DataStructureV1_0.java} | 52 ++++++++---- .../cisd/bds/ExperimentIdentifier.java | 22 +++++ .../cisd/bds/IDataStructureFactory.java | 42 ---------- .../java/ch/systemsx/cisd/bds/IDirectory.java | 4 + .../java/ch/systemsx/cisd/bds/INode.java | 14 ++++ ...ataStructureFactory.java => IStorage.java} | 17 ++-- .../ch/systemsx/cisd/bds/ProcessingType.java | 12 +++ .../java/ch/systemsx/cisd/bds/Utilities.java | 53 ++++++++++++ .../java/ch/systemsx/cisd/bds/Version.java | 56 ++++++++++++- .../cisd/bds/container/Container.java | 37 ++++++--- .../cisd/bds/fs/DataStructureV1_0.java | 62 -------------- .../ch/systemsx/cisd/bds/fs/Directory.java | 19 +++++ ...StructureFactory.java => FileStorage.java} | 28 +++---- .../java/ch/systemsx/cisd/bds/fs/Link.java | 9 ++ .../ch/systemsx/cisd/bds/fs/StringFile.java | 7 ++ ...StructureFactory.java => HDF5Storage.java} | 26 +++--- 18 files changed, 394 insertions(+), 178 deletions(-) create mode 100644 bds/source/java/ch/systemsx/cisd/bds/DataStructureFactory.java rename bds/source/java/ch/systemsx/cisd/bds/{AbstractDataStructureV1_0.java => DataStructureV1_0.java} (53%) delete mode 100644 bds/source/java/ch/systemsx/cisd/bds/IDataStructureFactory.java rename bds/source/java/ch/systemsx/cisd/bds/{AbstractDataStructureFactory.java => IStorage.java} (63%) create mode 100644 bds/source/java/ch/systemsx/cisd/bds/Utilities.java delete mode 100644 bds/source/java/ch/systemsx/cisd/bds/fs/DataStructureV1_0.java rename bds/source/java/ch/systemsx/cisd/bds/fs/{FileDataStructureFactory.java => FileStorage.java} (51%) rename bds/source/java/ch/systemsx/cisd/bds/hdf5/{HDF5DataStructureFactory.java => HDF5Storage.java} (59%) diff --git a/bds/source/java/ch/systemsx/cisd/bds/AbstractDataStructure.java b/bds/source/java/ch/systemsx/cisd/bds/AbstractDataStructure.java index b06ae5a928f..48a917329da 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/AbstractDataStructure.java +++ b/bds/source/java/ch/systemsx/cisd/bds/AbstractDataStructure.java @@ -16,24 +16,39 @@ package ch.systemsx.cisd.bds; +import ch.systemsx.cisd.common.exceptions.UserFailureException; + /** * * * @author Franz-Josef Elmer */ -public abstract class AbstractDataStructure implements IDataStructure +public abstract class AbstractDataStructure implements IHasVersion { - private final String name; + protected final IStorage storage; + protected final IDirectory root; - public AbstractDataStructure(String name) + AbstractDataStructure(IStorage storage) { - assert name != null && name.length() > 0: "Unspecified name"; - this.name = name; + assert storage != null: "Unspecified storage."; + this.storage = storage; + root = storage.getRoot(); } - public String getName() + public void load() { - return name; + storage.load(); + Version loadedVersion = Version.loadFrom(root); + if (getVersion().isBackwardsCompatibleWith(loadedVersion) == false) + { + throw new UserFailureException("Version of loaded data structure is " + loadedVersion + + " which is not backward compatible with " + getVersion()); + } } + public void save() + { + getVersion().saveTo(root); + storage.save(); + } } diff --git a/bds/source/java/ch/systemsx/cisd/bds/DataStructureFactory.java b/bds/source/java/ch/systemsx/cisd/bds/DataStructureFactory.java new file mode 100644 index 00000000000..b039165e2e4 --- /dev/null +++ b/bds/source/java/ch/systemsx/cisd/bds/DataStructureFactory.java @@ -0,0 +1,83 @@ +/* + * Copyright 2007 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.bds; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; +import java.util.Map; + +import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; +import ch.systemsx.cisd.common.exceptions.UserFailureException; + +/** + * + * + * @author Franz-Josef Elmer + */ +public class DataStructureFactory +{ + private static final Map<Version, Class<? extends AbstractDataStructure>> repository = + new HashMap<Version, Class<? extends AbstractDataStructure>>(); + + void register(Version version, Class<? extends AbstractDataStructure> clazz) + { + repository.put(version, clazz); + } + + public static Class<? extends AbstractDataStructure> getDataStructureClassFor(Version version) + { + Class<? extends AbstractDataStructure> clazz = null; + for (Version v = version; v.getMinor() >= 0 && clazz == null; v = v.getPreviousMinorVersion()) + { + clazz = repository.get(v); + } + if (clazz == null) + { + throw new UserFailureException("No data structure class found for version " + version); + } + return clazz; + } + + public static AbstractDataStructure createDataStructure(IStorage storage, Version version) + { + Class<? extends AbstractDataStructure> clazz = getDataStructureClassFor(version); + Constructor<? extends AbstractDataStructure> constructor; + try + { + constructor = clazz.getConstructor(new Class[] {IStorage.class}); + } catch (Exception ex1) + { + throw new EnvironmentFailureException(clazz + " has no constructor with argument of type " + + IStorage.class.getCanonicalName()); + } + try + { + return constructor.newInstance(new Object[] {storage}); + } catch (InvocationTargetException ex) + { + throw new UserFailureException("Couldn't create data structure for version " + version, ex.getCause()); + } catch (Exception ex) + { + throw new UserFailureException("Couldn't create data structure for version " + version, ex); + } + } + + private DataStructureFactory() + { + } +} diff --git a/bds/source/java/ch/systemsx/cisd/bds/AbstractDataStructureV1_0.java b/bds/source/java/ch/systemsx/cisd/bds/DataStructureV1_0.java similarity index 53% rename from bds/source/java/ch/systemsx/cisd/bds/AbstractDataStructureV1_0.java rename to bds/source/java/ch/systemsx/cisd/bds/DataStructureV1_0.java index 8d46c817464..0d3d4e64671 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/AbstractDataStructureV1_0.java +++ b/bds/source/java/ch/systemsx/cisd/bds/DataStructureV1_0.java @@ -16,23 +16,20 @@ package ch.systemsx.cisd.bds; +import ch.systemsx.cisd.common.exceptions.UserFailureException; + /** * * * @author Franz-Josef Elmer */ -public abstract class AbstractDataStructureV1_0 extends AbstractDataStructure implements IDataStructureV1_0 +public class DataStructureV1_0 extends AbstractDataStructure { private static final Version VERSION = new Version(1, 0); - - private ExperimentIdentifier experimentIdentifier; - - private ProcessingType processingType; - - public AbstractDataStructureV1_0(String name) + public DataStructureV1_0(IStorage storage) { - super(name); + super(storage); } public Version getVersion() @@ -40,25 +37,46 @@ public abstract class AbstractDataStructureV1_0 extends AbstractDataStructure im return VERSION; } - public ExperimentIdentifier getExperimentIdentifier() + public IDirectory getOriginalData() { - return experimentIdentifier; + return Utilities.getSubDirectory(getDataDirectory(), "original"); } + public IFormatedData getFormatedData() + { + return null; + } + + public ExperimentIdentifier getExperimentIdentifier() + { + return ExperimentIdentifier.loadFrom(getMetaDataDirectory()); + } + public void setExperimentIdentifier(ExperimentIdentifier id) { - experimentIdentifier = id; + id.saveTo(getMetaDataDirectory()); } - + public ProcessingType getProcessingType() { - return processingType; + return ProcessingType.loadFrom(getMetaDataDirectory()); } - + public void setProcessingType(ProcessingType type) { - processingType = type; + type.saveTo(getMetaDataDirectory()); + } + + private IDirectory getDataDirectory() + { + IDirectory subDirectory = Utilities.getSubDirectory(root, "data"); + return subDirectory; + } + + private IDirectory getMetaDataDirectory() + { + IDirectory subDirectory = Utilities.getSubDirectory(root, "metadata"); + return subDirectory; } - - } + diff --git a/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifier.java b/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifier.java index 2020b0cb468..73c4353f586 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifier.java +++ b/bds/source/java/ch/systemsx/cisd/bds/ExperimentIdentifier.java @@ -24,6 +24,20 @@ package ch.systemsx.cisd.bds; */ public class ExperimentIdentifier { + private static final String FOLDER = "experiment_identifier"; + private static final String GROUP_CODE = "group_code"; + private static final String PROJECT_CODE = "project_code"; + private static final String EXPERIMENT_CODE = "experiment_code"; + + public static ExperimentIdentifier loadFrom(IDirectory directory) + { + IDirectory idFolder = Utilities.getSubDirectory(directory, FOLDER); + String groupCode = Utilities.getString(idFolder, GROUP_CODE); + String projectCode = Utilities.getString(idFolder, PROJECT_CODE); + String experimentCode = Utilities.getString(idFolder, EXPERIMENT_CODE); + return new ExperimentIdentifier(groupCode, projectCode, experimentCode); + } + private final String groupCode; private final String projectCode; private final String experimentCode; @@ -68,6 +82,14 @@ public class ExperimentIdentifier { return experimentCode; } + + public void saveTo(IDirectory directory) + { + IDirectory folder = directory.appendDirectory(FOLDER); + folder.appendKeyValuePair(GROUP_CODE, groupCode); + folder.appendKeyValuePair(PROJECT_CODE, projectCode); + folder.appendKeyValuePair(EXPERIMENT_CODE, experimentCode); + } @Override public boolean equals(Object obj) diff --git a/bds/source/java/ch/systemsx/cisd/bds/IDataStructureFactory.java b/bds/source/java/ch/systemsx/cisd/bds/IDataStructureFactory.java deleted file mode 100644 index 9ba3ce97725..00000000000 --- a/bds/source/java/ch/systemsx/cisd/bds/IDataStructureFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2007 ETH Zuerich, CISD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package ch.systemsx.cisd.bds; - -import ch.systemsx.cisd.common.exceptions.UserFailureException; - -/** - * Factory of {@link IDataStructure}. - * - * @author Franz-Josef Elmer - */ -public interface IDataStructureFactory -{ - /** - * Returns the subinterface of {@link IDataStructure} for the specified version. - * - * @throws UserFailureException if this factory can not create a data structure for the specified version. - */ - public Class<? extends IDataStructure> getDataStructureInterfaceFor(Version version) throws UserFailureException; - - /** - * Creates a new data structure of specified name and version. The return object implements the interface - * returned by {@link #getDataStructureInterfaceFor(Version)} for the same value of <code>version</code>. - * - * @throws UserFailureException if this factory can not create a data structure for the specified version. - */ - public IDataStructure createDataStructure(String name, Version version) throws UserFailureException; -} diff --git a/bds/source/java/ch/systemsx/cisd/bds/IDirectory.java b/bds/source/java/ch/systemsx/cisd/bds/IDirectory.java index 0b515a5c112..dc9c18da657 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/IDirectory.java +++ b/bds/source/java/ch/systemsx/cisd/bds/IDirectory.java @@ -25,6 +25,10 @@ import java.io.File; */ public interface IDirectory extends INode, Iterable<INode> { + public INode getNode(String name); + + public IDirectory appendDirectory(String name); + public void appendNode(INode node); public void appendRealFile(File file); diff --git a/bds/source/java/ch/systemsx/cisd/bds/INode.java b/bds/source/java/ch/systemsx/cisd/bds/INode.java index 47d50b1354b..4361171ded5 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/INode.java +++ b/bds/source/java/ch/systemsx/cisd/bds/INode.java @@ -16,6 +16,11 @@ package ch.systemsx.cisd.bds; +import java.io.File; + +import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; +import ch.systemsx.cisd.common.exceptions.UserFailureException; + /** * Role of a node in the data structure. * @@ -32,4 +37,13 @@ public interface INode * Returns the parent directory of this node or <code>null</code> if it is the root node. */ public IDirectory tryToGetParent(); + + /** + * Extracts this node to the specified directory of the file system. All descendants are also extracted. + * + * @throws UserFailureException if this or a descended node is a link referring to a node which is not this + * node or a descended node. + * @throws EnvironmentFailureException if extraction causes an IOException. + */ + public void extractTo(File directory) throws UserFailureException, EnvironmentFailureException; } diff --git a/bds/source/java/ch/systemsx/cisd/bds/AbstractDataStructureFactory.java b/bds/source/java/ch/systemsx/cisd/bds/IStorage.java similarity index 63% rename from bds/source/java/ch/systemsx/cisd/bds/AbstractDataStructureFactory.java rename to bds/source/java/ch/systemsx/cisd/bds/IStorage.java index bc9f10dfbf2..8441062e229 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/AbstractDataStructureFactory.java +++ b/bds/source/java/ch/systemsx/cisd/bds/IStorage.java @@ -16,21 +16,16 @@ package ch.systemsx.cisd.bds; -import java.io.File; - /** * * * @author Franz-Josef Elmer */ -public abstract class AbstractDataStructureFactory implements IDataStructureFactory +public interface IStorage { - protected final File baseDir; - - public AbstractDataStructureFactory(File baseDir) - { - assert baseDir != null : "Unspecified base directory."; - assert baseDir.isDirectory() : "Is not a directory : " + baseDir.getAbsolutePath(); - this.baseDir = baseDir; - } + public void load(); + + public IDirectory getRoot(); + + public void save(); } diff --git a/bds/source/java/ch/systemsx/cisd/bds/ProcessingType.java b/bds/source/java/ch/systemsx/cisd/bds/ProcessingType.java index d4031ad8a37..6717aff94fa 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/ProcessingType.java +++ b/bds/source/java/ch/systemsx/cisd/bds/ProcessingType.java @@ -26,6 +26,8 @@ public enum ProcessingType { OTHER, RAW_DATA, COMPUTED_DATA; + private static final String PROCESSING_TYPE = "processing_type"; + /** * Resolves the specified string representation of a processing type. * @@ -36,4 +38,14 @@ public enum ProcessingType ProcessingType type = valueOf(processingTypeString); return type == null ? OTHER : type; } + + public static ProcessingType loadFrom(IDirectory directory) + { + return resolve(Utilities.getString(directory, PROCESSING_TYPE)); + } + + public void saveTo(IDirectory directory) + { + directory.appendKeyValuePair(PROCESSING_TYPE, toString()); + } } diff --git a/bds/source/java/ch/systemsx/cisd/bds/Utilities.java b/bds/source/java/ch/systemsx/cisd/bds/Utilities.java new file mode 100644 index 00000000000..a352ebc55ad --- /dev/null +++ b/bds/source/java/ch/systemsx/cisd/bds/Utilities.java @@ -0,0 +1,53 @@ +/* + * Copyright 2007 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.bds; + +import ch.systemsx.cisd.common.exceptions.UserFailureException; + +/** + * + * + * @author Franz-Josef Elmer + */ +public class Utilities +{ + public static IDirectory getSubDirectory(IDirectory directory, String name) + { + INode node = directory.getNode(name); + if (node instanceof IDirectory == false) + { + throw new UserFailureException("Is not a directory: " + node); + } + return (IDirectory) node; + } + + public static String getString(IDirectory directory, String name) + { + INode node = directory.getNode(name); + if (node == null) + { + throw new UserFailureException("File '" + name + "' missing in " + directory); + } + if (node instanceof IFile<?> == false) + { + throw new UserFailureException(node + " is not a file."); + } + IFile<?> file = (IFile<?>) node; + return file.getValue().toString(); + } + +} diff --git a/bds/source/java/ch/systemsx/cisd/bds/Version.java b/bds/source/java/ch/systemsx/cisd/bds/Version.java index 8dbdc15d640..4bc6052125e 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/Version.java +++ b/bds/source/java/ch/systemsx/cisd/bds/Version.java @@ -16,13 +16,37 @@ package ch.systemsx.cisd.bds; +import ch.systemsx.cisd.common.exceptions.UserFailureException; + /** - * Immutable value object for the version of something. + * Immutable value object for the version of something. * * @author Franz-Josef Elmer */ public final class Version { + private static final String VERSION = "version"; + private static final String MAJOR = "major"; + private static final String MINOR = "minor"; + + public static Version loadFrom(IDirectory directory) + { + IDirectory versionFolder = Utilities.getSubDirectory(directory, VERSION); + return new Version(getNumber(versionFolder, MAJOR), getNumber(versionFolder, MINOR)); + } + + private static int getNumber(IDirectory versionFolder, String name) + { + String value = Utilities.getString(versionFolder, name); + try + { + return Integer.parseInt(value); + } catch (NumberFormatException ex) + { + throw new UserFailureException("Value of " + name + " version file is not a number: " + value); + } + } + private final int major; private final int minor; @@ -55,6 +79,36 @@ public final class Version { return minor; } + + /** + * Returns true if this version is backwards compatible to the specified version. That is, + * if <code>version.getMajor() == this.getMajor()</code> and <code>version.getMinor() <= this.getMinor()</code>. + */ + public boolean isBackwardsCompatibleWith(Version version) + { + return version.major == major && version.minor <= minor; + } + + /** + * Returns the previous minor version. + * + * @throws UserFailureException if minor version is 0. + */ + public Version getPreviousMinorVersion() + { + if (minor == 0) + { + throw new UserFailureException("There is no previous minor version of " + this); + } + return new Version(major, minor - 1); + } + + public void saveTo(IDirectory directory) + { + IDirectory versionFolder = directory.appendDirectory(VERSION); + versionFolder.appendKeyValuePair(MAJOR, Integer.toString(major)); + versionFolder.appendKeyValuePair(MINOR, Integer.toString(minor)); + } @Override public boolean equals(Object obj) diff --git a/bds/source/java/ch/systemsx/cisd/bds/container/Container.java b/bds/source/java/ch/systemsx/cisd/bds/container/Container.java index 0a95d6e76e1..e5437cb0cdd 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/container/Container.java +++ b/bds/source/java/ch/systemsx/cisd/bds/container/Container.java @@ -18,10 +18,14 @@ package ch.systemsx.cisd.bds.container; import java.io.File; +import ch.systemsx.cisd.bds.AbstractDataStructure; +import ch.systemsx.cisd.bds.DataStructureFactory; import ch.systemsx.cisd.bds.IDataStructure; -import ch.systemsx.cisd.bds.IDataStructureFactory; -import ch.systemsx.cisd.bds.fs.FileDataStructureFactory; -import ch.systemsx.cisd.bds.hdf5.HDF5DataStructureFactory; +import ch.systemsx.cisd.bds.IStorage; +import ch.systemsx.cisd.bds.Utilities; +import ch.systemsx.cisd.bds.Version; +import ch.systemsx.cisd.bds.fs.FileStorage; +import ch.systemsx.cisd.bds.hdf5.HDF5Storage; import ch.systemsx.cisd.common.exceptions.UserFailureException; /** @@ -40,25 +44,32 @@ public class Container this.baseDir = baseDir; } - public IDataStructure load(String name) + public AbstractDataStructure load(String name) + { + IStorage storage = createStorage(name); + storage.load(); + Version version = Version.loadFrom(storage.getRoot()); + return DataStructureFactory.createDataStructure(storage, version); + } + + private IStorage createStorage(String name) { File file = new File(baseDir, name); if (file.exists() == false) { throw new UserFailureException("No container name '" + name + "' exists in " + baseDir.getAbsolutePath()); } - IDataStructureFactory dataStructureFactory; if (file.isDirectory()) { - dataStructureFactory = new FileDataStructureFactory(baseDir); - } else if (new File(baseDir, name + ".hdf5").exists()) - { - dataStructureFactory = new HDF5DataStructureFactory(baseDir); - } else + return new FileStorage(file); + } + File hdf5File = new File(baseDir, name + ".hdf5"); + if (hdf5File.exists()) { - throw new UserFailureException("Couldn't found appropriate container named '" + name + "' in " - + baseDir.getAbsolutePath()); + return new HDF5Storage(hdf5File); } - return dataStructureFactory.createDataStructure(name, null); + throw new UserFailureException("Couldn't found appropriate container named '" + name + "' in " + + baseDir.getAbsolutePath()); + } } diff --git a/bds/source/java/ch/systemsx/cisd/bds/fs/DataStructureV1_0.java b/bds/source/java/ch/systemsx/cisd/bds/fs/DataStructureV1_0.java deleted file mode 100644 index 9cdbc3e726d..00000000000 --- a/bds/source/java/ch/systemsx/cisd/bds/fs/DataStructureV1_0.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2007 ETH Zuerich, CISD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package ch.systemsx.cisd.bds.fs; - -import java.io.File; - -import ch.systemsx.cisd.bds.AbstractDataStructureV1_0; -import ch.systemsx.cisd.bds.IDirectory; -import ch.systemsx.cisd.bds.IFormatedData; -import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; - -/** - * - * - * @author Franz-Josef Elmer - */ -class DataStructureV1_0 extends AbstractDataStructureV1_0 -{ - private final File baseDir; - - public DataStructureV1_0(String name, File baseDir) - { - super(name); - assert baseDir != null : "Unspecified base directory."; - assert baseDir.isDirectory() : "Is not a directory: " + baseDir.getAbsolutePath(); - this.baseDir = baseDir; - } - - public IFormatedData getFormatedData() - { - // TODO Auto-generated method stub - return null; - } - - public IDirectory getOriginalData() - { - // TODO Auto-generated method stub - return null; - } - - public void save() throws EnvironmentFailureException - { - // TODO Auto-generated method stub - System.out.println(baseDir); - - } - -} diff --git a/bds/source/java/ch/systemsx/cisd/bds/fs/Directory.java b/bds/source/java/ch/systemsx/cisd/bds/fs/Directory.java index 56b3061f354..b7ecbc8c262 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/fs/Directory.java +++ b/bds/source/java/ch/systemsx/cisd/bds/fs/Directory.java @@ -24,6 +24,7 @@ import java.util.Iterator; import ch.systemsx.cisd.bds.IDirectory; import ch.systemsx.cisd.bds.INode; import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; +import ch.systemsx.cisd.common.exceptions.UserFailureException; /** * @@ -38,6 +39,18 @@ class Directory extends AbstractNode implements IDirectory assert directory.isDirectory() : "Not a directory: " + directory.getAbsolutePath(); } + public INode getNode(String name) + { + // TODO Auto-generated method stub + return null; + } + + public IDirectory appendDirectory(String name) + { + // TODO Auto-generated method stub + return null; + } + public void appendKeyValuePair(String key, String value) { File file = new File(fileNode, key); @@ -81,4 +94,10 @@ class Directory extends AbstractNode implements IDirectory return null; } + public void extractTo(File directory) throws UserFailureException, EnvironmentFailureException + { + // TODO Auto-generated method stub + + } + } diff --git a/bds/source/java/ch/systemsx/cisd/bds/fs/FileDataStructureFactory.java b/bds/source/java/ch/systemsx/cisd/bds/fs/FileStorage.java similarity index 51% rename from bds/source/java/ch/systemsx/cisd/bds/fs/FileDataStructureFactory.java rename to bds/source/java/ch/systemsx/cisd/bds/fs/FileStorage.java index 8d04d284e3a..aefe534501b 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/fs/FileDataStructureFactory.java +++ b/bds/source/java/ch/systemsx/cisd/bds/fs/FileStorage.java @@ -18,34 +18,34 @@ package ch.systemsx.cisd.bds.fs; import java.io.File; -import ch.systemsx.cisd.bds.AbstractDataStructureFactory; -import ch.systemsx.cisd.bds.IDataStructure; -import ch.systemsx.cisd.bds.Version; -import ch.systemsx.cisd.common.exceptions.UserFailureException; +import ch.systemsx.cisd.bds.IDirectory; +import ch.systemsx.cisd.bds.IStorage; /** * * * @author Franz-Josef Elmer */ -public class FileDataStructureFactory extends AbstractDataStructureFactory +public class FileStorage implements IStorage { + private Directory root; - public FileDataStructureFactory(File baseDir) + public FileStorage(File folder) { - super(baseDir); + root = new Directory(folder); + } + + public IDirectory getRoot() + { + return root; } - public Class<? extends IDataStructure> getDataStructureInterfaceFor(Version version) throws UserFailureException + public void load() { - // TODO Auto-generated method stub - return null; } - public IDataStructure createDataStructure(String name, Version version) throws UserFailureException + public void save() { - // TODO Auto-generated method stub - return null; } - + } diff --git a/bds/source/java/ch/systemsx/cisd/bds/fs/Link.java b/bds/source/java/ch/systemsx/cisd/bds/fs/Link.java index a1ddf4a6425..09dc58b4e50 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/fs/Link.java +++ b/bds/source/java/ch/systemsx/cisd/bds/fs/Link.java @@ -16,9 +16,13 @@ package ch.systemsx.cisd.bds.fs; +import java.io.File; + import ch.systemsx.cisd.bds.IDirectory; import ch.systemsx.cisd.bds.ILink; import ch.systemsx.cisd.bds.INode; +import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; +import ch.systemsx.cisd.common.exceptions.UserFailureException; /** * @@ -58,4 +62,9 @@ class Link implements ILink return reference; } + public void extractTo(File directory) throws UserFailureException, EnvironmentFailureException + { + // TODO Auto-generated method stub + } + } diff --git a/bds/source/java/ch/systemsx/cisd/bds/fs/StringFile.java b/bds/source/java/ch/systemsx/cisd/bds/fs/StringFile.java index 5e651af966d..1061b43852b 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/fs/StringFile.java +++ b/bds/source/java/ch/systemsx/cisd/bds/fs/StringFile.java @@ -19,6 +19,8 @@ package ch.systemsx.cisd.bds.fs; import java.io.File; import ch.systemsx.cisd.bds.IFile; +import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; +import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.utilities.FileUtilities; /** @@ -39,4 +41,9 @@ class StringFile extends AbstractNode implements IFile<String> return FileUtilities.loadToString(fileNode); } + public void extractTo(File directory) throws UserFailureException, EnvironmentFailureException + { + // TODO Auto-generated method stub + } + } diff --git a/bds/source/java/ch/systemsx/cisd/bds/hdf5/HDF5DataStructureFactory.java b/bds/source/java/ch/systemsx/cisd/bds/hdf5/HDF5Storage.java similarity index 59% rename from bds/source/java/ch/systemsx/cisd/bds/hdf5/HDF5DataStructureFactory.java rename to bds/source/java/ch/systemsx/cisd/bds/hdf5/HDF5Storage.java index 76ef69f2610..04c04c6c3bc 100644 --- a/bds/source/java/ch/systemsx/cisd/bds/hdf5/HDF5DataStructureFactory.java +++ b/bds/source/java/ch/systemsx/cisd/bds/hdf5/HDF5Storage.java @@ -18,33 +18,37 @@ package ch.systemsx.cisd.bds.hdf5; import java.io.File; -import ch.systemsx.cisd.bds.AbstractDataStructureFactory; -import ch.systemsx.cisd.bds.IDataStructure; -import ch.systemsx.cisd.bds.Version; -import ch.systemsx.cisd.common.exceptions.UserFailureException; +import ch.systemsx.cisd.bds.IDirectory; +import ch.systemsx.cisd.bds.IStorage; /** * * * @author Franz-Josef Elmer */ -public class HDF5DataStructureFactory extends AbstractDataStructureFactory +public class HDF5Storage implements IStorage { - public HDF5DataStructureFactory(File baseDir) + public HDF5Storage(File hdf5File) { - super(baseDir); + assert hdf5File != null : "Unspecified HDF5 file."; } - - public IDataStructure createDataStructure(String name, Version version) throws UserFailureException + + public IDirectory getRoot() { // TODO Auto-generated method stub return null; } - public Class<? extends IDataStructure> getDataStructureInterfaceFor(Version version) throws UserFailureException + public void load() { // TODO Auto-generated method stub - return null; + + } + + public void save() + { + // TODO Auto-generated method stub + } } -- GitLab