001/*
002 * (c) 2005, 2009, 2010 ThoughtWorks Ltd
003 * All rights reserved.
004 *
005 * The software in this package is published under the terms of the BSD
006 * style license a copy of which has been included with this distribution in
007 * the LICENSE.txt file.
008 * 
009 * Created on 29-Jun-2005
010 */
011package proxytoys.examples.overview;
012
013import java.io.ByteArrayInputStream;
014import java.io.ByteArrayOutputStream;
015import java.io.DataInput;
016import java.io.DataInputStream;
017import java.io.DataOutput;
018import java.io.DataOutputStream;
019import java.io.File;
020import java.io.IOException;
021import java.io.RandomAccessFile;
022import java.util.ArrayList;
023import java.util.List;
024import java.util.TreeMap;
025import java.util.zip.CRC32;
026import java.util.zip.Checksum;
027
028import com.thoughtworks.proxy.toys.dispatch.Dispatching;
029
030/**
031 * @author Jörg Schaible
032 */
033public class DispatcherToyExample {
034
035    public static void packageOverviewExample1() throws IOException {
036        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
037        ArrayList<String> list = new ArrayList<String>();
038        TreeMap<Object, Object> map = new TreeMap<Object, Object>();
039
040        Checksum checksum = Dispatching.proxy(Checksum.class, DataInput.class, DataOutput.class, List.class)
041                .with(list, new CRC32(), new DataInputStream(new ByteArrayInputStream("Hello Proxy!".getBytes())),
042                        new DataOutputStream(outputStream), map)
043                .build();
044
045        DataOutput.class.cast(checksum).writeBytes("Chameleon");
046        @SuppressWarnings("unchecked")
047        List<String> stringLlist = List.class.cast(checksum);
048        stringLlist.add("Frankenstein");
049
050        System.out.println("Read a line: " + DataInput.class.cast(checksum).readLine());
051        System.out.println("Once written: " + outputStream.toString());
052        System.out.println("List contains: " + list.toString());
053        System.out.println("Current CRC32 value: " + checksum.getValue());
054    }
055
056    public static void packageOverviewExample2() throws IOException {
057        File tempFile = File.createTempFile("Demo", null);
058        try {
059            RandomAccessFile file = new RandomAccessFile(tempFile, "rw");
060            Object proxy = Dispatching.proxy(DataInput.class, DataOutput.class)
061                    .with(file)
062                    .build();
063
064            DataOutput.class.cast(proxy).writeBytes("One matches both");
065            file.seek(0);
066            System.out.println("Just written: " + DataInput.class.cast(proxy).readLine());
067        } finally {
068            tempFile.delete();
069        }
070    }
071
072    public static void main(String[] args) throws IOException {
073        System.out.println();
074        System.out.println();
075        System.out.println("Running Dispatcher Toy Examples");
076        System.out.println();
077        System.out.println("Example 1 of Package Overview:");
078        packageOverviewExample1();
079        System.out.println();
080        System.out.println("Example 2 of Package Overview:");
081        packageOverviewExample2();
082    }
083}