divconq.test.TestYaml.java Source code

Java tutorial

Introduction

Here is the source code for divconq.test.TestYaml.java

Source

/* ************************************************************************
#
#  DivConq
#
#  http://divconq.com/
#
#  Copyright:
#    Copyright 2014 eTimeline, LLC. All rights reserved.
#
#  License:
#    See the license.txt file in the project's top-level directory for details.
#
#  Authors:
#    * Andy White
#
************************************************************************ */
package divconq.test;

import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.lang.reflect.Method;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousFileChannel;
import java.nio.channels.CompletionHandler;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.CountDownLatch;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

import org.joda.time.DateTime;

import divconq.filestore.CommonPath;
import divconq.io.OutputWrapper;
import divconq.lang.Memory;
import divconq.lang.chars.Utf8Decoder;
import divconq.lang.chars.Utf8Encoder;
import divconq.lang.op.FuncResult;
import divconq.lang.op.OperationContext;
import divconq.lang.op.OperationObserver;
import divconq.service.plugin.Operation;
import divconq.struct.CompositeParser;
import divconq.struct.CompositeStruct;
import divconq.struct.FieldStruct;
import divconq.struct.ListStruct;
import divconq.struct.RecordStruct;
import divconq.struct.builder.JsonMemoryBuilder;
import divconq.struct.builder.YamlStreamBuilder;
import divconq.struct.serial.CompositeToBufferBuilder;
import divconq.util.HexUtil;
import divconq.work.TaskRun;
import static divconq.struct.StructUtil.*;

public class TestYaml {

    public static void main(String[] args) throws Exception {
    }

    public static void maincp(String[] args) {
        CommonPath p = new CommonPath("/hi.txt");
        System.out.println("1: " + p);
        p = new CommonPath("/lie/hi.txt");
        System.out.println("2: " + p);
        //p = new CommonPath("/lie/./hi.txt");
        //System.out.println("3: " + p);
        p = new CommonPath("/lie/../hi.txt");
        System.out.println("4: " + p);
    }

    /*
    public static void main4(String[] args) {
       ExecutorService pool = Executors.newSingleThreadExecutor();
           
       ResourceLeakDetector.setLevel(Level.PARANOID);
           
       Logger.init(null);
           
       FileSystemDriver localfs = new FileSystemDriver();
       localfs.setRootFolder("C:/");
           
       FileCollection files = new FileCollection();
       files.add(localfs.getReference("/Users/andy/Documents/writing/buck2/story.xml"));
       files.add(localfs.getReference("/GreasySpoon/conf/mime.types"));
           
       FileSourceStream src = new FileSourceStream(pool, files);
       TarStream tar = new TarStream();
       GzipStream gz = new GzipStream();
       FileDestStream dest = new FileDestStream(localfs.getReference("/temp/test/files.tar.gz"));
           
       tar.setUpstream(src);
       gz.setUpstream(tar);
       dest.setUpstream(gz);
           
       dest.execute(new OperationCallback() {         
     @Override
     public void callback() {
        
        System.out.println("Done");
     }
       });
           
       try (Scanner scan = new Scanner(System.in)) {
     System.out.println("Press enter to close");
     scan.nextLine();
       }
           
       Logger.stop(new OperationResult());
       pool.shutdown();
    }
    */

    public static void main3(String[] args) {
        // create records, fields and lists easily
        RecordStruct rec = record(field("Name", "Fred"), field("Age", 49),
                field("FavoriteFoods", list("pizza", "cereal", "lima beans")));

        // output as JSON
        rec.toString();

        // output as formatted JSON
        rec.toPrettyString();

        // validate the structure follows the schema
        rec.validate("dcTestPeopleExample");
    }

