1 10 package org.mmbase.module.gui.html; 11 12 import java.util.*; 13 import java.io.*; 14 15 import org.mmbase.module.ParseException; 16 import org.mmbase.module.core.*; 17 import org.mmbase.module.corebuilders.*; 18 19 import org.mmbase.util.*; 20 import org.mmbase.util.logging.*; 21 22 32 public class FieldEditor implements CommandHandlerInterface { 33 private static Logger log = Logging.getLoggerInstance(FieldEditor.class.getName()); 35 36 StateManager stateMngr; 37 38 42 public FieldEditor(StateManager manager) { 43 stateMngr = manager; 44 } 45 46 50 public Vector getList(scanpage sp, StringTagger args, StringTokenizer command) throws ParseException { 51 String token; 52 String userName=HttpAuth.getRemoteUser(sp); 53 54 EditState state = stateMngr.getEditState(userName); 55 Vector result = new Vector(); 56 57 if (command.hasMoreTokens()) { 58 token = command.nextToken(); 59 if (token.equals("DUMMY")) { 60 } else if (token.equals("DUMMY")) { 61 } 62 } 63 result.addElement("No List command defined (FieldEditor)"); 64 return result; 65 } 66 67 71 public String replace(scanpage sp, StringTokenizer command) { 72 String token; 73 String userName=HttpAuth.getRemoteUser(sp); 74 EditState state = stateMngr.getEditState(userName); 75 Vector result = new Vector(); 76 77 if (command.hasMoreTokens()) { 78 token = command.nextToken(); 79 if (token.equals("GETFIELDVALUE")) { 80 return getEditField(state,command.nextToken()); 81 } else 82 if (token.equals("SETFIELDVALUE")) { 83 return setEditField(state,command.nextToken(),command.nextToken()); 84 } 85 else if (token.equals("GETFIELDDATE")) { 86 return getEditDateField (state, command.nextToken (), command.nextToken ()); 87 } else if (token.equals("COMMIT")) { 88 return ""+doCommit(state,userName); 89 } else if (token.equals("SETINSSAVE")) { 90 state.setInsSave(true); 91 } 92 } 93 return "Command not defined (FieldEditor)"; 94 } 95 96 100 public boolean process(scanpage sp, StringTokenizer command,Hashtable cmds, Hashtable vars) { 101 String token; 102 String userName=HttpAuth.getRemoteUser(sp); 103 EditState state = stateMngr.getEditState(userName); 104 Vector result = new Vector(); 105 106 if (command.hasMoreTokens()) { 107 token = command.nextToken(); 108 if (token.equals("SETFIELDVALUE")) { 109 return setEditField(state,command.nextToken(),cmds); 110 } 111 else if (token.equals ("SETFIELDDATE")) { 112 return setEditDateField (state, command.nextToken (), cmds); 113 } else if (token.equals("SETFIELDFILE_IMG")) { 114 log.info("FieldEditor -> FILE UPLOAD DETECTED"); 115 setEditIMGField(state,command.nextToken(),cmds,sp); 116 return true; 117 } else if (token.equals("SETFIELDFILE_DISK")) { 118 log.info("FieldEditor -> FILE DISK DETECTED"); 119 setEditDISKField(state,command.nextToken(),cmds,sp); 120 return true; 121 } else if (token.equals("DUMMY")) { 122 } 123 } 124 return false; 125 } 126 127 130 String getEditField(EditState ed, String fieldname) { 131 MMObjectNode node=ed.getEditNode(); 132 if (node == null) return ""; 133 return Encode.encode("ESCAPE_HTML",node.getStringValue( fieldname )); 134 } 135 136 139 boolean setEditField(EditState ed, String fieldname,Hashtable cmds) { 140 MMObjectBuilder obj=ed.getBuilder(); 141 FieldDefs def=obj.getField(fieldname); 142 String value=(String )cmds.get("EDIT-SETFIELDVALUE-"+fieldname); 143 MMObjectNode node=ed.getEditNode(); 144 if (node!=null) { 145 node.setValue( fieldname, value ); 146 replaceOwner(ed,node); 147 } 148 return true; 149 } 150 151 154 String setEditField(EditState ed, String fieldname,String value) { 155 MMObjectBuilder obj=ed.getBuilder(); 156 FieldDefs def=obj.getField(fieldname); 157 MMObjectNode node=ed.getEditNode(); 158 if (node!=null) { 159 node.setValue( fieldname, value ); 160 replaceOwner(ed,node); 161 } 162 return ""; 163 } 164 165 static private String monthNames[] = 167 { "januari", "februari", "maart", "april", "mei", "juni", "juli", 168 "augustus", "september", "oktober", "november", "december" }; 169 170 173 static public String getMonthString (int m) { 174 return monthNames[m - 1]; 175 } 176 177 private int getMonthNumber (String m) { 179 int r; 180 for (r = 0; r < 12; r++) if (m.equals (monthNames[r])) break; 181 return r+1; 182 } 183 184 private String leadZero (int m) { 185 if (m < 0 || m > 9) return ""+m; 186 return "0"+m; 187 } 188 189 192 String getEditDateField (EditState ed, String what, String fieldname) { 193 MMObjectNode node=ed.getEditNode(); 194 String res = new String (); 195 196 if (node != null) { 197 int time = node.getIntValue(fieldname); 198 Date d; 199 200 if (time == -1) { d = new Date (); 202 } 203 else { 204 d = new Date (((long)time * 1000)+DateSupport.getMilliOffset()); 205 } 206 207 if (what.equals ("DAYS")) res = leadZero (d.getDate ()); 208 else if (what.equals ("MONTHS")) res = getMonthString (d.getMonth () + 1); 209 else if (what.equals ("YEARS")) res = "" + (1900 + d.getYear ()); 210 else if (what.equals ("HOURS")) res = leadZero (d.getHours ()); 211 else if (what.equals ("MINUTES")) res = leadZero (d.getMinutes ()); 212 else if (what.equals ("SECONDS")) res = leadZero (d.getSeconds ()); 213 } 214 return res; 215 } 216 217 220 boolean setEditDateField (EditState ed, String fieldname, Hashtable cmds) { 221 MMObjectNode node = ed.getEditNode(); 222 String days = (String )cmds.get ("EDIT-DAY"); 223 String months = new Integer (getMonthNumber ((String )cmds.get ("EDIT-MONTH"))).toString (); 224 String years = (String )cmds.get ("EDIT-YEAR"); 225 String hours = (String )cmds.get ("EDIT-HOUR"); 226 String minutes = (String )cmds.get ("EDIT-MINUTE"); 227 String seconds = (String )cmds.get ("EDIT-SECOND"); 228 String value = hours + ":" + minutes + ":" + seconds + " " + days + "/" + months + "/" + years; 229 230 try { int time = (int)(DateSupport.convertDateToLong (value) / 1000); 232 Date d = new Date ((long)time * 1000); 233 log.debug("FieldEdit -> Storing: " + d.toString () + " in field " + fieldname); 234 node.setValue (fieldname, new Integer (time)); 235 } catch (Exception e) { 236 log.error(Logging.stackTrace(e)); 237 return false; 238 } 239 return true; 240 } 241 242 245 boolean setEditIMGField(EditState ed, String fieldname,Hashtable cmds,scanpage sp) { 246 MMObjectBuilder obj=ed.getBuilder(); 247 FieldDefs def=obj.getField(fieldname); 248 try { 249 MMObjectNode node=ed.getEditNode(); 250 if (node!=null) { 251 byte[] bytes=sp.poster.getPostParameterBytes("file"); 252 node.setValue(fieldname,bytes); 253 } 254 } catch (Exception e) { 255 log.error(e.getMessage() + ":" + Logging.stackTrace(e)); 256 } 257 return true; 258 } 259 260 263 boolean setEditDISKField(EditState ed, String fieldname,Hashtable cmds,scanpage sp) { 264 MMObjectBuilder obj=ed.getBuilder(); 265 FieldDefs def=obj.getField(fieldname); 266 try { 267 MMObjectNode node=ed.getEditNode(); 268 if (node!=null) { 269 String filename=(String )cmds.get("EDIT-SETFIELDFILE_DISK-"+fieldname); 270 byte[] bytes=getFile(filename); 271 if (bytes==null) { 272 log.warn("FieldEditor-> Empty file !!"); 273 } else { 274 node.setValue(fieldname,bytes); 275 } 276 } 277 } catch (Exception e) { 278 log.error(Logging.stackTrace(e)); 279 } 280 return true; 281 } 282 283 286 int doCommit(EditState ed,String userName) { 287 MMObjectNode node=ed.getEditNode(); 288 if (node!=null) { 289 int id=node.getIntValue("number"); 290 if (id==-1) { 291 id=node.insert(userName); 294 node.getChanged().clear(); 296 } else { 297 node.commit(); 299 } 300 if (node.getIntValue("snumber")!=-1 && node.getIntValue("dnumber")!=-1) { 301 EditStateNode prenode=ed.getEditStateNode(1); 302 if (prenode!=null) { 303 prenode.delRelationTable(); 304 } 305 } 306 return id; 307 } 308 return -1; 309 } 310 311 private void replaceOwner(EditState ed,MMObjectNode node) { 312 if (node!=null) { 314 String ow=node.getStringValue("owner"); 315 String userName=ed.getUser(); 316 if (ow.equals("pop")) { 317 node.setValue("owner",userName); 318 log.debug("FieldEditor -> replaceOwner("+node.getValue("number")+","+userName+"): Replaced owner 'pop' with owner '"+userName+"'"); 319 } 320 } 321 } 322 323 326 public byte[] getFile(String filepath){ 327 try { 328 File file = new File(filepath); 329 FileInputStream fis = new FileInputStream(filepath); 330 byte[] ba = new byte[(int)file.length()]; fis.read(ba); fis.close(); 333 return ba; 334 } catch (IOException ioe){ 335 return null; 336 } 337 } 338 339 } 340 | Popular Tags |