/* ValidationContextImpl.java Purpose: Description: History: 2011/9/29 Created by Dennis Chen Copyright (C) 2011 Potix Corporation. All Rights Reserved. */ package org.zkoss.bind.impl; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import org.zkoss.bind.BindContext; import org.zkoss.bind.Property; import org.zkoss.bind.ValidationContext; /** * the default implementation of validation context * @author dennis * @since 6.0.0 */ public class ValidationContextImpl implements ValidationContext { private boolean _valid = true; //default validation result is true //ZK-1819 ValidationContext support a new flag that can identify the value of single field whether is valid when use form binding private boolean _localValid = true; private String _command; private Property _property; //main property private Map<String, Property[]> _properties; //related properties private BindContext _ctx; private static final String BASED_VALIDATION_PROPERTIES = "$BASED_VALIDATION_PROPS$"; public ValidationContextImpl(String command, Property property, Map<String, Property[]> properties, BindContext ctx, boolean valid) { this._command = command; this._property = property; this._properties = properties; this._ctx = ctx; this._valid = valid; } public BindContext getBindContext() { return _ctx; } public String getCommand() { return _command; } public Map<String, Property[]> getProperties() { return _properties; } public Property[] getProperties(String name) { return _properties.get(name); } @SuppressWarnings("unchecked") public Map<String, Property> getProperties(Object base) { if (base == null) throw new IllegalArgumentException("base object is null"); Map<Object, Map<String, Property>> m = (Map<Object, Map<String, Property>>) _ctx .getAttribute(BASED_VALIDATION_PROPERTIES); if (m == null) { _ctx.setAttribute(BASED_VALIDATION_PROPERTIES, m = new HashMap<Object, Map<String, Property>>()); } Map<String, Property> mp = m.get(base); if (mp != null) return mp; mp = new HashMap<String, Property>(); m.put(base, mp); for (Entry<String, Property[]> e : _properties.entrySet()) { for (Property p : e.getValue()) { if (base.equals(p.getBase())) { mp.put(e.getKey(), p); } } } return mp; } public Object getValidatorArg(String key) { return _ctx.getValidatorArg(key); } public Property getProperty() { return _property; } public boolean isValid() { return _valid; } public boolean isLocalValid() { return _localValid; } public void setInvalid() { this._valid = this._localValid = false; } }