KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > module > gui > html > ObjectSelector


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10 package org.mmbase.module.gui.html;
11
12 import java.util.Enumeration JavaDoc;
13 import java.util.Hashtable JavaDoc;
14 import java.util.Iterator JavaDoc;
15 import java.util.StringTokenizer JavaDoc;
16 import java.util.Vector JavaDoc;
17
18 import org.mmbase.module.ParseException;
19 import org.mmbase.module.core.ClusterBuilder;
20 import org.mmbase.module.core.MMObjectBuilder;
21 import org.mmbase.module.core.MMObjectNode;
22 import org.mmbase.module.corebuilders.FieldDefs;
23 import org.mmbase.util.HttpAuth;
24 import org.mmbase.util.StringTagger;
25 import org.mmbase.util.scanpage;
26
27 /**
28  * The ObjectSelector class offers the functionality to search for objects
29  * and select found objects to be edited by the FieldSelector and FieldEditor
30  * classes (hitlisted).
31  *
32  * @application SCAN
33  * @author Daniel Ockeloen
34  * @author Hans Speijer
35  * @version $Id: ObjectSelector.java,v 1.22 2005/11/23 15:45:13 pierre Exp $
36  */

37 public class ObjectSelector implements CommandHandlerInterface {
38
39     StateManager stateMngr;
40
41     /**
42      * Constructor to setup reference to the StateManager.
43      */

44     public ObjectSelector(StateManager manager) {
45         stateMngr = manager;
46     }
47
48     /**
49      * General List pages coming from MMEdit.
50      * @javadoc
51      */

52     public Vector JavaDoc getList(scanpage sp, StringTagger args, StringTokenizer JavaDoc commands) throws ParseException {
53         String JavaDoc token;
54         String JavaDoc userName=HttpAuth.getRemoteUser(sp);
55
56         EditState state = stateMngr.getEditState(userName);
57         Vector JavaDoc result = new Vector JavaDoc();
58
59         if (commands.hasMoreTokens()) {
60             token = commands.nextToken();
61             if (token.equals("GETOBJECTS")) {
62                 args.setValue("ITEMS","3");
63                 return getObjectSelectionList(state);
64             } else if (token.equals("GETOBJECTTITLES")) {
65                 args.setValue("ITEMS","1");
66                 return getObjectSelectionTitles(state);
67             } else if (token.equals("GETOBJECTFIELDS")) {
68                 args.setValue("ITEMS","5");
69                 return getObjectFields(state);
70             } else if (token.equals("GETOBJECTRELATIONS")) {
71                 args.setValue("ITEMS","4");
72                 return getObjectRelations(state);
73             } else if (token.equals("GETOBJECTRELATIONS2")) {
74                 args.setValue("ITEMS","4");
75                 return getObjectRelations2(state);
76             } else if (token.equals("GETOBJECTRELATIONS3")) {
77                 args.setValue("ITEMS","8");
78                 return getObjectRelations3(state,args);
79             }
80         }
81         result.addElement("List not defined (ObjectSelector)");
82         return result;
83     }
84
85     /**
86      * @javadoc
87      */

88     Vector JavaDoc getObjectFields(EditState ed) {
89         String JavaDoc language=ed.getLanguage();
90         Vector JavaDoc results=new Vector JavaDoc();
91         MMObjectBuilder obj=ed.getBuilder();
92         MMObjectNode node=ed.getEditNode();
93         if (node!=null) {
94             FieldDefs def;
95             String JavaDoc DBName,val;
96             Object JavaDoc o;
97             for (Iterator JavaDoc i=obj.getFields(FieldDefs.ORDER_EDIT).iterator();i.hasNext();) {
98                 def=(FieldDefs)i.next();
99                 DBName=def.getDBName();
100                 if (!DBName.equals("owner") && !DBName.equals("number") && !DBName.equals("otype")) {
101                     val=obj.getGUIIndicator(DBName,node);
102                     if (val==null) val = node.getStringValue( DBName );
103                     else if (val.equals("null")) val="";
104                     results.addElement(DBName);
105                     results.addElement(val);
106                     if (val.length()>14 && val.indexOf("<")==-1) {
107                         results.addElement(val.substring(0,14)+"...");
108                     } else {
109                         results.addElement(val);
110                     }
111                     results.addElement(def.getGUIName(language));
112                     results.addElement(def.getGUIType());
113                 }
114             }
115         }
116         return results;
117     }
118
119     /**
120      * @javadoc
121      */

122     Vector JavaDoc getObjectRelations2(EditState ed) {
123         Vector JavaDoc results=new Vector JavaDoc();
124         MMObjectBuilder obj=ed.getBuilder();
125         MMObjectNode node=ed.getEditNode();
126
127         if (node!=null && node.getIntValue("number")!=-1) {
128             FieldDefs def;
129             String JavaDoc DBName,val;
130             Object JavaDoc o;
131             Enumeration JavaDoc e=stateMngr.mmBase.getInsRel().getRelations(ed.getEditNodeNumber());
132             MMObjectNode rel;
133             for (;e.hasMoreElements();) {
134                 rel=(MMObjectNode)e.nextElement();
135                 MMObjectNode rdn=stateMngr.mmBase.getRelDef().getNode(rel.getIntValue("rnumber"));
136                 // Am I the source of the desitination of the relation ?
137
if (rel.getIntValue("snumber")==ed.getEditNodeNumber()) {
138                     MMObjectNode other=obj.getNode(rel.getIntValue("dnumber"));
139                     results.addElement(""+rel.getIntValue("number"));
140                     results.addElement(stateMngr.mmBase.getTypeDef().getValue(rel.getIntValue("otype")));
141                     results.addElement(stateMngr.mmBase.getTypeDef().getValue(other.getIntValue("otype")));
142                     results.addElement(""+other.getGUIIndicator());
143                 } else {
144                     MMObjectNode other=obj.getNode(rel.getIntValue("snumber"));
145                     results.addElement(""+rel.getIntValue("number"));
146                     results.addElement(stateMngr.mmBase.getTypeDef().getValue(rel.getIntValue("otype")));
147                     results.addElement(stateMngr.mmBase.getTypeDef().getValue(other.getIntValue("otype")));
148                     results.addElement(""+other.getGUIIndicator());
149                 }
150             }
151         }
152         return results;
153     }
154
155     /**
156      * @javadoc
157      */

158     Vector JavaDoc getAllowedBuilders(String JavaDoc user) {
159         Vector JavaDoc allowed=null;
160         if (stateMngr.mmBase.getAuthType().equals("basic")) {
161             allowed=new Vector JavaDoc();
162             ClusterBuilder clusterBuilder = stateMngr.mmBase.getClusterBuilder();
163             Vector JavaDoc tables=new Vector JavaDoc();
164             tables.addElement("typedef");
165             // bug bug, daniel (9 aug) tables.addElement("authrel");
166
tables.addElement("insrel");
167             tables.addElement("people");
168             Vector JavaDoc fields=new Vector JavaDoc();
169             fields.addElement("typedef.name");
170             fields.addElement("people.account");
171             Vector JavaDoc ordervec=new Vector JavaDoc();
172             Vector JavaDoc dirvec=new Vector JavaDoc();
173             dirvec.addElement("UP");
174
175             Vector JavaDoc vec = clusterBuilder.searchMultiLevelVector(-1,fields,"NO",tables,"people.account=E'"+user+"'",ordervec,dirvec);
176             for (Enumeration JavaDoc h=vec.elements();h.hasMoreElements();) {
177                 MMObjectNode node=(MMObjectNode)h.nextElement();
178                 String JavaDoc builder=node.getStringValue("typedef.name");
179                 allowed.addElement(builder);
180             }
181         }
182         return allowed;
183     }
184
185     /**
186      * Retrieves a list of existing relations and allowed relation types to a specific node.
187      * Represented by a vector of strings, in which each set of 8 consequetive strings
188      * Represents either an existing relation or a relationtype to be used for creating a new one.<br>
189      * The strings represent, in order:<br>
190      * 1 - The builder name of the type linked to (i.e. people) <br>
191      * 2 - The builder name of the relation (i.e. insrel) if an existing relation, otherwise the builder name of the typed linked to <br>
192      * 3 - The number of the relation node if an existing relation, otehrwise the number of the current (edited) node <br>
193      * 4 - Empty when an existing realtion. Otherwise it is either the name of the relation defintiton for a typed relation, or,
194      * when more than one relationtype exists for this node type, the value "multiple" <br>
195      * 5 - GUI name for the node linked to. (empty when a relation type)<br>
196      * 6 - "insEditor" if this is an existing node, "addeditor" if this is a rel;ation type. <br>
197      * 7 - GUI name of the linked-to node's builder (language dependent) <br>
198      * 8 - The gui name of the relation definition for this relation (appropriate for direction, empty when a relation type). <br>
199      * @param ed the EditState object that governs this edit
200      * @args the arguments to this command. The only argument available is "USER". If set, a crude authorization is checked which allows
201      * or disallows access to relations to specific node types.
202      * @return a <code>Vector</code> of <code>String</code>
203      */

204     Vector JavaDoc getObjectRelations3(EditState ed,StringTagger args) {
205         Vector JavaDoc results=new Vector JavaDoc();
206         MMObjectBuilder obj=ed.getBuilder();
207         MMObjectNode node=ed.getEditNode();
208
209         String JavaDoc user=args.Value("USER");
210         Vector JavaDoc allowed=null;
211         if (user!=null && !user.equals("")) {
212             allowed=getAllowedBuilders(user);
213         }
214
215         if (node!=null) {
216             FieldDefs def;
217             String JavaDoc DBName,val,name;
218             Object JavaDoc o;
219             Hashtable JavaDoc res=ed.getRelationTable();
220             Enumeration JavaDoc e=res.keys();
221             MMObjectNode rel;
222             MMObjectNode other;
223             Vector JavaDoc qw;
224             for (;e.hasMoreElements();) {
225                 name=(String JavaDoc)e.nextElement();
226
227                 if (allowed==null || allowed.contains(name)) {
228                     qw=(Vector JavaDoc)res.get(name);
229                     for (Enumeration JavaDoc h=qw.elements();h.hasMoreElements();) {
230                         other=(MMObjectNode)h.nextElement();
231                         rel=(MMObjectNode)h.nextElement();
232                         results.add(name);
233                         results.add(obj.getMMBase().getTypeDef().getValue(rel.getOType()));
234                         results.add(""+rel.getIntValue("number"));
235                         results.add("");
236                         results.add(other.getGUIIndicator());
237                         results.add("insEditor");
238                         results.add(other.getBuilder().getSingularName());
239                         MMObjectNode reldef = obj.getNode(rel.getIntValue("rnumber"));
240                         if (reldef==null) {
241                             results.add("");
242                         } else {
243                             if (rel.getIntValue("snumber")==node.getIntValue("number")) {
244                                 results.add(reldef.getStringValue("dguiname"));
245                             } else {
246                                 results.add(reldef.getStringValue("sguiname"));
247                             }
248                         }
249                     }
250                     // the empty dummy
251
results.add(name);
252                     results.add(name);
253                     results.add(""+node.getIntValue("number"));
254
255                     // startnewfix
256
int reltype=stateMngr.mmBase.getTypeRel().getAllowedRelationType(node.getIntValue("otype"),stateMngr.mmBase.getTypeDef().getIntValue(name));
257                     if (reltype!=-1) {
258                         MMObjectNode rdn=stateMngr.mmBase.getRelDef().getNode(reltype);
259                         results.add(rdn.getStringValue("sname"));
260                     } else {
261                         results.add("multiple");
262                     }
263                     // end new fix
264

265                     results.add("");
266                     results.add("addEditor");
267                     results.add(stateMngr.mmBase.getTypeDef().getSingularName(name,null));
268                     results.add("");
269                 }
270             }
271         }
272         return results;
273     }
274
275     /**
276      * @javadoc
277      */

278     Vector JavaDoc getObjectRelations(EditState ed) {
279         Vector JavaDoc results=new Vector JavaDoc();
280         MMObjectBuilder obj=ed.getBuilder();
281         MMObjectNode node=ed.getEditNode();
282         if (node!=null) {
283             FieldDefs def;
284             String JavaDoc DBName,val;
285             Object JavaDoc o;
286
287             // find all the typeRel that are allowed
288
Enumeration JavaDoc e=stateMngr.mmBase.getTypeRel().getAllowedRelations(node);
289             MMObjectNode trn;
290             MMObjectNode rdn;
291             MMObjectNode tdn;
292             for (;e.hasMoreElements();) {
293                 trn=(MMObjectNode)e.nextElement();
294                 rdn=stateMngr.mmBase.getRelDef().getNode(trn.getIntValue("rnumber"));
295                 if (trn.getIntValue("snumber")==node.getIntValue("otype")) {
296                     tdn=stateMngr.mmBase.getTypeDef().getNode(trn.getIntValue("dnumber"));
297                     results.addElement(""+trn.getIntValue("snumber"));
298                     results.addElement(tdn.getStringValue("name"));
299                     results.addElement(rdn.getStringValue("sGUIName"));
300                     results.addElement(rdn.getStringValue("sname"));
301                 } else {
302                     tdn=stateMngr.mmBase.getTypeDef().getNode(trn.getIntValue("snumber"));
303                     results.addElement(""+trn.getIntValue("dnumber"));
304                     results.addElement(tdn.getStringValue("name"));
305                     results.addElement(rdn.getStringValue("dGUIName"));
306                     results.addElement(rdn.getStringValue("sname"));
307                 }
308             }
309         }
310         return results;
311     }
312
313     /**
314      * Builds a list of HTML Table rows to display a table of found values.
315      * It gets the values out of the database using the selectionQuery of
316      * the current EditState
317      * Item1 = Object ID for selectable object
318      * Item2 = HTML String met record waardes
319      */

320     Vector JavaDoc getObjectSelectionList(EditState state) {
321         Vector JavaDoc result = new Vector JavaDoc();
322         String JavaDoc key,guival;
323         MMObjectBuilder builder = state.getBuilder();
324         MMObjectNode node;
325
326         String JavaDoc conditions = state.getSelectionQuery();
327         Enumeration JavaDoc searchResult;
328
329         String JavaDoc HTMLString = "";
330
331         if (builder != null) {
332             Vector JavaDoc vals = builder.getSortedListFields();
333             //searchResult = builder.search(conditions);
334
//searchResult = builder.search(conditions,"number");
335
searchResult = HtmlBase.search(builder,conditions,"number",false);
336
337             while (searchResult.hasMoreElements()) {
338                 node = (MMObjectNode)searchResult.nextElement();
339                 result.addElement(node.getValue("number").toString());
340                 HTMLString = "";
341
342                 for (Enumeration JavaDoc enumeration = vals.elements(); enumeration.hasMoreElements();) {
343                     key = ((FieldDefs)enumeration.nextElement()).getDBName();
344                     guival=builder.getGUIIndicator(key,node);
345                     if (guival!=null) {
346                         HTMLString += "<td bgcolor=\"#FFFFFF\" width=\"500\"> "+guival+"&nbsp;</td> ";
347                     } else {
348                             Object JavaDoc o=node.getValue(key);
349                             if (o==null || o.toString().equals("null")) {
350                                 HTMLString += "<td bgcolor=\"#FFFFFF\" width=\"500\">&nbsp;</td> ";
351                             } else {
352                                 // should be replaced soon mapping is weird
353
if (o.toString().equals("$SHORTED")) {
354                                     o=node.getStringValue(key);
355                                 }
356                                 HTMLString += "<td bgcolor=\"#FFFFFF\" width=\"500\"> "+o.toString()+"&nbsp; </td> ";
357                             }
358                     }
359                 }
360                 result.addElement(HTMLString);
361                 result.addElement(""+vals.size());
362             }
363         }
364         return result;
365     }
366
367     /**
368      * Builds a list of title strings containing the fields to be displayed
369      * Item1 = Name of the field (GUI Name)
370      */

371     Vector JavaDoc getObjectSelectionTitles(EditState state) {
372         Vector JavaDoc result = new Vector JavaDoc();
373         String JavaDoc language=state.getLanguage();
374         MMObjectBuilder builder = state.getBuilder();
375         Vector JavaDoc fieldDefs;
376
377         if (builder != null) {
378             fieldDefs = builder.getSortedListFields();
379             for (Enumeration JavaDoc enumeration = fieldDefs.elements(); enumeration.hasMoreElements();) {
380                 result.addElement(((FieldDefs)enumeration.nextElement()).getGUIName(language));
381             }
382         }
383
384         return result;
385     }
386
387     /**
388      * General proces pages coming from MMEdit.
389      */

390     public boolean process(scanpage sp, StringTokenizer JavaDoc command, Hashtable JavaDoc cmds, Hashtable JavaDoc vars) {
391         return false;
392     }
393
394     /**
395      * Sets the selection query for this user in this editor.
396      */

397     boolean setObjectSelectionConditions(String JavaDoc user, Hashtable JavaDoc vars) {
398         EditState state = stateMngr.getEditState(user);
399
400         // Waardes uit de values lezen en met setQueryString() aan
401
// de userstate geven
402

403         return true;
404     }
405
406     /**
407      * Handle a $MOD command.
408      * ObjectSelector does not offer any commands.
409      */

410     public String JavaDoc replace(scanpage sp, StringTokenizer JavaDoc cmds) {
411         return "Command not defined (ObjectSelector)";
412         // bedoeld voor het clearen van de serachvalues
413
}
414
415     /**
416      * Clears the search fields for the searchfields
417      * @deprecated-now removed per 1.7, does not do anything, and is never called
418      */

419     void clearSearchFields(String JavaDoc user) {
420     }
421
422 }
423
424
425
426
427
Popular Tags