efa27992030e8f1e84bf83142baabafbfe844eaf
[phpeclipse.git] /
1 package net.sourceforge.phpdt.sql.view.bookmark;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileOutputStream;
6 import java.util.Properties;
7 import java.util.Vector;
8
9 import net.sourceforge.phpdt.sql.IConstants;
10 import net.sourceforge.phpdt.sql.bookmarks.Bookmark;
11
12 import org.eclipse.jface.viewers.ITreeContentProvider;
13 import org.eclipse.jface.viewers.Viewer;
14
15 public class BookmarkContentProvider implements ITreeContentProvider, IConstants {
16   private Vector bookmarks = new Vector();
17   private static BookmarkContentProvider instance = null;
18   private boolean hasChanged = false;
19
20   /**
21    * Singleton accessor
22    */
23   public static synchronized BookmarkContentProvider getInstance() {
24     if (instance == null) {
25       instance = new BookmarkContentProvider();
26     }
27     return instance;
28   }
29
30   private BookmarkContentProvider() {
31   }
32
33   public void importBookmarks(File file) {
34     hasChanged = true;
35     if (DEBUG) {
36       System.out.println("Importing Bookmarks: Loading from file: " + file);
37     }
38     try {
39       Properties props = new Properties();
40       FileInputStream in = new FileInputStream(file);
41       props.load(in);
42       in.close();
43       fromProperties(false, props);
44     } catch (Throwable e) {
45       e.printStackTrace();
46     }
47   }
48   public void load(File file) {
49     if (DEBUG) {
50       System.out.println("Bookmarks: Loading from file: " + file);
51     }
52     try {
53       Properties props = new Properties();
54       FileInputStream in = new FileInputStream(file);
55       props.load(in);
56       in.close();
57       fromProperties(true, props);
58     } catch (Throwable e) {
59       e.printStackTrace();
60     }
61   }
62   public void save(File file) {
63     if (DEBUG) {
64       System.out.println("Bookmarks: Saving to file: " + file);
65     }
66     try {
67       Properties props = getProperties();
68       FileOutputStream out = new FileOutputStream(file);
69       props.store(out, "");
70       out.close();
71     } catch (Throwable e) {
72       e.printStackTrace();
73     }
74   }
75
76   public Object[] getChildren(Object parentElement) {
77     if (parentElement.equals(Root.ROOT)) {
78       return bookmarks.toArray();
79     } else if (parentElement instanceof TreeNode) {
80       TreeNode node = (TreeNode) parentElement;
81       return node.getChildren();
82     }
83     return Root.EMPTY_ARRAY;
84   }
85
86   public Object[] getElements(Object inputElement) {
87     return getChildren(inputElement);
88   }
89
90   public Object getParent(Object element) {
91     if (element.equals(Root.ROOT)) {
92       return null;
93     } else if (element instanceof TreeNode) {
94       TreeNode node = (TreeNode) element;
95       return node.getParent();
96     }
97     return null;
98   }
99
100   public boolean hasChildren(Object element) {
101     if (element.equals(Root.ROOT)) {
102       return true;
103     } else if (element instanceof TreeNode) {
104       TreeNode node = (TreeNode) element;
105       return node.hasChildren();
106     }
107     return false;
108   }
109
110   public void setChildren(BookmarkNode b, Vector tables) {
111     b.setChildren(tables);
112   }
113
114   public void addBookmark(BookmarkNode b) {
115     hasChanged = true;
116     if (!bookmarks.contains(b)) {
117       bookmarks.addElement(b);
118     }
119   }
120   public void removeBookmark(BookmarkNode b) {
121     hasChanged = true;
122     if (bookmarks.contains(b)) {
123       bookmarks.removeElement(b);
124     }
125   }
126
127   public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
128   }
129
130   public void dispose() {
131   }
132
133   public boolean hasChanged() {
134     return hasChanged;
135   }
136
137   public int getSize() {
138     return bookmarks.size();
139   }
140
141   public void fromProperties(boolean overwrite, Properties props) {
142     Vector newBookmarks = new Vector();
143     int i = 0;
144     while (true) {
145       Bookmark bookmark = new BookmarkNode();
146       String name = props.getProperty(i + ".name");
147       if (name == null) {
148         break;
149       }
150       bookmark.setName(name);
151       bookmark.setUsername(props.getProperty(i + ".username"));
152       bookmark.setPassword(props.getProperty(i + ".password"));
153       bookmark.setConnect(props.getProperty(i + ".connect"));
154       bookmark.setDriver(props.getProperty(i + ".driver"));
155       String schema = props.getProperty(i + ".schema");
156       if (schema != null) {
157         bookmark.setSchema(schema);
158       } else {
159         bookmark.setSchema("");
160       }
161       String type = props.getProperty(i + ".type");
162       if (type != null) {
163         bookmark.setType(type);
164       } else {
165         bookmark.setType("");
166       }
167       String driverFile = props.getProperty(i + ".driverLocation");
168       if (driverFile != null) {
169         bookmark.setDriverFile(driverFile);
170       } else {
171         bookmark.setDriverFile("");
172       }
173       if (DEBUG) {
174         System.out.println(bookmark.toString());
175       }
176       if (!bookmark.isEmpty()) {
177         newBookmarks.addElement(bookmark);
178       }
179       i++;
180     }
181     if (overwrite) {
182       bookmarks = newBookmarks;
183     } else {
184       bookmarks.addAll(newBookmarks);
185     }
186   }
187   public Properties getProperties() {
188     Properties props = new Properties();
189     for (int i = 0; i < bookmarks.size(); i++) {
190       Bookmark b = (Bookmark) bookmarks.elementAt(i);
191       props.put(i + ".name", b.getName());
192       props.put(i + ".username", b.getUsername());
193       props.put(i + ".password", b.getPassword());
194       props.put(i + ".schema", b.getSchema());
195       props.put(i + ".connect", b.getConnect());
196       props.put(i + ".driver", b.getDriver());
197       props.put(i + ".type", b.getType());
198       props.put(i + ".driverLocation", b.getDriverFile());
199     }
200     return props;
201   }
202 }