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}