diff --git a/bds/source/java/ch/systemsx/cisd/bds/AbstractDataStructure.java b/bds/source/java/ch/systemsx/cisd/bds/AbstractDataStructure.java index b06ae5a928feead895c22e923daff7b7cbc59077..48a917329dafaec87ff32ffe9443d5ea01928558 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 0000000000000000000000000000000000000000..b039165e2e4d17ae62f32c5cd58f8cb925283843 --- /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 8d46c817464f3ba4b2b52ece26dbd926d7946a91..0d3d4e6467167e5732c4298ed1b6e3b2cdbb5b0e 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 2020b0cb4687fd5ffcd8ca82f269f6a9b69bf5b9..73c4353f586726cdb4fd37359ba24a7e8104078b 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 9ba3ce97725876025d62f1c5310115d06342b576..0000000000000000000000000000000000000000 --- 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 0b515a5c112ab320d7b9a8368c1e3e48be549710..dc9c18da657e83183511e5165bcf30d5082c52ee 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 47d50b1354ba413cf7cada1d64404e83dd9a071f..4361171ded5a5ce15e283599777b27a9f6d0220f 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 bc9f10dfbf2d954041be7f8ab047fcb6dde2ca16..8441062e2298fd00ed4a4619c473c24c69dcf005 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 d4031ad8a376164a9a8c790064398bb3ed818193..6717aff94faff53b928941feda9f52e9f1dff846 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 0000000000000000000000000000000000000000..a352ebc55ad3d9f2b40c8b57cc5ebc9b7f5ce617 --- /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 8dbdc15d640dfc887c10dd894294cf87bfc78452..4bc6052125efa968d0dd6e211c6893205c6fa1c5 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 0a95d6e76e152955de6bbb0941b04bd0a86cdceb..e5437cb0cdd3aba9063da83538095ab1e7a52ff4 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 9cdbc3e726deabe8e078e7be662429614505fbbf..0000000000000000000000000000000000000000 --- 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 56b3061f3549f20061e1984afaec01ab7c4354e3..b7ecbc8c26268d3934424751f36a5bca0c8f6cbd 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 8d04d284e3a1290870a15bf5c6e96f51411eab66..aefe534501bb6dc334b11d82e8bfeda9aa480175 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 a1ddf4a6425f82897baeab62dc8c2bf98f4f1380..09dc58b4e50ad35385a01b5cedca166ef44e63d0 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 5e651af966d9281ba163618f0e57f7945496c9f1..1061b43852b58a8946c25744fc16f4cbeccb02d1 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 76ef69f26107ab41cc436befdd111402ad1f087a..04c04c6c3bcf508c693cd6dbc398f85837ca57ce 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 + } }