From 3e5c2d344e04e0adb6a210c5c6302bfbfd8af102 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Fri, 06 Sep 2019 20:25:39 -0400
Subject: [PATCH] Fix file object.
---
timeflow/format/file/TimeflowFormat.java | 301 ++++++++++++++++++++++++++-----------------------
1 files changed, 159 insertions(+), 142 deletions(-)
diff --git a/timeflow/format/file/TimeflowFormat.java b/timeflow/format/file/TimeflowFormat.java
index 3778235..50310d0 100755
--- a/timeflow/format/file/TimeflowFormat.java
+++ b/timeflow/format/file/TimeflowFormat.java
@@ -13,151 +13,168 @@
public class TimeflowFormat implements Import, Export
{
- private static final String END_OF_SCHEMA="#TIMEFLOW\tend-metadata";
- private static final String END_OF_METADATA="#TIMEFLOW\t====== End of Header. Data below is in tab-delimited format. =====";
- public ActDB readFile(String fileName, PrintStream messages) throws Exception
- {
- return read(new File(fileName), messages);
- }
-
- public static ActDB read(File file, PrintStream out) throws Exception
- {
- String text=IO.read(file.getAbsolutePath());
- DelimitedText quote=new DelimitedText('\t');
- Iterator<String[]> lines=quote.read(text).iterator();
-
- ActDB db=null;
- List<String> fieldNames=new ArrayList<String>();
- List<Class> fieldTypes=new ArrayList<Class>();
- List<Integer> fieldSizes=new ArrayList<Integer>();
- String source="[unknown]", description="";
- for (;;)
- {
- String[] t=lines.next();
+ private static final String END_OF_SCHEMA = "#TIMEFLOW\tend-metadata";
+ private static final String END_OF_METADATA = "#TIMEFLOW\t====== End of Header. Data below is in tab-delimited format. =====";
- if (t[1].equals("field"))
- {
- fieldNames.add(t[2]);
- fieldTypes.add(FieldFormatCatalog.javaClass(t[3]));
- if (t.length>4)
- {
- fieldSizes.add(Integer.parseInt(t[4]));
- }
- else
- fieldSizes.add(-1);
- }
- else if (t[1].equals("source"))
- {
- source=t[2];
- }
- else if (t[1].equals("description"))
- {
- description=t[2];
-
- }
- else if (t[1].equals("end-metadata"))
- break;
- }
- db=new ArrayDB((String[])fieldNames.toArray(new String[0]),
- (Class[])fieldTypes.toArray(new Class[0]), source);
- db.setDescription(description);
- for (int i=0; i<fieldNames.size(); i++)
- if (fieldSizes.get(i)>0)
- db.getField(fieldNames.get(i)).setRecommendedSize(fieldSizes.get(i));
- for (;;)
- {
- String[] t=lines.next();
- if (t[1].startsWith("==="))
- break;
- if (t[1].equals("alias"))
- db.setAlias(db.getField(t[3]), t[2]);
- }
-
- // note: in some cases headers may be in a different order than in
- // metadata section, so we will read these.
- String[] headers=lines.next();
- if (headers.length!=fieldNames.size())
- throw new IllegalArgumentException("Different number of headers than fields!");
-
-
- while (lines.hasNext())
- {
- String[] t=lines.next();
- Act a=db.createAct();
- for (int i=0; i<t.length; i++)
- {
- Field f=db.getField(headers[i]);
- FieldFormat format=FieldFormatCatalog.getFormat(f.getType());
- a.set(f, format.parse(t[i]));
- }
- }
-
- return db;
- }
-
- public static void write(ActList acts, BufferedWriter bw) throws IOException
- {
- ActDB db=acts.getDB();
-
- PrintWriter out=new PrintWriter(bw);
-
- DelimitedText tab=new DelimitedText('\t');
-
- // Write version
- out.println("#TIMEFLOW\tformat version\t1");
-
- // Write source of data.
- out.println("#TIMEFLOW\tsource\t"+tab.write(db.getSource()));
-
- // Write description of data.
- out.println("#TIMEFLOW\tdescription\t"+tab.write(db.getDescription()));
-
- // Write schema.
- List<Field> fields=db.getFields();
- for (Field f: fields)
- {
- String recSize=f.getRecommendedSize()<=0 ? "" : "\t"+f.getRecommendedSize();
- out.println("#TIMEFLOW\tfield\t"+tab.write(f.getName())+
- "\t"+FieldFormatCatalog.humanName(f.getType())+recSize);
- }
-
- out.println(END_OF_SCHEMA);
-
- // Write column mappings.
- List<String> aliases=DBUtils.getFieldAliases(db);
- for (String a:aliases)
- out.println("#TIMEFLOW\talias\t"+a+"\t"+tab.write(db.getField(a).getName()));
-
- // Write end of header indicator
- out.println(END_OF_METADATA);
-
- // Write data!
- new DelimitedFormat('\t').writeDelimited(db, acts, out);
-
- out.flush();
- out.close();
- }
-
- public static void main(String[] args) throws Exception
- {
- System.out.println("Reading");
- ActDB db=read(new File("test/monet.txt"), System.out);
- System.out.println("# lines: "+db.size());
- }
+ public ActDB readFile(String fileName, PrintStream messages) throws Exception
+ {
+ return read(new File(fileName), messages);
+ }
- @Override
- public String getName() {
- return "TimeFlow Format";
- }
+ public static ActDB read(File file, PrintStream out) throws Exception
+ {
+ String text = IO.read(file.getAbsolutePath());
+ DelimitedText quote = new DelimitedText('\t');
+ Iterator<String[]> lines = quote.read(text).iterator();
- @Override
- public ActDB importFile(File file) throws Exception {
- return read(file, System.out);
- }
- @Override
- public void export(TFModel model, BufferedWriter out) throws Exception {
- write(model.getDB().all(), out);
- }
+ ActDB db = null;
+ List<String> fieldNames = new ArrayList<String>();
+ List<Class> fieldTypes = new ArrayList<Class>();
+ List<Integer> fieldSizes = new ArrayList<Integer>();
+ String source = "[unknown]", description = "";
+ for (;;)
+ {
+ String[] t = lines.next();
+
+ if (t[1].equals("field"))
+ {
+ fieldNames.add(t[2]);
+ fieldTypes.add(FieldFormatCatalog.javaClass(t[3]));
+ if (t.length > 4)
+ {
+ fieldSizes.add(Integer.parseInt(t[4]));
+ } else
+ {
+ fieldSizes.add(-1);
+ }
+ } else if (t[1].equals("source"))
+ {
+ source = t[2];
+ } else if (t[1].equals("description"))
+ {
+ description = t[2];
+
+ } else if (t[1].equals("end-metadata"))
+ {
+ break;
+ }
+ }
+ db = new ArrayDB((String[]) fieldNames.toArray(new String[0]),
+ (Class[]) fieldTypes.toArray(new Class[0]), source);
+ db.setDescription(description);
+ for (int i = 0; i < fieldNames.size(); i++)
+ {
+ if (fieldSizes.get(i) > 0)
+ {
+ db.getField(fieldNames.get(i)).setRecommendedSize(fieldSizes.get(i));
+ }
+ }
+ for (;;)
+ {
+ String[] t = lines.next();
+ if (t[1].startsWith("==="))
+ {
+ break;
+ }
+ if (t[1].equals("alias"))
+ {
+ db.setAlias(db.getField(t[3]), t[2]);
+ }
+ }
+
+ // note: in some cases headers may be in a different order than in
+ // metadata section, so we will read these.
+ String[] headers = lines.next();
+ if (headers.length != fieldNames.size())
+ {
+ throw new IllegalArgumentException("Different number of headers than fields!");
+ }
+
+
+ while (lines.hasNext())
+ {
+ String[] t = lines.next();
+ Act a = db.createAct();
+ for (int i = 0; i < t.length; i++)
+ {
+ Field f = db.getField(headers[i]);
+ FieldFormat format = FieldFormatCatalog.getFormat(f.getType());
+ a.set(f, format.parse(t[i]));
+ }
+ }
+
+ return db;
+ }
+
+ public static void write(ActList acts, BufferedWriter bw) throws IOException
+ {
+ ActDB db = acts.getDB();
+
+ PrintWriter out = new PrintWriter(bw);
+
+ DelimitedText tab = new DelimitedText('\t');
+
+ // Write version
+ out.println("#TIMEFLOW\tformat version\t1");
+
+ // Write source of data.
+ out.println("#TIMEFLOW\tsource\t" + tab.write(db.getSource()));
+
+ // Write description of data.
+ out.println("#TIMEFLOW\tdescription\t" + tab.write(db.getDescription()));
+
+ // Write schema.
+ List<Field> fields = db.getFields();
+ for (Field f : fields)
+ {
+ String recSize = f.getRecommendedSize() <= 0 ? "" : "\t" + f.getRecommendedSize();
+ out.println("#TIMEFLOW\tfield\t" + tab.write(f.getName())
+ + "\t" + FieldFormatCatalog.humanName(f.getType()) + recSize);
+ }
+
+ out.println(END_OF_SCHEMA);
+
+ // Write column mappings.
+ List<String> aliases = DBUtils.getFieldAliases(db);
+ for (String a : aliases)
+ {
+ out.println("#TIMEFLOW\talias\t" + a + "\t" + tab.write(db.getField(a).getName()));
+ }
+
+ // Write end of header indicator
+ out.println(END_OF_METADATA);
+
+ // Write data!
+ new DelimitedFormat('\t').writeDelimited(db, acts, out);
+
+ out.flush();
+ out.close();
+ }
+
+ public static void main(String[] args) throws Exception
+ {
+ System.out.println("Reading");
+ ActDB db = read(new File("test/monet.txt"), System.out);
+ System.out.println("# lines: " + db.size());
+ }
+
+ @Override
+ public String getName()
+ {
+ return "TimeFlow Format";
+ }
+
+ @Override
+ public ActDB importFile(File file) throws Exception
+ {
+ return read(file, System.out);
+ }
+
+ @Override
+ public void export(TimeflowModel model, BufferedWriter out) throws Exception
+ {
+ write(model.getDB().all(), out);
+ }
}
--
Gitblit v1.6.2