1 10 package org.mmbase.module.gui.html; 11 12 import java.util.Enumeration ; 13 import java.util.Hashtable ; 14 import java.util.Iterator ; 15 import java.util.StringTokenizer ; 16 import java.util.Vector ; 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 37 public class ObjectSelector implements CommandHandlerInterface { 38 39 StateManager stateMngr; 40 41 44 public ObjectSelector(StateManager manager) { 45 stateMngr = manager; 46 } 47 48 52 public Vector getList(scanpage sp, StringTagger args, StringTokenizer commands) throws ParseException { 53 String token; 54 String userName=HttpAuth.getRemoteUser(sp); 55 56 EditState state = stateMngr.getEditState(userName); 57 Vector result = new Vector (); 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 88 Vector getObjectFields(EditState ed) { 89 String language=ed.getLanguage(); 90 Vector results=new Vector (); 91 MMObjectBuilder obj=ed.getBuilder(); 92 MMObjectNode node=ed.getEditNode(); 93 if (node!=null) { 94 FieldDefs def; 95 String DBName,val; 96 Object o; 97 for (Iterator 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 122 Vector getObjectRelations2(EditState ed) { 123 Vector results=new Vector (); 124 MMObjectBuilder obj=ed.getBuilder(); 125 MMObjectNode node=ed.getEditNode(); 126 127 if (node!=null && node.getIntValue("number")!=-1) { 128 FieldDefs def; 129 String DBName,val; 130 Object o; 131 Enumeration 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 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 158 Vector getAllowedBuilders(String user) { 159 Vector allowed=null; 160 if (stateMngr.mmBase.getAuthType().equals("basic")) { 161 allowed=new Vector (); 162 ClusterBuilder clusterBuilder = stateMngr.mmBase.getClusterBuilder(); 163 Vector tables=new Vector (); 164 tables.addElement("typedef"); 165 tables.addElement("insrel"); 167 tables.addElement("people"); 168 Vector fields=new Vector (); 169 fields.addElement("typedef.name"); 170 fields.addElement("people.account"); 171 Vector ordervec=new Vector (); 172 Vector dirvec=new Vector (); 173 dirvec.addElement("UP"); 174 175 Vector vec = clusterBuilder.searchMultiLevelVector(-1,fields,"NO",tables,"people.account=E'"+user+"'",ordervec,dirvec); 176 for (Enumeration h=vec.elements();h.hasMoreElements();) { 177 MMObjectNode node=(MMObjectNode)h.nextElement(); 178 String builder=node.getStringValue("typedef.name"); 179 allowed.addElement(builder); 180 } 181 } 182 return allowed; 183 } 184 185 204 Vector getObjectRelations3(EditState ed,StringTagger args) { 205 Vector results=new Vector (); 206 MMObjectBuilder obj=ed.getBuilder(); 207 MMObjectNode node=ed.getEditNode(); 208 209 String user=args.Value("USER"); 210 Vector allowed=null; 211 if (user!=null && !user.equals("")) { 212 allowed=getAllowedBuilders(user); 213 } 214 215 if (node!=null) { 216 FieldDefs def; 217 String DBName,val,name; 218 Object o; 219 Hashtable res=ed.getRelationTable(); 220 Enumeration e=res.keys(); 221 MMObjectNode rel; 222 MMObjectNode other; 223 Vector qw; 224 for (;e.hasMoreElements();) { 225 name=(String )e.nextElement(); 226 227 if (allowed==null || allowed.contains(name)) { 228 qw=(Vector )res.get(name); 229 for (Enumeration 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 results.add(name); 252 results.add(name); 253 results.add(""+node.getIntValue("number")); 254 255 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 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 278 Vector getObjectRelations(EditState ed) { 279 Vector results=new Vector (); 280 MMObjectBuilder obj=ed.getBuilder(); 281 MMObjectNode node=ed.getEditNode(); 282 if (node!=null) { 283 FieldDefs def; 284 String DBName,val; 285 Object o; 286 287 Enumeration 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 320 Vector getObjectSelectionList(EditState state) { 321 Vector result = new Vector (); 322 String key,guival; 323 MMObjectBuilder builder = state.getBuilder(); 324 MMObjectNode node; 325 326 String conditions = state.getSelectionQuery(); 327 Enumeration searchResult; 328 329 String HTMLString = ""; 330 331 if (builder != null) { 332 Vector vals = builder.getSortedListFields(); 333 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 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+" </td> "; 347 } else { 348 Object o=node.getValue(key); 349 if (o==null || o.toString().equals("null")) { 350 HTMLString += "<td bgcolor=\"#FFFFFF\" width=\"500\"> </td> "; 351 } else { 352 if (o.toString().equals("$SHORTED")) { 354 o=node.getStringValue(key); 355 } 356 HTMLString += "<td bgcolor=\"#FFFFFF\" width=\"500\"> "+o.toString()+" </td> "; 357 } 358 } 359 } 360 result.addElement(HTMLString); 361 result.addElement(""+vals.size()); 362 } 363 } 364 return result; 365 } 366 367 371 Vector getObjectSelectionTitles(EditState state) { 372 Vector result = new Vector (); 373 String language=state.getLanguage(); 374 MMObjectBuilder builder = state.getBuilder(); 375 Vector fieldDefs; 376 377 if (builder != null) { 378 fieldDefs = builder.getSortedListFields(); 379 for (Enumeration enumeration = fieldDefs.elements(); enumeration.hasMoreElements();) { 380 result.addElement(((FieldDefs)enumeration.nextElement()).getGUIName(language)); 381 } 382 } 383 384 return result; 385 } 386 387 390 public boolean process(scanpage sp, StringTokenizer command, Hashtable cmds, Hashtable vars) { 391 return false; 392 } 393 394 397 boolean setObjectSelectionConditions(String user, Hashtable vars) { 398 EditState state = stateMngr.getEditState(user); 399 400 403 return true; 404 } 405 406 410 public String replace(scanpage sp, StringTokenizer cmds) { 411 return "Command not defined (ObjectSelector)"; 412 } 414 415 419 void clearSearchFields(String user) { 420 } 421 422 } 423 424 425 426 427 | Popular Tags |