KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > raptus > owxv3 > api > FilesSelector


1 /*
2  * eAdmin/OWX
3  * Copyright (C) 1996-2003 OWX-Project Team <owx-team@gmx.net>
4  */

5 package com.raptus.owxv3.api;
6
7 import java.sql.SQLException JavaDoc;
8 import java.util.*;
9
10 import com.raptus.owxv3.*;
11 import com.raptus.owxv3.modules.base.BaseConstants;
12
13 /**
14  *
15  * <hr>
16  * <table width="100%" border="0">
17  * <tr>
18  * <td width="24%"><b>Filename</b></td><td width="76%">FilesSelector.java</td>
19  * </tr>
20  * <tr>
21  * <td width="24%"><b>Author</b></td><td width="76%">REEA</td>
22  * </tr>
23  * <tr>
24  * <td width="24%"><b>Date</b></td><td width="76%">1st of October 2001</td>
25  * </tr>
26  * </table>
27  * <hr>
28  * <table width="100%" border="0">
29  * <tr>
30  * <td width="24%"><b>Date / Author</b></td><td width="76%"><b>Changes</b></td>
31  * </tr>
32  * </table>
33  * <hr>
34  *This object is used to keep track of files that are linked to a specific object like a news entry.<br>
35  *
36  */

37 public class FilesSelector extends Object JavaDoc
38 {
39     /**
40      * Contains all available GResFile objects allocated by
41      * the GlobalResources.
42      */

43     protected Vector allLinkableFiles = null;
44
45     /**
46      * Contains all GResFile objects that belong to a specific
47      * category.
48      */

49     protected Vector linkableFilesInCategory = null;
50
51     /**
52      * All GResFile object(s) that are linked to some
53      * entries (new or existing)
54      */

55     protected Vector linkedFiles = null;
56
57
58
59     /**
60      *contains String[] objects representing the title for the corespnding file in likedFiles
61      */

62     protected Vector titleList=null;
63
64     /**
65      * This vector contains the GResFile object(s) which already exist
66      * in the database, but were chosen to be deleted.
67      */

68     protected Vector filesToDelete = null;
69
70     /**
71      * The list of all available categories
72      */

73     protected String JavaDoc[] allCategories = null;
74
75
76
77     /**
78      *
79      */

80     protected Locale[] availLocales = null;
81
82
83     /**
84      *
85      */

86     protected String JavaDoc filelinktablename=null;
87
88     /**
89      *
90      */

91
92     protected int maxFileCount=0;
93
94
95     /**
96      *
97      */

98     public FilesSelector(GlobalResources gres,String JavaDoc locales[],String JavaDoc fltn,int maxlinks)
99                 throws SQLException JavaDoc
100     {
101         reset();
102
103         allLinkableFiles = gres.loadLinkableFiles();
104         allCategories = gres.loadAllFileCategories();
105         switchToCategory( getDefaultCategory() );
106
107         availLocales = new Locale[locales.length];
108
109         for(int i = 0; i < locales.length; i ++)
110         {
111             PairOfObjects po = LocaleManager.stripLocaleString(locales[i]);
112             if(po != null && po.isValid())
113                 availLocales[i] = new Locale((String JavaDoc) po.getObjectOne(), (String JavaDoc) po.getObjectTwo());
114         }
115
116         filelinktablename=fltn;
117         maxFileCount=maxlinks;
118     }
119
120     /**
121      *
122      */

123     public void reset()
124     {
125         linkableFilesInCategory = new Vector();
126         linkedFiles = new Vector();
127         titleList=new Vector();
128         filesToDelete = new Vector();
129     }
130
131     /**
132      *
133      */

134     public void loadLinkedFilesAndIds(GlobalResources gres, String JavaDoc tableId, int rowId, String JavaDoc field)
135                 throws SQLException JavaDoc
136     {
137         Vector v = gres.loadLinkedFilesAndIds(GlobalResources.FILETYPE_FILE, tableId, rowId, field);
138         int i,j;
139
140         for(i = 0; i < v.size(); i ++)
141         {
142             PairOfObjects pair=(PairOfObjects)v.get(i);
143
144             GResFile file = (GResFile) pair.getObjectOne();
145             linkedFiles.add(file);
146
147
148             Integer JavaDoc I=(Integer JavaDoc) pair.getObjectTwo();
149
150             String JavaDoc[] title=new String JavaDoc[availLocales.length];
151             for(j=0;j<availLocales.length;j++)
152             {
153                 title[j]=gres.loadMessage(filelinktablename, I.intValue(), BaseConstants.RESFILEFIELD_LINK, availLocales[j]);
154                 if(title[j]==null) title[j]="";
155             }//end for
156
titleList.add(title);
157          }//end for
158
}
159
160     /**
161      *
162      */

163     public void saveLinkedFiles(GlobalResources gres, String JavaDoc tableId, int rowId, String JavaDoc field)
164                 throws SQLException JavaDoc
165     {
166         // save all new or modified GResFile objects
167
int i,j;
168         for(i = 0; i < linkedFiles.size(); i ++)
169         {
170             GResFile file = (GResFile) linkedFiles.get(i);
171
172             int rowid=gres.saveFileLink(tableId, rowId, field, file);
173             if( rowid==-1 )
174             {
175                 LoggingManager.log("Failed to link file id: " + file.getRowID() +
176                                    " to entry id: " + rowId, this);
177
178             }
179             else
180             {
181                 //saving titles too
182
String JavaDoc title[]=(String JavaDoc[])titleList.get(i);
183                 for(j=0;j<availLocales.length;j++)
184                 {
185                     gres.saveMessage(filelinktablename, rowid, BaseConstants.RESFILEFIELD_LINK, availLocales[j],title[j]);
186                 }
187             }//end else
188

189
190
191         }//end for
192

193
194         // drop the urls marked to delete
195
for(i = 0; i < filesToDelete.size(); i ++)
196         {
197             GResFile file = (GResFile) filesToDelete.get(i);
198
199              /* not good method call
200               if( !gres.deleteFileLink(pic) )
201                 LoggingManager.log("Failed to delete URL id: " + pic.getRowID() +
202                                    " from entry id: " + rowId, this);
203               */

204
205             /*added by REEA*/
206
207             int rowid=gres.deleteFileLink(tableId,rowId,field,file);
208             if( rowid==-1 )
209             {
210                 LoggingManager.log("Failed to delete URL id: " + file.getRowID() +
211                                    " from entry id: " + rowId, this);
212
213             }
214             else
215             {
216                 //deleting titles too
217

218                 gres.deleteMessages(filelinktablename, rowid, BaseConstants.RESFILEFIELD_LINK);
219             }
220          }//end for
221
}
222
223
224     /**
225      *returns true if the llink was succesful, else false
226      */

227     public boolean linkFile(int fileId,String JavaDoc[] title)
228     {
229         if(maxFileCount>0 && linkedFiles.size()>=maxFileCount) return false;
230         GResFile grfile = getGRFileForRowId(linkableFilesInCategory, fileId);
231         if(grfile != null && linkedFiles.indexOf(grfile) == -1)
232         {
233             linkedFiles.add(grfile);
234             titleList.add(title);
235         }
236         return true;
237
238     }
239
240     /**
241      *fileId respresents the index of the file in the linkedFiles Vector
242      */

243     public void unlinkFile(int fileId)
244     {
245         //GResFile grfile = getGRFileForRowId(allLinkableFiles, fileId);
246
GResFile grfile =(GResFile)linkedFiles.elementAt(fileId);
247
248         for(int i=0;i<allLinkableFiles.size();i++)
249         {
250             if( grfile.getRowID()==((GResFile)allLinkableFiles.elementAt(i)).getRowID() )
251             {
252
253                 // if the file is already linked in the DB put
254
// it on the "to be removed list"
255

256                 if(grfile.getRowID() != -1)
257                     filesToDelete.add(grfile);
258
259             break;
260             }
261         }
262
263         // now it is save to kill
264

265         linkedFiles.removeElementAt(fileId);
266         titleList.removeElementAt(fileId);
267
268
269     }
270
271     /**
272      *
273      */

274     public void switchToCategory(String JavaDoc category)
275     {
276         if(category == null)
277             return;
278
279         linkableFilesInCategory.clear();
280
281         Enumeration all = allLinkableFiles.elements();
282         while(all.hasMoreElements())
283         {
284             GResFile grfile = (GResFile) all.nextElement();
285             if(grfile != null && grfile.getCategory().equals(category))
286                 linkableFilesInCategory.add(grfile);
287         }
288     }
289
290     /**
291      *
292      */

293     protected GResFile getGRFileForRowId(Vector data, int rowId)
294     {
295         Enumeration availFiles = data.elements();
296         while(availFiles.hasMoreElements())
297         {
298             GResFile grfile = (GResFile) availFiles.nextElement();
299             if(grfile != null && grfile.getRowID() == rowId)
300                 return grfile;
301         }
302
303         return null;
304     }
305
306     /**
307      *
308      */

309     protected String JavaDoc getDefaultCategory()
310     {
311         if(allCategories != null && allCategories.length > 0)
312             return allCategories[0];
313
314         LoggingManager.log("Unable to determine the default pictures category!",this);
315         return null;
316     }
317
318     /**
319      *
320      */

321     public Vector getAllLinkableFiles() { return allLinkableFiles; }
322
323     /**
324      *
325      */

326     public Vector getLinkableFilesInCategory() { return linkableFilesInCategory; }
327
328     /**
329      *
330      */

331     public Vector getLinkedFiles() { return linkedFiles; }
332
333
334     /**
335      *
336      */

337     public Vector getLinkedFiles(Locale userLocale)
338     {
339         //preparing pare of objects of type String, String
340

341         Vector ret=new Vector();
342         try{
343
344
345         int i=0,j=0;
346
347         int localeindex=0;
348
349         for (i=0;i<availLocales.length;i++)
350         {
351             if( availLocales[i].equals(userLocale) )
352             {
353                 localeindex=i;
354                 break;
355             }
356         }
357
358         String JavaDoc link="";
359         String JavaDoc title="";
360         String JavaDoc titles[]=null;
361         for(i=0;i<linkedFiles.size();i++){
362             GResFile gresFile=(GResFile)linkedFiles.get(i);
363
364             PairOfObjects po=new PairOfObjects();
365
366             po.setObjectOne( gresFile.getFileURL() );
367
368             titles=(String JavaDoc[])titleList.get(i);
369             if(titles!=null) title=titles[localeindex];
370             else title="";
371
372             if( title.equals("") ) po.setObjectTwo( gresFile.getFileName() );
373             else po.setObjectTwo(title);
374
375             ret.add(po);
376         }
377         }catch(Exception JavaDoc e){ LoggingManager.log("Error:"+e,this);}
378         return ret;
379     }
380
381
382     /**
383      *
384      */

385     public String JavaDoc[] getAllCategories() { return allCategories; }
386
387
388      /**
389      *
390      */

391     public Locale[] getLocales() { return availLocales; }
392     public void setLocales(Locale[] l) { this.availLocales = l; }
393
394 }
395
396 // eof
397
Popular Tags