    public static void main2(String[] args) {
        FuncResult<CompositeStruct> jres = CompositeParser.parseJson(
                "{ one: 'has', two: \"is\", three: [ 12, 44, 88 ], four: 12.55, five: false, six: null }");

        if (jres.hasErrors())
            System.out.println("Error: " + jres.getMessage());
        else {
            RecordStruct out = (RecordStruct) jres.getResult();

            System.out.println("= " + out.toPrettyString());

            System.out.println("a: " + out.getFieldAsDecimal("four"));
            System.out.println("b: " + out.getFieldAsString("two"));
            System.out.println("c: " + out.getFieldAsBoolean("five"));
            System.out.println("d: " + out.getFieldAsList("three").getItemAsInteger(2));
        }
    }

    public static void mainGroovService(String[] args) throws Exception {
        System.out.println("dude!");

        RecordStruct rec = new RecordStruct(new FieldStruct("Age", 15));

        GroovyClassLoader loader = new GroovyClassLoader();
        Class<?> groovyClass = loader.parseClass(new File("./packages/dcTest/services/FirstGroovy.groovy"));

        for (Method m : groovyClass.getMethods()) {
            Operation ann = m.getAnnotation(Operation.class);

            // to be a service operation you need to have an annotation and name starts with "handle" 
            if ((ann == null) || !m.getName().startsWith("handle"))
                continue;

            System.out.println(
                    "Service handler: " + m.getName().substring(6) + " request type: " + ann.request().type());
        }

        /*
        // let's call some method on an instance
        GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
        Object[] args2 = { rec };
            
        //for (MetaMethod m : groovyObject.getMetaClass().getMethods()) {
        //   System.out.println("M1: " + m.getName());
        //   System.out.println("M3: " + m.getSignature());
        //   System.out.println("M3: " + m.getDescriptor());
        //}
            
        @SuppressWarnings("unchecked")
        Closure<Object> res = (Closure<Object>)groovyObject.invokeMethod("printIt", args2);      
            
        res.call();
        */

        TaskRun run = new TaskRun();

        run.getTask().withObserver(new OperationObserver() {
            @Override
            public void completed(OperationContext or) {
                System.out.println("Result of run: " + or.getTaskRun().getResult());
            }
        });

        GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
        Object[] args2 = { run, "tee shirt" };

        groovyObject.invokeMethod("handleEcho", args2);

        System.out.println("after: " + rec.getFieldAsInteger("Age"));

        Thread.sleep(5000);

        loader.close();
    }

    public static void mainJS(String[] args) throws Exception {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");

        engine.eval(new FileReader("./packages/dcTest/scripts/hello1.js"));

        Invocable invocable = (Invocable) engine;

        RecordStruct rec = new RecordStruct(new FieldStruct("Age", 15));

        Object result = invocable.invokeFunction("fun1", "Peter Parker", rec);
        System.out.println(result);
        //System.out.println(result.getClass());

        System.out.println("after: " + rec.getFieldAsInteger("Age"));

        Thread.sleep(5000);

        System.out.println("after: " + rec.getFieldAsInteger("Age"));
    }

    static public Memory getRemote(String url) {
        try {
            Memory res = new Memory();

            URL obj = new URL(url);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();

            // optional default is GET
            con.setRequestMethod("GET");

            //add request header
            con.setRequestProperty("User-Agent", "Mozilla/5.0");

            //System.out.println("\nSending 'GET' request to URL : " + url);
            int responseCode = con.getResponseCode();

            //System.out.println("Response Code : " + responseCode);

            if (responseCode != 200)
                return null;

            InputStream is = con.getInputStream();

            res.copyFromStream(is);

            is.close();

            return res;
        } catch (Exception x) {
            System.out.println("Error reading url: " + url + " - " + x);
        }

        return null;
    }

