001: /*
002: * Gruntspud
003: *
004: * Copyright (C) 2002 Brett Smith.
005: *
006: * Written by: Brett Smith <t_magicthize@users.sourceforge.net>
007: *
008: * This program is free software; you can redistribute it and/or
009: * modify it under the terms of the GNU Library General Public License
010: * as published by the Free Software Foundation; either version 2 of
011: * the License, or (at your option) any later version.
012: * This program is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
015: * GNU Library General Public License for more details.
016: *
017: * You should have received a copy of the GNU Library General Public
018: * License along with this program; if not, write to the Free Software
019: * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
020: */
021:
022: package gruntspud.file;
023:
024: import gruntspud.Constants;
025: import gruntspud.GruntspudContext;
026:
027: import java.net.URLDecoder;
028: import java.net.URLEncoder;
029: import java.util.ResourceBundle;
030: import java.util.StringTokenizer;
031: import java.util.Vector;
032:
033: import javax.swing.table.AbstractTableModel;
034:
035: import org.netbeans.lib.cvsclient.util.SimpleStringPattern;
036:
037: /**
038: * Description of the Class
039: *
040: *@author magicthize
041: *@created 26 May 2002
042: */
043: public class FileTypeMappingModel extends AbstractTableModel {
044: static ResourceBundle res = ResourceBundle
045: .getBundle("gruntspud.file.ResourceBundle");
046: private Vector mappings;
047: private GruntspudContext context;
048:
049: /**
050: * Creates a new FileTypeMappingModel object.
051: *
052: * @param context DOCUMENT ME!
053: */
054: public FileTypeMappingModel(GruntspudContext context) {
055: this .context = context;
056:
057: mappings = new Vector();
058:
059: StringTokenizer t = new StringTokenizer(context.getHost()
060: .getProperty(Constants.FILE_TYPE_MAPPINGS,
061: Constants.DEFAULT_FILE_TYPE_MAPPINGS), "|");
062:
063: try {
064: while (t.hasMoreTokens()) {
065: String mapString = t.nextToken();
066: StringTokenizer s = new StringTokenizer(mapString, "&");
067: String description = s.nextToken();
068: int action = Integer.parseInt(s.nextToken());
069: String patterns = s.nextToken();
070: String application = s.hasMoreTokens() ? s.nextToken()
071: : "";
072: FileTypeMapping mapping = new FileTypeMapping();
073: mapping.setDescription(description);
074: mapping.setAction(action);
075: mapping.setApplication(application);
076:
077: StringTokenizer p = new StringTokenizer(patterns, "@");
078:
079: while (p.hasMoreTokens()) {
080: // Deprecated in 1.4, but not available in 1.3. Bit of a pain
081: // String pattern = URLDecoder.decode(p.nextToken(), "UTF-8");
082: String pattern = URLDecoder.decode(p.nextToken());
083: SimpleStringPattern pat = new SimpleStringPattern(
084: pattern);
085: mapping.addPattern(pat);
086: }
087:
088: addMapping(mapping, false);
089: }
090: } catch (Exception e) {
091: e.printStackTrace();
092: }
093: }
094:
095: /**
096: * DOCUMENT ME!
097: */
098: public void cleanUp() {
099: StringBuffer buf = new StringBuffer();
100:
101: for (int i = 0; i < getRowCount(); i++) {
102: if (buf.length() > 0) {
103: buf.append("|");
104:
105: }
106: FileTypeMapping m = getMappingAt(i);
107: buf.append((m.getDescription() == null) ? "" : m
108: .getDescription());
109: buf.append("&");
110: buf.append(m.getAction());
111: buf.append("&");
112:
113: StringBuffer buf2 = new StringBuffer();
114:
115: for (int j = 0; j < m.getPatternCount(); j++) {
116: if (buf2.length() > 0) {
117: buf2.append("@");
118:
119: }
120: SimpleStringPattern p = m.getPatternAt(j);
121:
122: try {
123: // Deprecated in 1.4, but not available in 1.3. Bit of a pain
124: buf2.append(URLEncoder.encode(p.toString()));
125:
126: // buf2.append(URLEncoder.encode(p.toString(), "UTF-8"));
127: } catch (Exception e) {
128: }
129: }
130:
131: buf.append(buf2.toString());
132: buf.append("&");
133: buf.append((m.getApplication() == null) ? "" : m
134: .getApplication());
135: }
136:
137: context.getHost().setProperty(Constants.FILE_TYPE_MAPPINGS,
138: buf.toString());
139: }
140:
141: /**
142: * DOCUMENT ME!
143: *
144: * @param i DOCUMENT ME!
145: */
146: public void moveDown(int i) {
147: FileTypeMapping a = getMappingAt(i);
148: mappings.removeElementAt(i);
149: fireTableRowsDeleted(i, i);
150: mappings.insertElementAt(a, i + 1);
151: fireTableRowsInserted(i + 1, i + 1);
152: }
153:
154: /**
155: * DOCUMENT ME!
156: *
157: * @param i DOCUMENT ME!
158: */
159: public void moveUp(int i) {
160: FileTypeMapping a = getMappingAt(i);
161: mappings.removeElementAt(i);
162: fireTableRowsDeleted(i, i);
163: mappings.insertElementAt(a, i - 1);
164: fireTableRowsInserted(i - 1, i - 1);
165: }
166:
167: /**
168: * DOCUMENT ME!
169: *
170: * @param i DOCUMENT ME!
171: */
172: public void removeMappingAt(int i) {
173: mappings.removeElementAt(i);
174: fireTableRowsDeleted(i, i);
175: }
176:
177: /**
178: * DOCUMENT ME!
179: *
180: * @param mapping DOCUMENT ME!
181: */
182: public void removeMapping(FileTypeMapping mapping) {
183: int i = mappings.indexOf(mapping);
184:
185: if (i != -1) {
186: removeMappingAt(i);
187: }
188: }
189:
190: /**
191: * DOCUMENT ME!
192: *
193: * @param i DOCUMENT ME!
194: *
195: * @return DOCUMENT ME!
196: */
197: public FileTypeMapping getMappingAt(int i) {
198: return (FileTypeMapping) mappings.elementAt(i);
199: }
200:
201: /**
202: * DOCUMENT ME!
203: *
204: * @param mapping DOCUMENT ME!
205: */
206: public void addMapping(FileTypeMapping mapping) {
207: addMapping(mapping, true);
208: }
209:
210: /**
211: * DOCUMENT ME!
212: *
213: * @param mapping DOCUMENT ME!
214: * @param insert DOCUMENT ME!
215: */
216: public void addMapping(FileTypeMapping mapping, boolean insert) {
217: if (insert) {
218: mappings.insertElementAt(mapping, 0);
219: fireTableRowsInserted(0, 0);
220: } else {
221: int i = getRowCount();
222: mappings.addElement(mapping);
223: fireTableRowsInserted(i, i);
224: }
225: }
226:
227: /**
228: * DOCUMENT ME!
229: *
230: * @return DOCUMENT ME!
231: */
232: public int getRowCount() {
233: return mappings.size();
234: }
235:
236: /**
237: * DOCUMENT ME!
238: *
239: * @param r DOCUMENT ME!
240: * @param c DOCUMENT ME!
241: *
242: * @return DOCUMENT ME!
243: */
244: public Object getValueAt(int r, int c) {
245: FileTypeMapping mapping = getMappingAt(r);
246:
247: switch (c) {
248: case 0:
249: return mapping.getDescription();
250: default:
251: return mapping.getPatternsAsString();
252: }
253: }
254:
255: /**
256: * DOCUMENT ME!
257: *
258: * @param c DOCUMENT ME!
259: *
260: * @return DOCUMENT ME!
261: */
262: public String getColumnName(int c) {
263: switch (c) {
264: case 0:
265: return res.getString("descriptionTableHeading");
266: default:
267: return res.getString("Patterns");
268: }
269: }
270:
271: /**
272: * DOCUMENT ME!
273: *
274: * @param c DOCUMENT ME!
275: *
276: * @return DOCUMENT ME!
277: */
278: public Class getColumnClass(int c) {
279: return String.class;
280: }
281:
282: /**
283: * DOCUMENT ME!
284: *
285: * @return DOCUMENT ME!
286: */
287: public int getColumnCount() {
288: return 2;
289: }
290: }
|