Mega Code Archive

 
Categories / Java / Design Pattern
 

Iterator Pattern 3

//[C] 2002 Sun Microsystems, Inc.--- import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.PrintStream; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.io.File; import java.io.IOException; public class RunIteratorPattern {     public static void main(String [] arguments){         System.out.println("Example for the Iterator pattern");         System.out.println(" This code sample demonstrates how an Iterator can enforce");         System.out.println(" uniformity of processing for different collection types.");         System.out.println(" In this case, there are two classes, ToDoListImpl and");         System.out.println(" ToDoListCollectionImpl, that have different storage needs.");         System.out.println(" ToDoListImpl uses an ArrayList to store its elements in");         System.out.println(" ordered form. The ToDoListCollectionImpl uses a HashMap,");         System.out.println(" since it must differentiate between ToDoListImpl objects by");         System.out.println(" their String identifiers.");         System.out.println();         System.out.println("Although the two classes use different underlying collections,");         System.out.println(" the ListPrinter class can use the Iterator produced by each");         System.out.println(" to print out a set of list contents.");         System.out.println();                  if (!(new File("data.ser").exists())){             DataCreator.serialize("data.ser");         }         ToDoListCollection lists = (ToDoListCollection)(DataRetriever.deserializeData("data.ser"));                  System.out.println("Lists retrieved. Printing out contents using the Iterator");         System.out.println();         ListPrinter.printToDoListCollection(lists, System.out);     } } interface Iterating extends Serializable {   public Iterator getIterator(); } class ToDoListImpl implements ToDoList {   private String listName;   private ArrayList items = new ArrayList();   public void add(String item) {     if (!items.contains(item)) {       items.add(item);     }   }   public void add(String item, int position) {     if (!items.contains(item)) {       items.add(position, item);     }   }   public void remove(String item) {     if (items.contains(item)) {       items.remove(items.indexOf(item));     }   }   public int getNumberOfItems() {     return items.size();   }   public Iterator getIterator() {     return items.iterator();   }   public String getListName() {     return listName;   }   public void setListName(String newListName) {     listName = newListName;   }   public String toString() {     return listName;   } } interface ToDoListCollection extends Iterating {   public void add(ToDoList list);   public void remove(ToDoList list);   public int getNumberOfItems(); } interface ToDoList extends Iterating {   public void add(String item);   public void add(String item, int position);   public void remove(String item);   public int getNumberOfItems();   public String getListName();   public void setListName(String newListName); } class ListPrinter {   public static void printToDoList(ToDoList list, PrintStream output) {     Iterator elements = list.getIterator();     output.println("  List - " + list + ":");     while (elements.hasNext()) {       output.println("\t" + elements.next());     }   }   public static void printToDoListCollection(ToDoListCollection lotsOfLists,       PrintStream output) {     Iterator elements = lotsOfLists.getIterator();     output.println("\"To Do\" List Collection:");     while (elements.hasNext()) {       printToDoList((ToDoList) elements.next(), output);     }   }   public static void printIteratingElement(Iterating element,       PrintStream output) {     output.println("Printing the element " + element);     Iterator elements = element.getIterator();     while (elements.hasNext()) {       Object currentElement = elements.next();       if (currentElement instanceof Iterating) {         printIteratingElement((Iterating) currentElement, output);         output.println();       } else {         output.println(currentElement);       }     }   } } class DataRetriever {   public static Object deserializeData(String fileName) {     Object returnValue = null;     try {       File inputFile = new File(fileName);       if (inputFile.exists() && inputFile.isFile()) {         ObjectInputStream readIn = new ObjectInputStream(             new FileInputStream(fileName));         returnValue = readIn.readObject();         readIn.close();       } else {         System.err.println("Unable to locate the file " + fileName);       }     } catch (ClassNotFoundException exc) {       exc.printStackTrace();     } catch (IOException exc) {       exc.printStackTrace();     }     return returnValue;   } } class ToDoListCollectionImpl implements ToDoListCollection {   private HashMap lists = new HashMap();   public void add(ToDoList list) {     if (!lists.containsKey(list.getListName())) {       lists.put(list.getListName(), list);     }   }   public void remove(ToDoList list) {     if (lists.containsKey(list.getListName())) {       lists.remove(list.getListName());     }   }   public int getNumberOfItems() {     return lists.size();   }   public Iterator getIterator() {     return lists.values().iterator();   }   public String toString() {     return getClass().toString();   } } class DataCreator {   private static final String DEFAULT_FILE = "data.ser";   public static void main(String[] args) {     String fileName;     if (args.length == 1) {       fileName = args[0];     } else {       fileName = DEFAULT_FILE;     }     serialize(fileName);   }   public static void serialize(String fileName) {     try {       serializeToFile(createData(), fileName);     } catch (IOException exc) {       exc.printStackTrace();     }   }   private static Serializable createData() {     ToDoListCollection data = new ToDoListCollectionImpl();     ToDoList listOne = new ToDoListImpl();     ToDoList listTwo = new ToDoListImpl();     ToDoList listThree = new ToDoListImpl();     listOne.setListName("Daily Routine");     listTwo.setListName("Programmer hair washing procedure");     listThree.setListName("Reading List");     listOne.add("Get up (harder some days than others)");     listOne.add("Brew cuppa Java");     listOne.add("Read JVM Times");     listTwo.add("Lather");     listTwo.add("Rinse");     listTwo.add("Repeat");     listTwo.add("(eventually throw a TooMuchHairConditioner exception)");     listThree.add("The complete annotated aphorisms of Duke");     listThree.add("How green was my Java");     listThree.add("URL, sweet URL");     data.add(listOne);     data.add(listTwo);     data.add(listThree);     return data;   }   private static void serializeToFile(Serializable data, String fileName)       throws IOException {     ObjectOutputStream serOut = new ObjectOutputStream(         new FileOutputStream(fileName));     serOut.writeObject(data);     serOut.close();   } }