1 16 package org.outerj.daisy.frontend.editor; 17 18 import org.apache.cocoon.forms.event.ValueChangedListener; 19 import org.apache.cocoon.forms.event.ValueChangedEvent; 20 import org.apache.cocoon.forms.formmodel.Form; 21 import org.apache.cocoon.forms.formmodel.Field; 22 import org.apache.cocoon.forms.formmodel.Widget; 23 24 28 public class EditModeListener implements ValueChangedListener { 29 private EditModeListenerConfig config; 30 31 public EditModeListener(EditModeListenerConfig config) { 32 this.config = config; 33 } 34 35 public void valueChanged(ValueChangedEvent valueChangedEvent) { 36 String editMode = (String )valueChangedEvent.getNewValue(); 37 String oldEditMode = (String )valueChangedEvent.getOldValue(); 38 if (oldEditMode == null) 39 return; 40 41 Form form = valueChangedEvent.getSourceWidget().getForm(); 42 43 if (form.getAttribute("ignore-editmode-change") != null) { 44 form.removeAttribute("ignore-editmode-change"); 45 return; 46 47 } 48 49 Widget widget = form.lookupWidget(oldEditMode.equals("xml") ? config.getXmlFieldPath() : "editors/gui"); 50 boolean valid = widget.validate(); 51 if (!valid) { 52 form.setAttribute("ignore-editmode-change", Boolean.TRUE); 54 form.getChild("editmode").setValue(oldEditMode); 55 } else { 56 if (editMode.equals("xml")) { 57 String xml = config.getXmlFromGuiEditor(); 58 form.lookupWidget(config.getXmlFieldPath()).setValue(xml); 59 } else if (editMode.equals("gui")) { 60 String value = (String )form.lookupWidget(config.getXmlFieldPath()).getValue(); 61 if (value != null) { 62 if (!config.loadGui(value)) { 63 form.setAttribute("ignore-editmode-change", Boolean.TRUE); 65 form.getChild("editmode").setValue("xml"); 66 } 67 } else { 68 config.clearGui(); 69 } 70 } 71 } 72 } 73 74 static interface EditModeListenerConfig { 75 public String getXmlFieldPath(); 76 public String getXmlFromGuiEditor(); 77 public boolean loadGui(String xml); 78 public void clearGui(); 79 } 80 } 81 | Popular Tags |