From 7e400021726a3e77e645f4d542f34506914e862a Mon Sep 17 00:00:00 2001
From: "Brian S. O'Neill" <bronee@gmail.com>
Date: Sun, 8 Oct 2006 02:07:18 +0000
Subject: Added file system sample.

---
 .../com/amazon/carbonado/sample/FileInfoTest.java  | 92 ++++++++++++++++++++++
 .../java/com/amazon/carbonado/stored/FileInfo.java |  9 ---
 2 files changed, 92 insertions(+), 9 deletions(-)
 create mode 100644 src/test/java/com/amazon/carbonado/sample/FileInfoTest.java

(limited to 'src/test/java')

diff --git a/src/test/java/com/amazon/carbonado/sample/FileInfoTest.java b/src/test/java/com/amazon/carbonado/sample/FileInfoTest.java
new file mode 100644
index 0000000..0f38de7
--- /dev/null
+++ b/src/test/java/com/amazon/carbonado/sample/FileInfoTest.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2006 Amazon Technologies, Inc. or its affiliates.
+ * Amazon, Amazon.com and Carbonado are trademarks or registered trademarks
+ * of Amazon Technologies, Inc. or its affiliates.  All rights reserved.
+ *
+ * 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 com.amazon.carbonado.sample;
+
+import java.io.File;
+import java.io.InputStream;
+
+import org.joda.time.DateTime;
+
+import com.amazon.carbonado.Cursor;
+import com.amazon.carbonado.Query;
+import com.amazon.carbonado.Repository;
+import com.amazon.carbonado.Storage;
+
+import com.amazon.carbonado.lob.FileBlob;
+
+import com.amazon.carbonado.repo.sleepycat.BDBRepositoryBuilder;
+
+import com.amazon.carbonado.stored.FileInfo;
+
+/**
+ * Test program which implements storage for a simple indexed file system.
+ *
+ * @author Brian S O'Neill
+ */
+public class FileInfoTest {
+    public static Storage<FileInfo> openStorage(String envHome) throws Exception {
+        BDBRepositoryBuilder builder = new BDBRepositoryBuilder();
+        builder.setName("Simple file system");
+        builder.setEnvironmentHome(envHome);
+        builder.setTransactionNoSync(true);
+        //builder.setProduct("DB");
+
+        Repository repository = builder.build();
+        return repository.storageFor(FileInfo.class);
+    }
+
+    /**
+     * @param args [0] - BDB environment home, [1] - optional directory to read
+     * files from for populating the simple file system
+     */
+    public static void main(String[] args) throws Exception {
+        Storage<FileInfo> storage = openStorage(args[0]);
+        if (args.length > 1) {
+            populate(storage, new File(args[1]), null);
+        }
+    }
+
+    private static void populate(Storage<FileInfo> storage, File file, FileInfo parent)
+        throws Exception
+    {
+        FileInfo info = storage.prepare();
+        if (parent != null) {
+            info.setParentID(parent.getID());
+        }
+        info.setName(file.getName());
+        info.setLastModified(new DateTime(file.lastModified()));
+
+        if (file.isFile()) {
+            info.setDirectory(false);
+            info.setLength(file.length());
+            info.setFileData(new FileBlob(file));
+            info.insert();
+        } else if (file.isDirectory()) {
+            info.setDirectory(true);
+            info.setLength(-1);
+            info.insert();
+            File[] children = file.listFiles();
+            if (children != null) {
+                for (int i=0; i<children.length; i++) {
+                    populate(storage, children[i], info);
+                }
+            }
+        }
+    }
+}
diff --git a/src/test/java/com/amazon/carbonado/stored/FileInfo.java b/src/test/java/com/amazon/carbonado/stored/FileInfo.java
index 7d35faf..c3245e3 100644
--- a/src/test/java/com/amazon/carbonado/stored/FileInfo.java
+++ b/src/test/java/com/amazon/carbonado/stored/FileInfo.java
@@ -45,18 +45,15 @@ import com.amazon.carbonado.adapter.*;
 public abstract class FileInfo implements Storable {
     @Sequence("com.amazon.carbonado.storables.FileInfo")
     public abstract int getID();
-
     public abstract void setID(int value);
 
     @Nullable
     public abstract Integer getParentID();
-
     public abstract void setParentID(Integer id);
 
     @Nullable
     @Join(internal="parentID", external="ID")
     public abstract FileInfo getParent() throws FetchException;
-
     public abstract void setParent(FileInfo value);
 
     @Join(internal="ID", external="parentID")
@@ -64,33 +61,27 @@ public abstract class FileInfo implements Storable {
 
     @Alias("FILE_NAME")
     public abstract String getName();
-
     public abstract void setName(String value);
 
     @YesNoAdapter
     public abstract boolean isDirectory();
-
     public abstract void setDirectory(boolean value);
 
     @Alias("FILE_LENGTH")
     public abstract long getLength();
-
     public abstract void setLength(long value);
 
     @Nullable
     public abstract DateTime getLastModified();
-
     public abstract void setLastModified(DateTime value);
 
     @Version
     @Alias("RECORD_VERSION_NUMBER")
     public abstract int getVersionNumber();
-
     public abstract void setVersionNumber(int version);
 
     @Nullable
     public abstract Blob getFileData();
-
     public abstract void setFileData(Blob data);
 
     public String getFullPath() throws FetchException {
-- 
cgit v1.2.3