Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.pentaho.ui.xul.gwt.binding;
  
  import java.util.List;
  import java.util.Stack;
 
 
 public class GwtBinding implements Binding{
   protected Object source;
 
   protected Object target;
 
   protected String sourceAttr;
 
   protected String targetAttr;
 
   protected boolean negateBooleanAssignment = false;
 
   protected boolean reverseConversion = false;
 
   protected BindingConvertor conversion;
 
 
 
   
   protected BindingContext context;
  
   protected boolean destroyed = false;
 
   protected Type bindingStrategy = .;
   
 
   public GwtBinding(){
     
   }
   
   public GwtBinding(Document documentString sourceIdString sourceAttrString targetIdString targetAttr) {
     this. = document.getElementById(sourceId);
     setSourceAttr(sourceAttr);
     this. = document.getElementById(targetId);
     setTargetAttr(targetAttr);
   }
 
   public GwtBinding(Document documentObject sourceString sourceAttrString targetIdString targetAttr) {
     this. = source;
     setSourceAttr(sourceAttr);
     this. = document.getElementById(targetId);
     setTargetAttr(targetAttr);
   }
 
   public GwtBinding(Document documentString sourceIdString sourceAttrObject targetString targetAttr) {
     this. = document.getElementById(sourceId);
     setSourceAttr(sourceAttr);
     this. = target;
     setTargetAttr(targetAttr);
   }
   
   public GwtBinding(Object sourceString sourceAttrObject targetString targetAttr) {
     this. = source;
     setSourceAttr(sourceAttr);
     this. = target;
     setTargetAttr(targetAttr);
   }
 
   public void setBindingType(Type t) {
     this. = t;
   }
 
   public Type getBindingType() {
     return ;
   }
   
   public void initialize() {
     bindForward();
 
     if (getBindingType() == ..) {
       bindReverse();
     }
   }
  public Object getSource() {
    return ;
  }
  public void setSource(Object source) {
    this. = source;
  }
  public Object getTarget() {
    return ;
  }
  public void setTarget(Object target) {
    this. = target;
  }
  public String getSourceAttr() {
    return ;
  }
  public void setSourceAttr(String sourceAttr) {
    if (sourceAttr.charAt(0) == '!') {
      //Negation of Boolean
       = !//two negations will cancel
      sourceAttr = sourceAttr.substring(1);
    }
    this. = sourceAttr;
  }
  public String getTargetAttr() {
    return ;
  }
  public void setTargetAttr(String targetAttr) {
    if (targetAttr.charAt(0) == '!') {
      //Negation of Boolean
       = !//two negations will cancel
      targetAttr = targetAttr.substring(1);
    }
    this. = targetAttr;
  }
  public Object evaluateExpressions(Object val) {
    if ( && val instanceof Boolean) {
      return !((Booleanval);
    }
    return val;
  }
  public Object doConversions(Object valDirection dir) {
    if ( != null) {
      return (dir == .) ? .sourceToTarget(val) : .targetToSource(val);
    }
    return val;
  }
    return ;
  }
  public void setConversion(BindingConvertor conversion) {
    this. = conversion;
  }
  public boolean isReverseConversion() {
    return ;
  }
  public void setReverseConversion(boolean reverseConversion) {
    this. = reverseConversion;
  }
    try{
      Object getRetVal = .invoke(new Object[]{});
      if(getRetVal != null){
        .propertyChange(new PropertyChangeEvent(getSource(), getSourceAttr(), nullgetRetVal));
      }
    } catch(Exception e){
      //TODO: re-implement IllegalAccessException.
      //cannot be in interface due to GWT incompatibility.
      handleException(new BindingException(e));
    }
  }
  public void bindForward() {
    //System.out.println("Forward binding established: " + source + "." + sourceAttr + " ==> " + target + "." + targetAttr);
  }
  public void bindReverse() {
    //System.out.println("Reverse binding established: " + source + "." + sourceAttr + " <== " + target + "." + targetAttr);
  }
  protected PropertyChangeListener setupBinding(final Object afinal String vafinal Object bfinal String vb,
      final Direction dir) {
    if (a == null || va == null) {
      handleException(new BindingException("source bean or property is null"));
    }
    if (!(a instanceof XulEventSource)) {
      handleException(new BindingException("Binding error, source object "+a+" not a XulEventSource instance"));
    }
    if (b == null || vb == null) {
      handleException(new BindingException("target bean or property is null"));
    }
    .push(sourceGetMethod);
    
    //find set method
    final GwtBindingMethod targetSetMethod = ..findSetMethod(bvb);
    if(targetSetMethod == null){
      throw new BindingException("Error finding setter method [" + vb + "] on target: "+b);
      
    }
    
    //setup prop change listener to handle binding
    PropertyChangeListener listener = new PropertyChangeListener() {
      public void propertyChange(final PropertyChangeEvent evt) {
        final PropertyChangeListener cThis = this;
        if (evt.getPropertyName().equalsIgnoreCase(va)) {
          Object finalVal = null;
          try {
            Object value = doConversions(evt.getNewValue(), dir);
            finalVal = evaluateExpressions(value);
            
            Object targetObject = b;
            if(targetObject == null){
              ..println("Binding target was Garbage Collected, removing propListener");
              GwtBinding.this.destroyBindings();                      
              return;
            }
            //System.out.println("Setting val: "+finalVal+" on: "+targetObject +" prop: "+vb);
            if(targetSetMethod == null){
              ..println("Error Setting val targetMethod null: "+finalVal+" on: "+targetObject+"."+GwtBinding.this.);
            }
            if(targetObject == null){
              ..println("Error Setting val targetObject null: "+finalVal+" on: "+targetObject+"."+GwtBinding.this.);
            }
            targetSetMethod.invoke(targetObjectnew Object[]{finalVal});
            
          
          } catch (Exception e) {
            e.printStackTrace();
            handleException(new BindingException("Error invoking setter method for property [" +  + "] on target [" + b + "] with arg [" + finalVal + "] which is of type [" + finalVal == null ? "null" : finalVal.getClass().getName() + "]"e));
          }
        }
      }
    };
    return listener;
  }
  public void destroyBindings(){
    if(){
      //circular catch from context.remove()
      return;
    }
    Object sourceObj = getSource();
    Object targetObj = getTarget();
    
    if( != null && sourceObj != null && sourceObj instanceof XulEventSource){
      ..println("Removing forward binding on "+sourceObj);
    }
    
    if( != null && targetObj != null && targetObj instanceof XulEventSource){
      ..println("Removing reverse binding on "+targetObj);
    } 
    setDestroyed(true);
    if( != null){
      .remove(this);
    }
  }
  
  protected void setDestroyed(boolean flag){
    this. = flag;
  }
  
    return ;
  }
  public void setForwardListener(PropertyChangeListener forwardListener) {
    this. = forwardListener;
  }
    return ;
  }
  public void setReverseListener(PropertyChangeListener reverseListener) {
    this. = reverseListener;
  }
  
    if( != null) {
      l.add();
    }
    if( != null) {
      l.add();
    }
    return l;
  }
  public BindingContext getContext() {
    return ;
  }
  public void setContext(BindingContext context) {
    this. = context;
  }
  public void setExceptionHandler(BindingExceptionHandler handler) {
    this. = handler;
  }
  
  protected void handleException(BindingException exception) {
    if( != null){
      .handleException(exception);
    } else {
      throw exception;
    }
  }    
  
  
  
}

  
New to GrepCode? Check out our FAQ X