Merged V3.2 to HEAD

18484: Merged DEV-TEMPORARY to V3.2 
                  18478: XForms errors - ACT 15969

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@18485 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Gavin Cornwell
2010-02-05 21:02:51 +00:00
parent 6989a3fcb3
commit 7cbb3a0daf
2 changed files with 92 additions and 61 deletions

View File

@@ -33,6 +33,7 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import javax.faces.context.ExternalContext; import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext; import javax.faces.context.FacesContext;
@@ -179,6 +180,8 @@ public class XFormsBean implements Serializable
private AVMBrowseBean avmBrowseBean; private AVMBrowseBean avmBrowseBean;
private NavigationBean navigator; private NavigationBean navigator;
private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
public static String BEAN_NAME = "XFormsBean"; public static String BEAN_NAME = "XFormsBean";
/** /**
@@ -240,7 +243,16 @@ public class XFormsBean implements Serializable
final XMLEvent xmle = (XMLEvent)e; final XMLEvent xmle = (XMLEvent)e;
if (XFormsBean.LOGGER.isDebugEnabled()) if (XFormsBean.LOGGER.isDebugEnabled())
XFormsBean.LOGGER.debug("received event " + xmle.getType() + ": " + xmle); XFormsBean.LOGGER.debug("received event " + xmle.getType() + ": " + xmle);
XFormsBean.this.xformsSession.eventLog.add(xmle);
try
{
lock.writeLock().lock();
XFormsBean.this.xformsSession.eventLog.add(xmle);
}
finally
{
lock.writeLock().unlock();
}
} }
}; };
@@ -631,71 +643,90 @@ public class XFormsBean implements Serializable
final Document result = XMLUtil.newDocument(); final Document result = XMLUtil.newDocument();
final Element eventsElement = result.createElement("events"); final Element eventsElement = result.createElement("events");
result.appendChild(eventsElement); result.appendChild(eventsElement);
for (XMLEvent xfe : this.xformsSession.eventLog)
try
{ {
final String type = xfe.getType(); lock.readLock().lock();
if (LOGGER.isDebugEnabled())
{
LOGGER.debug("adding event " + type + " to the event log");
}
final Element target = (Element)xfe.getTarget(); for (XMLEvent xfe : this.xformsSession.eventLog)
{
final String type = xfe.getType();
if (LOGGER.isDebugEnabled())
{
LOGGER.debug("adding event " + type + " to the event log");
}
final Element eventElement = result.createElement(type); final Element target = (Element)xfe.getTarget();
eventsElement.appendChild(eventElement);
eventElement.setAttribute("targetId", target.getAttributeNS(null, "id"));
eventElement.setAttribute("targetName", target.getLocalName());
final Collection properties = xfe.getPropertyNames(); final Element eventElement = result.createElement(type);
if (properties != null) eventsElement.appendChild(eventElement);
{ eventElement.setAttribute("targetId", target.getAttributeNS(null, "id"));
for (Object name : properties) eventElement.setAttribute("targetName", target.getLocalName());
{
final Object value = xfe.getContextInfo((String)name);
if (LOGGER.isDebugEnabled())
{
LOGGER.debug("adding property {" + name +
":" + value + "} to event " + type);
}
final Element propertyElement = result.createElement("property"); final Collection properties = xfe.getPropertyNames();
eventElement.appendChild(propertyElement); if (properties != null)
propertyElement.setAttribute("name", name.toString()); {
propertyElement.setAttribute("value", for (Object name : properties)
value != null ? value.toString() : null); {
} final Object value = xfe.getContextInfo((String)name);
} if (LOGGER.isDebugEnabled())
{
LOGGER.debug("adding property {" + name +
":" + value + "} to event " + type);
}
if (LOGGER.isDebugEnabled() && XFormsEventNames.SUBMIT_ERROR.equals(type)) final Element propertyElement = result.createElement("property");
{ eventElement.appendChild(propertyElement);
// debug for figuring out which elements aren't valid for submit propertyElement.setAttribute("name", name.toString());
LOGGER.debug("performing full revalidate"); propertyElement.setAttribute("value",
try value != null ? value.toString() : null);
{ }
final Model model = this.xformsSession.chibaBean.getContainer().getDefaultModel(); }
final Instance instance = model.getDefaultInstance();
model.getValidator().validate(instance, "/", new DefaultValidatorMode()); if (LOGGER.isDebugEnabled() && XFormsEventNames.SUBMIT_ERROR.equals(type))
final Iterator<ModelItem> it = instance.iterateModelItems("/"); {
while (it.hasNext()) // debug for figuring out which elements aren't valid for submit
{ LOGGER.debug("performing full revalidate");
final ModelItem modelItem = it.next(); try
if (!modelItem.isValid()) {
{ final Model model = this.xformsSession.chibaBean.getContainer().getDefaultModel();
LOGGER.debug("model node " + modelItem.getNode() + " is invalid"); final Instance instance = model.getDefaultInstance();
} model.getValidator().validate(instance, "/", new DefaultValidatorMode());
if (modelItem.isRequired() && modelItem.getValue().length() == 0) final Iterator<ModelItem> it = instance.iterateModelItems("/");
{ while (it.hasNext())
LOGGER.debug("model node " + modelItem.getNode() + " is empty and required"); {
} final ModelItem modelItem = it.next();
} if (!modelItem.isValid())
} {
catch (final XFormsException xfe2) LOGGER.debug("model node " + modelItem.getNode() + " is invalid");
{ }
LOGGER.debug("error performing revaliation", xfe2); if (modelItem.isRequired() && modelItem.getValue().length() == 0)
} {
} LOGGER.debug("model node " + modelItem.getNode() + " is empty and required");
}
}
}
catch (final XFormsException xfe2)
{
LOGGER.debug("error performing revaliation", xfe2);
}
}
}
}
finally
{
lock.readLock().unlock();
}
try
{
lock.writeLock().lock();
this.xformsSession.eventLog.clear();
}
finally
{
lock.writeLock().unlock();
} }
this.xformsSession.eventLog.clear();
if (LOGGER.isDebugEnabled()) if (LOGGER.isDebugEnabled())
{ {

View File

@@ -1578,9 +1578,9 @@ alfresco.xforms.ComboboxSelect1 = alfresco.xforms.AbstractSelectWidget.extend({
this.widget = this.domNode; this.widget = this.domNode;
for (var i = 0; i < values.length; i++) for (var i = 0; i < values.length; i++)
{ {
if (initial_value && !values[i].valid) if (!values[i].valid)
{ {
// skip the invalid value if we have a default value // always skip the invalid values for combos
continue; continue;
} }
var option = new Element("option"); var option = new Element("option");