Package er.extensions.appserver

Source Code of er.extensions.appserver.ERXProxyAssociation

package er.extensions.appserver;

import com.webobjects.appserver.WOAssociation;
import com.webobjects.appserver.WOComponent;
import com.webobjects.appserver._private.WOConstantValueAssociation;

/**
* ERXProxyAssociation allows you to create a wrapper around an existing
* association for the purposes of injecting a prefix or a suffix to the
* association's value.  This is useful in, for instance, dynamic elements
* where you want to guarantee that a particular CSS class is prepended
* to an existing "class" binding where you don't necessarily have
* easy access to the original "class" WOAssociation (like if you extend
* WOHyperlink, for example).
*
* @author mschrag
*/
public class ERXProxyAssociation extends WOAssociation implements Cloneable {
  private WOAssociation _proxiedAssociation;
  private String _prefix;
  private String _suffix;
  private boolean _treatNullAsEmptyString;

  public ERXProxyAssociation(WOAssociation proxiedAssociation, String prefix, String suffix, boolean treatNullAsEmptyString) {
    _proxiedAssociation = proxiedAssociation;
    if (_proxiedAssociation == null) {
      _proxiedAssociation = new WOConstantValueAssociation(null);
    }
    _prefix = prefix;
    _suffix = suffix;
    _treatNullAsEmptyString = treatNullAsEmptyString;
  }

  @Override
  public Object clone() {
    return new ERXProxyAssociation(_proxiedAssociation, _prefix, _suffix, _treatNullAsEmptyString);
  }

  @Override
  public String toString() {
    return "<" + getClass().getName() + ": proxiedAssociation=" + _proxiedAssociation + ", prefix=" + _prefix + ", suffix=" + _suffix + ">";
  }

  @Override
  public Object valueInComponent(WOComponent wocomponent) {
    Object value = _proxiedAssociation.valueInComponent(wocomponent);
    if (value instanceof String || (value == null && _treatNullAsEmptyString)) {
      StringBuilder newValue = new StringBuilder();
      if (_prefix != null) {
        newValue.append(_prefix);
      }
      if (value != null) {
        newValue.append(value);
      }
      if (_suffix != null) {
        newValue.append(_suffix);
      }
      value = newValue.toString();
    }
    return value;
  }

  protected Object processValue(Object obj) {
    Object newValue = obj;
    if (newValue instanceof String) {
      String newStr = (String) newValue;
      if (newStr.startsWith(_prefix)) {
        newStr = newStr.substring(_prefix.length());
      }
      if (newStr.endsWith(_suffix)) {
        newStr = newStr.substring(0, newStr.length() - _suffix.length());
      }
      newValue = newStr;
    }
    return newValue;
  }

  @Override
  public void setValue(Object obj, WOComponent wocomponent) {
    _proxiedAssociation.setValue(processValue(obj), wocomponent);
  }

  @Override
  public void _setValueNoValidation(Object obj, WOComponent wocomponent) {
    _proxiedAssociation._setValueNoValidation(processValue(obj), wocomponent);
  }

  @Override
  public boolean isValueSettable() {
    return _proxiedAssociation.isValueSettable();
  }

  @Override
  public boolean isValueConstant() {
    return _proxiedAssociation.isValueConstant();
  }

  @Override
  public String keyPath() {
    return _proxiedAssociation.keyPath();
  }

  @Override
  public String bindingInComponent(WOComponent wocomponent) {
    return _proxiedAssociation.bindingInComponent(wocomponent);
  }
}
TOP

Related Classes of er.extensions.appserver.ERXProxyAssociation

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.