/* BindingImpl.java
Purpose:
Description:
History:
Aug 5, 2011 11:02:23 AM, Created by henrichen
Copyright (C) 2011 Potix Corporation. All Rights Reserved.
*/
package org.zkoss.bind.impl;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.zkoss.bind.BindContext;
import org.zkoss.bind.Binder;
import org.zkoss.bind.sys.Binding;
import org.zkoss.zk.ui.Component;
/**
* Base implementation for implementing a {@link Binding}
* @author henrichen
* @since 6.0.0
*/
public class BindingImpl implements Binding, Serializable {
private static final long serialVersionUID = 1463169907348730644L;
//http://tracker.zkoss.org/browse/ZK-869, It is OK to not use WeakReference here,
//A binding is always associated with a component, and was removed after a component is detached from the view
private final Component _comp;
private final Binder _binder;
private final Map<String, Object> _args;
protected BindingImpl(Binder binder, Component comp, Map<String, Object> args) {
_comp = comp;
_binder = binder;
_args = args;
}
public Component getComponent() {
return _comp;
}
public Binder getBinder() {
return _binder;
}
public Map<String, Object> getArgs() {
return _args;
}
protected Object setAttribute(BindContext ctx, Object key, Object value) {
Map<Object, Object> bindingBag = getBindingAttribute(ctx);
if (bindingBag == null) {
bindingBag = new HashMap<Object, Object>();
ctx.setAttribute(this, bindingBag);
}
return bindingBag.put(key, value);
}
protected Object getAttribute(BindContext ctx, Object key) {
Map<Object, Object> bindingBag = getBindingAttribute(ctx);
return bindingBag != null ? bindingBag.get(key) : null;
}
protected boolean containsAttribute(BindContext ctx, Object key) {
Map<Object, Object> bindingBag = getBindingAttribute(ctx);
return bindingBag != null ? bindingBag.containsKey(key) : false;
}
@SuppressWarnings("unchecked")
private Map<Object, Object> getBindingAttribute(BindContext ctx) {
return (Map<Object, Object>) ctx.getAttribute(this);
}
}