Package org.haystack.io

Source Code of org.haystack.io.HZincWriter

//
// Copyright (c) 2012, Brian Frank
// Licensed under the Academic Free License version 3.0
//
// History:
//   25 Sep 2012  Brian Frank  Creation
//
package org.haystack.io;


import java.io.OutputStream;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Iterator;
import java.util.Map.Entry;

import org.haystack.HCol;
import org.haystack.HDict;
import org.haystack.HGrid;
import org.haystack.HRow;
import org.haystack.tagval.HMarker;
import org.haystack.tagval.HVal;

/**
* HZincWriter is used to write grids in the Zinc format
*
* @see <a href='http://project-haystack.org/doc/Zinc'>Project Haystack</a>
*/
public class HZincWriter extends HGridWriter {
    //////////////////////////////////////////////////////////////////////////
    // Construction
    //////////////////////////////////////////////////////////////////////////

    public HZincWriter(OutputStream out) {
        super(out);
    }

    public HZincWriter(Writer out) {
        super(out);
    }

    /** Write a grid to an in-memory a string */
    public static String gridToString(HGrid grid) {
        StringWriter out = new StringWriter(grid.numCols() * grid.numRows() * 16);
        writeGrid(new HZincWriter(out), grid);
        return out.toString();
    }

    //////////////////////////////////////////////////////////////////////////
    // HGridWriter
    //////////////////////////////////////////////////////////////////////////

    @Override
    public void writeMeta(HDict meta) {
        out.write("ver:\"2.0\"");
        writeMetaImpl(meta);
        out.write('\n');
    }

    @Override
    public void writeCols(HCol[] cols) {
        for (int i = 0; i < cols.length; ++i) {
            if (i > 0)
                out.write(',');
            out.write(cols[i].name());
            writeMetaImpl(cols[i].meta());
        }
        out.write('\n');
    }

    @Override
    public void writeRow(HCol[] cols, HRow row, int index) {
        for (int i = 0; i < cols.length; ++i) {
            HVal val = row.get(cols[i], false);
            if (i > 0)
                out.write(',');
            if (val == null) {
                if (i == 0)
                    out.write('N');
            }
            else {
                out.write(val.toZinc());
            }
        }

        out.write('\n');
    }

    //////////////////////////////////////////////////////////////////////////
    // Implementation
    //////////////////////////////////////////////////////////////////////////

    private void writeMetaImpl(HDict meta) {
        if (meta.isEmpty())
            return;
        for (Iterator<Entry<String, HVal>> it = meta.iterator(); it.hasNext();) {
            Entry<String, HVal> entry = it.next();
            String name = entry.getKey();
            HVal val = entry.getValue();
            out.write(' ');
            out.write(name);
            if (val != HMarker.VAL) {
                out.write(':');
                out.write(val.toZinc());
            }
        }
    }
}
TOP

Related Classes of org.haystack.io.HZincWriter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.