/*
  Copyright (C) 2006 Helge Hess

  This file is part of JOPE.

  JOPE is free software; you can redistribute it and/or modify it under
  the terms of the GNU Lesser General Public License as published by the
  Free Software Foundation; either version 2, or (at your option) any
  later version.

  JOPE is distributed in the hope that it will be useful, but WITHOUT ANY
  WARRANTY; without even the implied warranty of MERCHANTABILITY or
  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with JOPE; see the file COPYING.  If not, write to the
  Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
  02111-1307, USA.
*/

package org.opengroupware.jope.rules;

/*
 * RuleKeyAssignment
 * 
 * This one evaluates the action value as a keypath against the _context_. Which
 * can trigger recursive rule evaluation.
 */ 
public class RuleKeyAssignment extends RuleAssignment {

  public RuleKeyAssignment(String _keyPath, Object _value) {
    super(_keyPath, _value);
  }

  /* operations */
  
  public boolean isCandidateForKey(String _key) {
    if (_key == null)
      return true;
    
    // TODO: perform a real keypath check
    return _key.equals(this.keyPath);
  }
  
  public Object fireInContext(RuleContext _ctx) {
    // TODO: shouldn't we apply the value on ctx ?
    return _ctx != null ? _ctx.valueForKeyPath(this.value.toString()) : null;
  }
  
  /* representations */
  
  public String valueStringRepresentation() {
    return this.value.toString();
  }
}