    static public void realmain() {
        /* TODO
        try {
           CharBuffer cb = CharBuffer.allocate(1024);
           InputStreamReader sr = new InputStreamReader(System.in, "UTF-8");
               
           sr.read(cb);
            
           String u = "00"; 
               
           cb.flip();
               
           System.out.println("= " + cb.equals(u));
        }
        catch (Exception x) {
           System.out.println("Error: " + x);
        }
        */

        String u = "av73Dw??gT80Hgt";

        System.out.println(u);

        byte[] xb = Utf8Encoder.encode(u);

        System.out.println(HexUtil.bufferToHex(xb)); // 6176c3a4373344773f3f67543830486774

        System.exit(0);

        CommonPath ptest = new CommonPath("jump/and/stomp");

        System.out.println("1: " + ptest.getFileName());
        System.out.println("2: " + ptest.getName(0));
        System.out.println("3: " + ptest.getName(1));
        System.out.println("4: " + ptest.getName(2));
        System.out.println("5: " + ptest.getParent());
        System.out.println("6: " + ptest.subpath(0, 1));

        ptest = new CommonPath("jump");

        System.out.println("1: " + ptest.getFileName());
        System.out.println("2: " + ptest.getName(0));
        System.out.println("5: " + ptest.getParent());
        System.out.println("6: " + ptest.subpath(0, 1));

        ptest = new CommonPath("/jump");

        System.out.println("1: " + ptest.getFileName());
        System.out.println("2: " + ptest.getName(0));
        System.out.println("5: " + ptest.getParent());
        System.out.println("6: " + ptest.subpath(0, 1));

        ptest = new CommonPath("/jump/and/stomp");

        System.out.println("1: " + ptest.getFileName());
        System.out.println("2: " + ptest.getName(0));
        System.out.println("3: " + ptest.getName(1));
        System.out.println("4: " + ptest.getName(2));
        System.out.println("5: " + ptest.getParent());
        System.out.println("6: " + ptest.subpath(0, 1));

        System.exit(0);

        Path file = Paths.get("..", "lib", "aws-java-sdk-1.3.21.1.jar");

        if (!Files.exists(file)) {
            System.out.println("File not found: " + file);
            return;
        }

        if (!Files.isRegularFile(file)) {
            System.out.println("Not a file: " + file);
            return;
        }

        System.out.println("file good");

        final CountDownLatch latch = new CountDownLatch(1);

        try {
            AsynchronousFileChannel sbc = AsynchronousFileChannel.open(file);
            final ByteBuffer buf = ByteBuffer.allocate(64 * 1024);

            sbc.read(buf, 0, sbc, new CompletionHandler<Integer, AsynchronousFileChannel>() {
                long pos = 0;

                @Override
                public void completed(Integer result, AsynchronousFileChannel sbc) {
                    if (result == -1) {
                        try {
                            sbc.close();
                        } catch (IOException x) {
                        }

                        latch.countDown();

                        return;
                    }

                    if (result > 0) {
                        this.pos += result;

                        //ctx.writeAndFlush(new StreamMessage(buf));
                        System.out.println("get: " + buf.position());

                        buf.clear();
                    }

                    sbc.read(buf, this.pos, sbc, this);
                }

                @Override
                public void failed(Throwable x, AsynchronousFileChannel sbc) {
                    // TODO logging

                    System.out.println("error: " + x);

                    try {
                        sbc.close();
                    } catch (IOException x2) {
                    }

                    latch.countDown();
                }
            });
        } catch (IOException x) {
            System.out.println("Server Stream failed to open file: " + x);
        }

        try {
            latch.await();
        } catch (Exception x) {
        }

        //TestYaml.testSerial();
    }

