mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
first pass on repeats.
- refactoring of schemaformbuilder to remove unnecessary methods/cleanup and modifications to get it to emit triggers that i need for insert at the top and insert after - implementation of ajax server side method for setting the repeat index and support for capturing and sending back event responses for all server requests. - implementation of client side repeat support: dom manipulation of repeat elements, identifying and relating widgets with model data, creating prototype clones, and support for some XFormsEvent (chiba-index-changed, chiba-item-inserted, chiba-prototype-cloned, chiba-id-generated) - changing background-colour to background-color in the dashlet. funny. - handling a null pointer exception in the errorbean when an error is thrown from the ajax stuff. - minor debugging enhancements in TemplatingService git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3814 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -20,6 +20,7 @@ import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import javax.faces.context.FacesContext;
|
||||
import javax.faces.context.ResponseWriter;
|
||||
@@ -36,7 +37,10 @@ import org.w3c.dom.Node;
|
||||
import org.alfresco.web.app.servlet.FacesHelper;
|
||||
import org.chiba.xml.xforms.ChibaBean;
|
||||
import org.chiba.xml.xforms.exception.XFormsException;
|
||||
import org.chiba.xml.xforms.events.XFormsEvent;
|
||||
import org.chiba.xml.xforms.events.XFormsEventFactory;
|
||||
|
||||
import org.w3c.dom.*;
|
||||
import org.w3c.dom.events.Event;
|
||||
import org.w3c.dom.events.EventListener;
|
||||
import org.w3c.dom.events.EventTarget;
|
||||
@@ -47,13 +51,13 @@ import org.chiba.xml.xforms.connector.http.AbstractHTTPConnector;
|
||||
* Manages the chiba bean lifecycle.
|
||||
*/
|
||||
public class XFormsBean
|
||||
implements EventListener
|
||||
{
|
||||
private static final Log LOGGER = LogFactory.getLog(XFormsBean.class);
|
||||
|
||||
private TemplateType tt;
|
||||
private InstanceData instanceData = null;
|
||||
private ChibaBean chibaBean;
|
||||
private final LinkedList<XFormsEvent> eventLog = new LinkedList<XFormsEvent>();
|
||||
|
||||
/** @return the template type */
|
||||
public TemplateType getTemplateType()
|
||||
@@ -95,12 +99,33 @@ public class XFormsBean
|
||||
tt.getInputMethods().get(0);
|
||||
final Document form = tim.getXForm(instanceData.getContent(), tt);
|
||||
this.chibaBean.setXMLContainer(form);
|
||||
this.chibaBean.init();
|
||||
EventTarget et = (EventTarget)
|
||||
|
||||
final EventTarget et = (EventTarget)
|
||||
this.chibaBean.getXMLContainer().getDocumentElement();
|
||||
//XXXarielb register more listener for to do validation and do something
|
||||
//with the results.
|
||||
et.addEventListener(XFormsEventFactory.SUBMIT_ERROR, this, true);
|
||||
final EventListener el = new EventListener()
|
||||
{
|
||||
public void handleEvent(Event e)
|
||||
{
|
||||
XFormsBean.LOGGER.debug("received event " + e);
|
||||
XFormsBean.this.eventLog.add((XFormsEvent)e);
|
||||
}
|
||||
};
|
||||
// interaction events my occur during init so we have to register before
|
||||
et.addEventListener(XFormsEventFactory.CHIBA_LOAD_URI, el, true);
|
||||
et.addEventListener(XFormsEventFactory.CHIBA_RENDER_MESSAGE, el, true);
|
||||
et.addEventListener(XFormsEventFactory.CHIBA_REPLACE_ALL, el, true);
|
||||
|
||||
this.chibaBean.init();
|
||||
|
||||
// register for notification events
|
||||
et.addEventListener(XFormsEventFactory.SUBMIT_ERROR, el, true);
|
||||
et.addEventListener(XFormsEventFactory.CHIBA_STATE_CHANGED, el, true);
|
||||
et.addEventListener(XFormsEventFactory.CHIBA_PROTOTYPE_CLONED, el, true);
|
||||
et.addEventListener(XFormsEventFactory.CHIBA_ID_GENERATED, el, true);
|
||||
et.addEventListener(XFormsEventFactory.CHIBA_ITEM_INSERTED, el, true);
|
||||
et.addEventListener(XFormsEventFactory.CHIBA_ITEM_DELETED, el, true);
|
||||
et.addEventListener(XFormsEventFactory.CHIBA_INDEX_CHANGED, el, true);
|
||||
et.addEventListener(XFormsEventFactory.CHIBA_SWITCH_TOGGLED, el, true);
|
||||
}
|
||||
catch (FormBuilderException fbe)
|
||||
{
|
||||
@@ -143,8 +168,34 @@ public class XFormsBean
|
||||
|
||||
LOGGER.debug(this + " setXFormsValue(" + id + ", " + value + ")");
|
||||
this.chibaBean.updateControlValue(id, value);
|
||||
|
||||
final TemplatingService ts = TemplatingService.getInstance();
|
||||
final ResponseWriter out = context.getResponseWriter();
|
||||
out.write("<todo/>");
|
||||
ts.writeXML(this.getEventLog(), out);
|
||||
out.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* sets the value of a control in the processor.
|
||||
*
|
||||
* @param id the id of the control in the host document
|
||||
* @param value the new value
|
||||
* @return the list of events that may result through this action
|
||||
*/
|
||||
public void setRepeatIndex()
|
||||
throws XFormsException, IOException
|
||||
{
|
||||
final FacesContext context = FacesContext.getCurrentInstance();
|
||||
final Map requestParameters = context.getExternalContext().getRequestParameterMap();
|
||||
final String id = (String)requestParameters.get("id");
|
||||
final int index = Integer.parseInt((String)requestParameters.get("index"));
|
||||
|
||||
LOGGER.debug(this + " setRepeatIndex(" + id + ", " + index + ")");
|
||||
this.chibaBean.updateRepeatIndex(id, index);
|
||||
|
||||
final TemplatingService ts = TemplatingService.getInstance();
|
||||
final ResponseWriter out = context.getResponseWriter();
|
||||
ts.writeXML(this.getEventLog(), out);
|
||||
out.close();
|
||||
}
|
||||
|
||||
@@ -162,8 +213,10 @@ public class XFormsBean
|
||||
|
||||
LOGGER.debug(this + " fireAction(" + id + ")");
|
||||
this.chibaBean.dispatch(id, XFormsEventFactory.DOM_ACTIVATE);
|
||||
|
||||
final TemplatingService ts = TemplatingService.getInstance();
|
||||
final ResponseWriter out = context.getResponseWriter();
|
||||
out.write("<todo/>");
|
||||
ts.writeXML(this.getEventLog(), out);
|
||||
out.close();
|
||||
}
|
||||
|
||||
@@ -180,15 +233,38 @@ public class XFormsBean
|
||||
final TemplatingService ts = TemplatingService.getInstance();
|
||||
final Document result = ts.parseXML(request.getInputStream());
|
||||
this.instanceData.setContent(result);
|
||||
|
||||
final ResponseWriter out = context.getResponseWriter();
|
||||
ts.writeXML(result, out);
|
||||
out.close();
|
||||
}
|
||||
|
||||
//XXXarielb placeholder for error handling
|
||||
public void handleEvent(Event e)
|
||||
private Node getEventLog()
|
||||
{
|
||||
LOGGER.debug("handleEvent " + e);
|
||||
final TemplatingService ts = TemplatingService.getInstance();
|
||||
final Document result = ts.newDocument();
|
||||
final Element eventsElement = result.createElement("events");
|
||||
result.appendChild(eventsElement);
|
||||
for (XFormsEvent xfe : this.eventLog)
|
||||
{
|
||||
final String type = xfe.getType();
|
||||
final Element target = (Element)xfe.getTarget();
|
||||
|
||||
final Element eventElement = result.createElement(type);
|
||||
eventsElement.appendChild(eventElement);
|
||||
eventElement.setAttribute("targetId", target.getAttributeNS(null, "id"));
|
||||
eventElement.setAttribute("targetName", target.getLocalName());
|
||||
|
||||
for (Object name : xfe.getPropertyNames())
|
||||
{
|
||||
final Element propertyElement = result.createElement((String)name);
|
||||
eventElement.appendChild(propertyElement);
|
||||
final String value = xfe.getContextInfo((String)name).toString();
|
||||
propertyElement.appendChild(result.createTextNode(value));
|
||||
}
|
||||
}
|
||||
this.eventLog.clear();
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user