1 10 package org.mmbase.module.gui.html; 11 12 import java.util.*; 13 14 import org.mmbase.util.*; 15 import org.mmbase.util.logging.*; 16 import org.mmbase.module.core.*; 17 import org.mmbase.module.corebuilders.*; 18 import org.mmbase.module.builders.*; 19 20 21 33 34 public class StateManager implements CommandHandlerInterface { 35 36 private static Logger log = Logging.getLoggerInstance(StateManager.class.getName()); 38 39 42 public MMBase mmBase; 43 44 49 Hashtable editStates; 51 55 public StateManager(MMBase mmBase) { 56 this.mmBase = mmBase; 57 editStates = new Hashtable(); 58 } 59 60 64 public void initUserStates() { 65 } 66 67 74 public EditState getEditState(String user) { 75 EditState result = (EditState)editStates.get(user); 76 if (result == null) { 77 result = new EditState(user,mmBase); 78 editStates.put(user, result); 79 } 80 return result; 81 } 82 83 112 public String replace(scanpage sp, StringTokenizer commands) { 113 String userName=HttpAuth.getRemoteUser(sp); 118 if (userName==null) return "StateManager-> not logged in"; 119 120 EditState state = getEditState(userName); 122 123 if (commands.hasMoreTokens()) { 124 String token = commands.nextToken(); 125 if (token.equals("SETBUILDER")) { 126 if (commands.hasMoreTokens()) { 127 state.setBuilder(commands.nextToken()); 128 if (commands.hasMoreTokens()) { 129 state.setHtmlValue("JOINNODE",commands.nextToken()); 130 } else { 131 state.setHtmlValue("JOINNODE",""); 132 } 133 } 134 } else if (token.equals("GETBUILDER")) { 135 return state.getBuilderName(); 136 } else if (token.equals("DELBUILDER")) { 137 state.popState(); 138 } else if (token.equals("CLEARBUILDERS")) { 139 state.clear(); 140 } else if (token.equals("ADDRELATION")) { 141 log.warn("ADDRELATION is deprecated in "+sp.getUrl()+"; use NEWINSNODE"); 142 state.addRelation(userName); 143 } else if (token.equals("SETHTMLVALUE")) { 144 state.setHtmlValue(commands.nextToken(),commands.nextToken()); 145 } else if (token.equals("GETHTMLVALUE")) { 146 return state.getHtmlValue(commands.nextToken()); 147 } else if (token.equals("SETEDITNODE")) { 148 state.setEditNode(commands.nextToken(),userName); 149 } else if (token.equals("GETEDITNODE")) { 150 return ""+state.getEditNodeNumber(); 151 } else if (token.equals("GETEDITSRCDUTCHNAME")) { 152 return state.getEditNodeSrcDutchName(); 153 } else if (token.equals("GETEDITDSTDUTCHNAME")) { 154 return state.getEditNodeDstDutchName(); 155 } else if (token.equals("GETEDITSRCNAME")) { 156 return state.getEditNodeSrcName(); 157 } else if (token.equals("GETEDITDSTNAME")) { 158 return state.getEditNodeDstName(); 159 } else if (token.equals("GETEDITSRCNODE")) { 160 return ""+state.getEditNodeSrcNumber(); 161 } else if (token.equals("GETEDITDSTNODE")) { 162 return ""+state.getEditNodeDstNumber(); 163 } else if (token.equals("GETEDITSRCGUIINDICATOR")) { 164 return state.getEditNodeSrcGuiIndicator(); 165 } else if (token.equals("GETEDITDSTGUIINDICATOR")) { 166 return state.getEditNodeDstGuiIndicator(); 167 } else if (token.equals("NEWNODE")) { 168 state.NewNode(userName); 169 } else if (token.equals("NEWINSNODE")) { 170 newInsNode(state,userName,commands); 171 } else if (token.equals("REMOVENODE")) { 172 state.removeNode(); 173 } else if (token.equals("REMOVEEDITOR")) { 174 state.popState(); 175 } else if (token.equals("ISCHANGED")) { 176 if (state.isChanged()) { 177 return "YES"; 178 } else { 179 return "NO"; 180 } 181 } 182 return ""; 183 } 184 185 return "Command not defined (StateManager)"; 186 } 187 188 189 202 boolean newInsNode(EditState ed,String userName,StringTokenizer tok) { 203 try { 204 String tmp=tok.nextToken(); 205 int n1=Integer.parseInt(tmp); 206 207 tmp=tok.nextToken(); 208 int n2=Integer.parseInt(tmp); 209 210 String builder=tok.nextToken(); 211 212 int rtype=-1; 213 214 218 MMObjectBuilder bul = null; 219 rtype = mmBase.getRelDef().getNumberByName(builder); 220 221 if ((rtype!=-1) && (RelDef.usesbuilder)) { MMObjectNode node=mmBase.getRelDef().getNode(rtype); bul = mmBase.getRelDef().getBuilder(node); 224 } else { 225 bul = mmBase.getMMObject(builder); 226 } 227 228 232 if (!(bul instanceof InsRel)) { 233 bul=mmBase.getInsRel(); 234 } 235 236 ed.popState(); 237 ed.setBuilder(bul.getTableName()); 238 239 ed.NewNode(userName); 240 MMObjectNode node=ed.getEditNode(); 241 node.setValue("snumber",n1); 242 node.setValue("dnumber",n2); 243 244 246 if ((bul == mmBase.getInsRel()) && (rtype==-1)) { 247 rtype=mmBase.getTypeRel().getAllowedRelationType(bul.getNodeType(n1),bul.getNodeType(n2)); 248 } 249 250 if (rtype!=-1) { 254 node.setValue("rnumber",rtype); 255 } 256 257 } catch (Exception e) { 258 log.error("StateManager -> Can't create insnode"); 259 e.printStackTrace(); 260 } 261 return true; 262 } 263 264 265 269 boolean setSearchValues(EditState ed, Hashtable vars) { 270 String varline; 271 ed.clearSearchValues(); 272 for (Enumeration h=vars.keys();h.hasMoreElements();) { 273 varline=(String )h.nextElement(); 274 StringTokenizer tok = new StringTokenizer(varline,"-\n\r"); 275 String var=tok.nextToken(); 276 if (var.equals("STATE")) var=tok.nextToken(); 277 if (var.equals("SEARCHVALUE")) { 278 String key=tok.nextToken(); 279 String keyval=(String )vars.get("STATE-SEARCHVALUE-"+key); 280 ed.setSearchValue(key,keyval); 281 } 282 } 283 MMObjectBuilder bul=ed.getBuilder(); 284 ed.setSelectionQuery(createSelectionQuery(ed.getSearchValues(),bul)); 285 return true; 286 } 287 288 291 String createSelectionQuery(Hashtable skeys,MMObjectBuilder bul) { 292 String where="MMNODE ",key,val; 293 String name=bul.getTableName(); 294 for (Enumeration h=skeys.keys();h.hasMoreElements();) { 295 key=(String )h.nextElement(); 296 val=(String )skeys.get(key); 297 if (val!=null && !val.equals("")) { 298 val=val.toLowerCase(); 300 if (key.equals("maxage")) { 301 int ival=30; 302 try { 303 ival=Integer.parseInt(bul.getSearchAge()); 304 } catch(Exception e) {} 305 try { 306 ival=Integer.parseInt(val); 307 } catch(Exception e) {} 308 DayMarkers daym=(DayMarkers)bul.getMMBase().getMMObject("daymarks"); 309 int mark=daym.getDayCountAge(ival); 310 if (where.equals("MMNODE ")) { 311 where+=name+".number=G"+mark; 312 } else { 313 where+="+"+name+".number=G"+mark; 314 } 315 } else { 316 if (where.equals("MMNODE ")) { 317 where+=name+"."+key+"==*"+val+"*"; 318 } else { 319 where+="+"+name+"."+key+"==*"+val+"*"; 320 } 321 } 322 } 323 } 324 325 return where; 326 } 327 328 333 void updateSelectedObject(String user, String objectID) { 334 } 335 336 341 void updateEditField(String user, String fieldName) { 342 } 343 344 349 void initLink(String user, String objectType) { 350 } 351 352 356 public Vector getList(scanpage sp, StringTagger args, StringTokenizer command) throws org.mmbase.module.ParseException { 357 String token; 358 String userName=HttpAuth.getRemoteUser(sp); 359 EditState state = getEditState(userName); 360 Vector result = new Vector(); 361 362 if (command.hasMoreTokens()) { 363 token = command.nextToken(); 364 if (token.equals("GETOPENBUILDERS")) { 365 return getOpenBuilders(state,args); 366 } 367 } 368 result.addElement("No List command defined (FieldEditor)"); 369 return result; 370 } 371 372 376 public boolean process(scanpage sp, StringTokenizer command,Hashtable cmds, Hashtable vars) { 377 String token; 378 String userName=HttpAuth.getRemoteUser(sp); 379 EditState state = getEditState(userName); 380 381 String cmd,cmdline; 382 for (Enumeration h=cmds.keys();h.hasMoreElements();) { 383 cmdline=(String )h.nextElement(); 384 StringTokenizer tok = new StringTokenizer(cmdline,"-\n\r"); 385 if (tok.hasMoreTokens()) { 386 cmd=tok.nextToken(); cmd=tok.nextToken(); 388 if (cmd.equals("SETSEARCHVALUES")) return setSearchValues(state,vars); 389 if (cmd.equals("REMOVENODE")) { 390 String qw=(String )cmds.get("STATE-REMOVENODE"); 391 if (qw.equals("YES")) { 392 state.removeRelations(); 395 state.removeNode(); 396 state.setHtmlValue("Chooser","select"); 397 state.setHtmlValue("Work","empty"); 398 } 399 } else 400 if (cmd.equals("REMOVERELATION")) { 401 String qw=(String )cmds.get("STATE-REMOVERELATION"); 402 if (qw.equals("YES")) { 403 state.removeNode(); 404 state.popState(); 405 state.setHtmlValue("Chooser","realFieldEdit"); 406 state.setHtmlValue("Work","empty"); 407 } 408 } else 409 if (cmd.equals("NEXTFIELD")) { 410 String currentfield=(String )cmds.get("STATE-NEXTFIELD"); 411 state.setHtmlValue("Work","nextfield"); 412 MMObjectBuilder bul=state.getBuilder(); 413 FieldDefs ndefs=bul.getNextField(currentfield); 414 if (ndefs!=null) { 415 state.setHtmlValue("NEXTFIELD",""+ndefs.getGUIType()+".shtml?"+ndefs.getDBName()+"+"+ndefs.getGUIName(state.getLanguage())); 416 } else { 417 state.setHtmlValue("NEXTFIELD","empty.shtml"); 418 } 419 } else 420 if (cmd.equals("SETHTMLVALUE")) { 421 String field=tok.nextToken(); 422 String value=(String )cmds.get("STATE-SETHTMLVALUE-"+field); 423 state.setHtmlValue(field,value); 424 } 425 } 426 } 427 return false; 428 } 429 430 433 public Vector getOpenBuilders(EditState state,StringTagger args) { 434 Vector results=new Vector(); 435 Vector nodes=state.getEditStates(); 436 EditStateNode node; 437 MMObjectNode curnode=state.getEditNode(); for (Enumeration h=nodes.elements();h.hasMoreElements();) { 439 node=(EditStateNode)h.nextElement(); 440 results.addElement(node.getDutchBuilderName()); 441 if (curnode==node.getEditNode()) { 442 results.addElement("a"); 443 } else { 444 results.addElement("n"); 445 } 446 } 447 args.setValue("ITEMS","2"); 448 return results; 449 } 450 451 457 public EditState getState(String user) { 458 EditState result; 459 460 result = (EditState)editStates.get(user); 461 if (result == null) result = new EditState(user,mmBase); 462 463 return result; 464 } 465 466 } 467 468 | Popular Tags |