    public static void testSerial() {
        ByteBuf bb = Unpooled.buffer();

        CompositeToBufferBuilder sb = new CompositeToBufferBuilder(bb);

        try {
            /*
            sb.startList();
                
            sb.startList();
            sb.value("a");
            //sb.value(null);
            //sb.value("b");
            sb.endList();
                
            sb.value("c");
                
            sb.startList();
            sb.value(null);
            sb.endList();
                
            sb.endList();
            */

            sb.startList();

            sb.startList();

            sb.startList();
            sb.value("a");
            sb.value("b");
            sb.endList();

            sb.value(null);
            sb.value(22);
            sb.value(2.2);

            sb.startList();
            sb.value(2.2);
            sb.value(null);
            sb.value(22);
            sb.endList();

            sb.endList();

            sb.startRecord();
            sb.field("Name", "ted");
            sb.field("Age", 7);
            sb.field("DOB", new DateTime(1998, 8, 3, 17, 12));
            sb.field("Sex", "m");
            sb.field("Software");
            sb.startList();
            sb.value("Afterstep <& or \"");
            sb.value(
                    "CTWM this is an abcdefghijklmnopqrstuvwxy is an abcdefghijklmnopqrstuvwxy is /> an abcdefghijklmnopqrstuvwxy is \nan abcdefghijklmnopqrstuvwxy is \tan abcdefghijklmnopqrstuvwxy");
            sb.value("Oroborus");
            sb.endList();
            sb.field("Friends");
            sb.startList();

            sb.startRecord();
            sb.field("Name", "macy");
            sb.field("Age", 6);
            sb.field("Sex", "f");
            sb.endRecord();

            sb.startRecord();
            sb.field("Name", "rich");
            sb.field("Age", 7);
            sb.field("Sex", "m");
            sb.field("Foods");
            sb.startList();
            sb.value("Apple");
            sb.value("Cookie");
            sb.endList();
            sb.endRecord();

            sb.endList();
            sb.endRecord();

            sb.startRecord();
            sb.field("Name", "kathy");
            sb.field("Father");
            sb.startRecord();
            sb.field("Name", "Ted");
            sb.field("Age", 29);
            sb.endRecord();
            sb.field("Age");
            sb.field("DOB", new DateTime(1994, 3, 13, 8, 55));
            sb.field("Sex", "f");
            sb.endRecord();

            sb.endList();
        } catch (Exception x) {
            System.out.println("builder error: " + sb);
        }

        System.out.println("built:\n" + Utf8Decoder.decode(bb));

        ListStruct list = (ListStruct) sb.toLocal();

        System.out.println();
        System.out.println("item 2 name: " + list.getItemAsRecord(1).getFieldAsString("Name"));
        //System.out.println("item 2: " +  list.getItem(1));
        System.out.println();

        System.out.println(list.toPrettyString());

        System.exit(0);
    }

    public static void testJson() {
        JsonMemoryBuilder sb = new JsonMemoryBuilder(true);

        try {
            sb.startList();

            sb.startList();

            sb.startList();
            sb.value("a");
            sb.value("b");
            sb.endList();

            sb.value(null);
            sb.value(22);
            sb.value(2.2);

            sb.startList();
            sb.value(2.2);
            sb.value(null);
            sb.value(22);
            sb.endList();

            sb.endList();

            sb.startRecord();
            sb.field("Name", "ted");
            sb.field("Age", 7);
            sb.field("DOB", new DateTime(1998, 8, 3, 17, 12));
            sb.field("Sex", "m");
            sb.field("Software");
            sb.startList();
            sb.value("Afterstep <& or \"");
            sb.value(
                    "CTWM this is an abcdefghijklmnopqrstuvwxy is an abcdefghijklmnopqrstuvwxy is /> an abcdefghijklmnopqrstuvwxy is \nan abcdefghijklmnopqrstuvwxy is \tan abcdefghijklmnopqrstuvwxy");
            sb.value("Oroborus");
            sb.endList();
            sb.field("Friends");
            sb.startList();

            sb.startRecord();
            sb.field("Name", "macy");
            sb.field("Age", 6);
            sb.field("Sex", "f");
            sb.endRecord();

            sb.startRecord();
            sb.field("Name", "rich");
            sb.field("Age", 7);
            sb.field("Sex", "m");
            sb.field("Foods");
            sb.startList();
            sb.value("Apple");
            sb.value("Cookie");
            sb.endList();
            sb.endRecord();

            sb.endList();
            sb.endRecord();

            sb.startRecord();
            sb.field("Name", "kathy");
            sb.field("Father");
            sb.startRecord();
            sb.field("Name", "Ted");
            sb.field("Age", 29);
            sb.endRecord();
            sb.field("Age");
            sb.field("DOB", new DateTime(1994, 3, 13, 8, 55));
            sb.field("Sex", "f");
            sb.endRecord();

            sb.endList();
        } catch (Exception x) {
            System.out.println("builder error: " + sb);
        }

        System.out.println("built:\n" + sb.getMemory());

        ListStruct list = (ListStruct) sb.toLocal();

        System.out.println();
        System.out.println("item 2 name: " + list.getItemAsRecord(1).getFieldAsString("Name"));
        System.out.println();

        System.out.println(list.toString());

        System.exit(0);
    }

