View Javadoc

1   package org.apache.log4j.chainsaw.prefs;
2   
3   import java.io.Reader;
4   import java.net.URL;
5   import java.util.ArrayList;
6   import java.util.Collections;
7   import java.util.EventListener;
8   import java.util.List;
9   
10  import javax.swing.event.ChangeEvent;
11  import javax.swing.event.ChangeListener;
12  import javax.swing.event.EventListenerList;
13  
14  import com.thoughtworks.xstream.XStream;
15  import com.thoughtworks.xstream.io.xml.DomDriver;
16  
17  public class MRUFileList{
18  
19      private static MRUFileList log4jList = new MRUFileList();
20      private static MRUFileList jdk14List = new MRUFileList();
21      private static final int DEFAULT_MRU_SIZE = 5;
22      
23      private List fileList = new ArrayList();
24      private int size = DEFAULT_MRU_SIZE;
25      
26      private static transient EventListenerList listeners = new EventListenerList();
27      
28      private MRUFileList() {
29          
30      }
31      
32      public static void addChangeListener(ChangeListener listener){
33          listeners.add(ChangeListener.class, listener);
34      }
35      public static void removeChangeListener(ChangeListener listener) {
36          listeners.remove(ChangeListener.class, listener);
37      }
38      
39      /***
40       * Call this method when something opens a log file, this method
41       * adds the URL to the list of known URL's, automatically 
42       * rolling the list to ensure the list maintains the
43       * size property
44       * 
45       * 
46       * @param url
47       */
48      public void opened(URL url) {
49          // first remove any existence of the URL already, make sure we don't have dupes
50          fileList.remove(url);
51          // now make sure we obey the size property,  leaving room for 1 more to be added at the front
52          while(fileList.size()>=size) {
53              fileList.remove(fileList.size()-1);
54          }
55          fileList.add(0, url);
56          fireChangeEvent();
57      }
58      
59      private static void fireChangeEvent() {
60          
61          ChangeEvent event = null;
62          EventListener[] eventListeners = listeners.getListeners(ChangeListener.class);
63          for (int i = 0; i < eventListeners.length; i++) {
64              ChangeListener listener = (ChangeListener) eventListeners[i];
65              if(event==null) {
66                  event = new ChangeEvent(MRUFileList.class);
67              }
68              listener.stateChanged(event);
69          }
70      }
71  
72      /***
73       * Returns an <b>unmodifiable</b> List of the MRU opened file list within Chainsaw
74       * 
75       * @return
76       */
77      public List getMRUList() {
78          return Collections.unmodifiableList(fileList);
79      }
80  
81      public static MRUFileList log4jMRU() {
82          return log4jList;
83      }
84      
85      public static void loadLog4jMRUListFromXML(String xml) {
86          XStream xstream = new XStream(new DomDriver());
87          log4jList = (MRUFileList) xstream.fromXML(xml);
88          fireChangeEvent();
89      }
90      public static void loadLog4jMRUListFromReader(Reader reader) {
91          XStream xstream = new XStream(new DomDriver());
92          log4jList = (MRUFileList) xstream.fromXML(reader);
93          fireChangeEvent();
94          
95      }
96          // TODO Auto-generated method stub
97  }