]> source.dussan.org Git - jackcess.git/commitdiff
add TableBuilder utility
authorJames Ahlborn <jtahlborn@yahoo.com>
Thu, 20 Mar 2008 16:26:02 +0000 (16:26 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Thu, 20 Mar 2008 16:26:02 +0000 (16:26 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@287 f203690c-595d-4dc9-a70b-905162fa7fd2

src/changes/changes.xml
src/java/com/healthmarketscience/jackcess/TableBuilder.java [new file with mode: 0644]
test/src/java/com/healthmarketscience/jackcess/CursorTest.java
test/src/java/com/healthmarketscience/jackcess/DatabaseTest.java
test/src/java/com/healthmarketscience/jackcess/IndexCodesTest.java

index 3180b1307c62826caf4d2620474fe3902fc6d265..b7a72583c12db06af21c658ae053e7561ae98c98 100644 (file)
         Add some soft buffer caching in various places to avoid excessive
         buffer reallocation.
       </action>
+      <action dev="jahlborn" type="add">
+        Add some builder-style utilities for table creation (ColumnBuilder,
+        TableBuilder).
+      </action>
     </release>
     <release version="1.1.12" date="2008-02-27">
       <action dev="jahlborn" type="fix">
diff --git a/src/java/com/healthmarketscience/jackcess/TableBuilder.java b/src/java/com/healthmarketscience/jackcess/TableBuilder.java
new file mode 100644 (file)
index 0000000..b530252
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright (c) 2008 Health Market Science, Inc.
+
+package com.healthmarketscience.jackcess;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Builder style class for constructing a Column.
+ *
+ * @author James Ahlborn
+ */
+public class TableBuilder {
+
+  /** name of the new table */
+  private String _name;
+  /** columns for the new table */
+  private List<Column> _columns = new ArrayList<Column>();
+  
+  public TableBuilder(String name) {
+    _name = name;
+  }
+
+  /**
+   * Adds a Column to the new table.
+   */
+  public TableBuilder addColumn(Column column) {
+    _columns.add(column);
+    return this;
+  }
+
+  /**
+   * Creates a new Table in the given Database with the currently configured
+   * attributes.
+   */
+  public Table toTable(Database db)
+    throws IOException
+  {
+    db.createTable(_name, _columns);
+    return db.getTable(_name);
+  }
+  
+}
index f001a792862c3d139f12e340e70bd50577b449cf..9cf15c9e7cfcb9871a41ef18a3cbb72cd2f9cac0 100644 (file)
@@ -73,12 +73,11 @@ public class CursorTest extends TestCase {
   private static Database createTestTable() throws Exception {
     Database db = create();
 
-    List<Column> columns = new ArrayList<Column>();
-    columns.add(new ColumnBuilder("id", DataType.LONG).toColumn());
-    columns.add(new ColumnBuilder("value", DataType.TEXT).toColumn());
-    db.createTable("test", columns);
+    Table table = new TableBuilder("test")
+      .addColumn(new ColumnBuilder("id", DataType.LONG).toColumn())
+      .addColumn(new ColumnBuilder("value", DataType.TEXT).toColumn())
+      .toTable(db);
 
-    Table table = db.getTable("test");
     for(Map<String,Object> row : createTestTableData()) {
       table.addRow(row.get("id"), row.get("value"));
     }
index a8c77fa978776e940571ac680dfdb75edf6f001f..90c57b1e1d95903e82ca4641a1756225e63e3380 100644 (file)
@@ -98,35 +98,36 @@ public class DatabaseTest extends TestCase {
     } catch(IllegalArgumentException e) {
       // success
     }
-    
-    List<Column> columns = new ArrayList<Column>();
-    columns.add(new ColumnBuilder("A", DataType.TEXT).toColumn());
-    columns.add(new ColumnBuilder("a", DataType.MEMO).toColumn());
 
     try {
-      db.createTable("test", columns);
+      new TableBuilder("test")
+        .addColumn(new ColumnBuilder("A", DataType.TEXT).toColumn())
+        .addColumn(new ColumnBuilder("a", DataType.MEMO).toColumn())
+        .toTable(db);
       fail("created table with duplicate column names?");
     } catch(IllegalArgumentException e) {
       // success
     }
 
-    columns = new ArrayList<Column>();
-    columns.add(new ColumnBuilder("A", DataType.TEXT)
-                .setLengthInUnits(352).toColumn());
-    
     try {
-      db.createTable("test", columns);
+      new TableBuilder("test")
+        .addColumn(new ColumnBuilder("A", DataType.TEXT)
+                   .setLengthInUnits(352).toColumn())
+        .toTable(db);
       fail("created table with invalid column length?");
     } catch(IllegalArgumentException e) {
       // success
     }
 
-    columns = new ArrayList<Column>();
-    columns.add(new ColumnBuilder("A", DataType.TEXT).toColumn());
-    db.createTable("test", columns);
+    new TableBuilder("test")
+      .addColumn(new ColumnBuilder("A", DataType.TEXT).toColumn())
+      .toTable(db);
+
     
     try {
-      db.createTable("Test", columns);
+      new TableBuilder("Test")
+        .addColumn(new ColumnBuilder("A", DataType.TEXT).toColumn())
+        .toTable(db);
       fail("create duplicate tables?");
     } catch(IllegalArgumentException e) {
       // success
@@ -341,11 +342,12 @@ public class DatabaseTest extends TestCase {
 
     Database db = create();
 
-    List<Column> columns = new ArrayList<Column>();
-    columns.add(new ColumnBuilder("A", DataType.TEXT).toColumn());
-    columns.add(new ColumnBuilder("B", DataType.MEMO).toColumn());
-    columns.add(new ColumnBuilder("C", DataType.OLE).toColumn());
-    db.createTable("test", columns);
+    Table table = 
+    new TableBuilder("test")
+      .addColumn(new ColumnBuilder("A", DataType.TEXT).toColumn())
+      .addColumn(new ColumnBuilder("B", DataType.MEMO).toColumn())
+      .addColumn(new ColumnBuilder("C", DataType.OLE).toColumn())
+      .toTable(db);
 
     String testStr = "This is a test";
     StringBuilder strBuf = new StringBuilder();
@@ -357,7 +359,6 @@ public class DatabaseTest extends TestCase {
     byte[] oleValue = toByteArray(new File("test/data/test2BinData.dat"));
     
     
-    Table table = db.getTable("Test");
     table.addRow(testStr, testStr, null);
     table.addRow(testStr, longMemo, oleValue);
 
@@ -420,11 +421,10 @@ public class DatabaseTest extends TestCase {
   public void testCurrency() throws Exception {
     Database db = create();
 
-    List<Column> columns = new ArrayList<Column>();
-    columns.add(new ColumnBuilder("A", DataType.MONEY).toColumn());
-    db.createTable("test", columns);
+    Table table = new TableBuilder("test")
+      .addColumn(new ColumnBuilder("A", DataType.MONEY).toColumn())
+      .toTable(db);
 
-    Table table = db.getTable("Test");
     table.addRow(new BigDecimal("-2341234.03450"));
     table.addRow(37L);
     table.addRow("10000.45");
@@ -455,11 +455,10 @@ public class DatabaseTest extends TestCase {
   {
     Database db = create();
 
-    List<Column> columns = new ArrayList<Column>();
-    columns.add(new ColumnBuilder("A", DataType.GUID).toColumn());
-    db.createTable("test", columns);
+    Table table = new TableBuilder("test")
+      .addColumn(new ColumnBuilder("A", DataType.GUID).toColumn())
+      .toTable(db);
 
-    Table table = db.getTable("Test");
     table.addRow("{32A59F01-AA34-3E29-453F-4523453CD2E6}");
     table.addRow("{32a59f01-aa34-3e29-453f-4523453cd2e6}");
     table.addRow("{11111111-1111-1111-1111-111111111111}");
@@ -494,17 +493,16 @@ public class DatabaseTest extends TestCase {
   {
     Database db = create();
 
-    List<Column> columns = new ArrayList<Column>();
     Column col = new ColumnBuilder("A", DataType.NUMERIC)
       .setScale(4).setPrecision(8).toColumn();
-    columns.add(col);
     assertTrue(col.isVariableLength());
     
-    columns.add(new ColumnBuilder("B", DataType.NUMERIC)
-                .setScale(8).setPrecision(28).toColumn());
-    db.createTable("test", columns);
+    Table table = new TableBuilder("test")
+      .addColumn(col)
+      .addColumn(new ColumnBuilder("B", DataType.NUMERIC)
+                 .setScale(8).setPrecision(28).toColumn())
+      .toTable(db);
 
-    Table table = db.getTable("Test");
     table.addRow(new BigDecimal("-1234.03450"),
                  new BigDecimal("23923434453436.36234219"));
     table.addRow(37L, 37L);
@@ -624,11 +622,11 @@ public class DatabaseTest extends TestCase {
   {
 
     Database db = create();
-    Column a = new ColumnBuilder("a").setSQLType(Types.INTEGER).toColumn();
-    Column b = new ColumnBuilder("b").setSQLType(Types.LONGVARCHAR).toColumn();
-    Column c = new ColumnBuilder("c").setSQLType(Types.VARCHAR).toColumn();
-    db.createTable("NewTable", Arrays.asList(a, b, c));
-    Table newTable = db.getTable("NewTable");
+    Table newTable = new TableBuilder("NewTable")
+      .addColumn(new ColumnBuilder("a").setSQLType(Types.INTEGER).toColumn())
+      .addColumn(new ColumnBuilder("b").setSQLType(Types.LONGVARCHAR).toColumn())
+      .addColumn(new ColumnBuilder("c").setSQLType(Types.VARCHAR).toColumn())
+      .toTable(db);
     
     String lval = createString(2000); // "--2000 chars long text--";
     String tval = createString(40); // "--40chars long text--";
@@ -698,14 +696,12 @@ public class DatabaseTest extends TestCase {
   public void testAutoNumber() throws Exception {
     Database db = create();
 
-    List<Column> columns = new ArrayList<Column>();
-    columns.add(new ColumnBuilder("a", DataType.LONG)
-                .setAutoNumber(true).toColumn());
-    columns.add(new ColumnBuilder("b", DataType.TEXT).toColumn());
+    Table table = new TableBuilder("test")
+      .addColumn(new ColumnBuilder("a", DataType.LONG)
+                .setAutoNumber(true).toColumn())
+      .addColumn(new ColumnBuilder("b", DataType.TEXT).toColumn())
+      .toTable(db);
 
-    db.createTable("test", columns);
-
-    Table table = db.getTable("test");
     table.addRow(null, "row1");
     table.addRow(13, "row2");
     table.addRow("flubber", "row3");
@@ -743,13 +739,12 @@ public class DatabaseTest extends TestCase {
   public void testWriteAndReadDate() throws Exception {
     Database db = create();
 
-    List<Column> columns = new ArrayList<Column>();
-    columns.add(new ColumnBuilder("name", DataType.TEXT).toColumn());
-    columns.add(new ColumnBuilder("date", DataType.SHORT_DATE_TIME).toColumn());
-
-    db.createTable("test", columns);
-    Table table = db.getTable("test");
-
+    Table table = new TableBuilder("test")
+      .addColumn(new ColumnBuilder("name", DataType.TEXT).toColumn())
+      .addColumn(new ColumnBuilder("date", DataType.SHORT_DATE_TIME)
+                 .toColumn())
+      .toTable(db);
+    
     // since jackcess does not really store millis, shave them off before
     // storing the current date/time
     long curTimeNoMillis = (System.currentTimeMillis() / 1000L);
@@ -820,17 +815,17 @@ public class DatabaseTest extends TestCase {
   }
   
   static void createTestTable(Database db) throws Exception {
-    List<Column> columns = new ArrayList<Column>();
-    columns.add(new ColumnBuilder("A", DataType.TEXT).toColumn());
-    columns.add(new ColumnBuilder("B", DataType.TEXT).toColumn());
-    columns.add(new ColumnBuilder("C", DataType.TEXT).toColumn());
-    columns.add(new ColumnBuilder("D", DataType.LONG).toColumn());
-    columns.add(new ColumnBuilder("E", DataType.BYTE).toColumn());
-    columns.add(new ColumnBuilder("F", DataType.DOUBLE).toColumn());
-    columns.add(new ColumnBuilder("G", DataType.FLOAT).toColumn());
-    columns.add(new ColumnBuilder("H", DataType.INT).toColumn());
-    columns.add(new ColumnBuilder("I", DataType.SHORT_DATE_TIME).toColumn());
-    db.createTable("test", columns);
+    new TableBuilder("test")
+      .addColumn(new ColumnBuilder("A", DataType.TEXT).toColumn())
+      .addColumn(new ColumnBuilder("B", DataType.TEXT).toColumn())
+      .addColumn(new ColumnBuilder("C", DataType.TEXT).toColumn())
+      .addColumn(new ColumnBuilder("D", DataType.LONG).toColumn())
+      .addColumn(new ColumnBuilder("E", DataType.BYTE).toColumn())
+      .addColumn(new ColumnBuilder("F", DataType.DOUBLE).toColumn())
+      .addColumn(new ColumnBuilder("G", DataType.FLOAT).toColumn())
+      .addColumn(new ColumnBuilder("H", DataType.INT).toColumn())
+      .addColumn(new ColumnBuilder("I", DataType.SHORT_DATE_TIME).toColumn())
+      .toTable(db);
   }
     
   static String createString(int len) {
index 907d0f4b2beb35616cfdb6f4e6bca5e85a92d361..23f64b8710a036cf751ddde8280bfd07df72b664 100644 (file)
@@ -142,14 +142,11 @@ public class IndexCodesTest extends TestCase {
   {
     Database db = create(true);
 
-    List<Column> columns = new ArrayList<Column>();
-    columns.add(new ColumnBuilder("row", DataType.TEXT).toColumn());
-    columns.add(new ColumnBuilder("data", DataType.TEXT).toColumn());
+    Table t = new TableBuilder("test")
+      .addColumn(new ColumnBuilder("row", DataType.TEXT).toColumn())
+      .addColumn(new ColumnBuilder("data", DataType.TEXT).toColumn())
+      .toTable(db);
     
-    db.createTable("test", columns);
-
-    Table t = db.getTable("test");
-
     for(int i = 0; i < 256; ++i) {
       String str = "AA" + ((char)i) + "AA";
       t.addRow("row" + i, str);