    public static void testYaml() {
        Memory ydest = new Memory();
        OutputWrapper os = new OutputWrapper(ydest);
        YamlStreamBuilder sb = new YamlStreamBuilder(new PrintStream(os));

        try {
            sb.startList();

            sb.startList();

            sb.startList();
            sb.value("a");
            sb.value("b");
            sb.endList();

            sb.value(null);
            sb.value(22);
            sb.value(2.2);

            sb.startList();
            sb.value(2.2);
            sb.value(null);
            sb.value(22);
            sb.endList();

            sb.endList();

            sb.startRecord();
            sb.field("Name", "ted");
            sb.field("Age", 7);
            sb.field("DOB", new DateTime(1998, 8, 3, 17, 12));
            sb.field("Sex", "m");
            sb.field("Software");
            sb.startList();
            sb.value("Afterstep <& or \"");
            sb.value(
                    "CTWM this is an abcdefghijklmnopqrstuvwxy is an abcdefghijklmnopqrstuvwxy is /> an abcdefghijklmnopqrstuvwxy is \nan abcdefghijklmnopqrstuvwxy is \tan abcdefghijklmnopqrstuvwxy");
            sb.value("Oroborus");
            sb.endList();
            sb.field("Friends");
            sb.startList();

            sb.startRecord();
            sb.field("Name", "macy");
            sb.field("Age", 6);
            sb.field("Sex", "f");
            sb.endRecord();

            sb.startRecord();
            sb.field("Name", "rich");
            sb.field("Age", 7);
            sb.field("Sex", "m");
            sb.field("Foods");
            sb.startList();
            sb.value("Apple");
            sb.value("Cookie");
            sb.endList();
            sb.endRecord();

            sb.endList();
            sb.endRecord();

            sb.startRecord();
            sb.field("Name", "kathy");
            sb.field("Father");
            sb.startRecord();
            sb.field("Name", "Ted");
            sb.field("Age", 29);
            sb.endRecord();
            sb.field("Age");
            sb.field("DOB", new DateTime(1994, 3, 13, 8, 55));
            sb.field("Sex", "f");
            sb.endRecord();

            sb.endList();
        } catch (Exception x) {
            System.out.println("builder error: " + sb);
        }

        System.out.println("built:\n" + ydest);

        //String yaml = "---\nboolean: !!bool \"true\"\ninteger: !!int \"3\"\nfloat: !!float \"3.14\"\nnull: !!null\nstr: !!str \"abc\"\n"
        //      + "---\n- Afterstep\n- CTWM\n- Oroborus";

        //String yaml = "datetime: !!timestamp 2009-12-09T08:35:45.000Z\nboolean: !!bool \"true\"\ninteger: !!int \"3\"\nfloat: !!float \"3.14\"\nnull: !!null\nstr: !!str \"abc\"\n";

        ydest.setPosition(0);

        System.out.println();

        //System.out.println(CompositeParser.parseYaml(ydest).toString());

        System.exit(0);
    }
}