/*
* Copyright (C) NetStruxr, Inc. All rights reserved.
*
* This software is published under the terms of the NetStruxr
* Public Software License version 0.5, a copy of which has been
* included with this distribution in the LICENSE.NPL file. */
package er.directtoweb.assignments;
import com.webobjects.directtoweb.Assignment;
import com.webobjects.directtoweb.D2WContext;
import com.webobjects.eocontrol.EOKeyValueUnarchiver;
/**
* Piece of crap. This assignment works around the
* fact that KeyValueAssignment isn't public (and should be).
* Use this assignment as a drop in replacement for
* KeyValueAssignment. Note that this assignment is not a
* delayed assignment and as such the value returned by this
* assignment will be cached the first time this assignment is
* fired. To have a key value assignment that does not cache
* the value returned the first time have a look at
* {@link er.directtoweb.assignments.delayed.ERDDelayedKeyValueAssignment}.
*/
public class ERDKeyValueAssignment extends Assignment {
/**
* Do I need to update serialVersionUID?
* See section 5.6 <cite>Type Changes Affecting Serialization</cite> on page 51 of the
* <a href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object Serialization Spec</a>
*/
private static final long serialVersionUID = 1L;
/**
* Static constructor required by the EOKeyValueUnarchiver
* interface. If this isn't implemented then the default
* behavior is to construct the first super class that does
* implement this method. Very lame.
* @param eokeyvalueunarchiver to be unarchived
* @return decoded assignment of this class
*/
// ENHANCEME: Could maintain a weak hash map cache based on the key and
// value() of the assignment.
public static Object decodeWithKeyValueUnarchiver(EOKeyValueUnarchiver eokeyvalueunarchiver) {
return new ERDKeyValueAssignment(eokeyvalueunarchiver);
}
/**
* Public constructor
* @param s context key
* @param s1 value to be invoke on the context when firing.
*/
public ERDKeyValueAssignment(String s, String s1) {
super(s, s1);
}
/**
* Public constructor
* @param eokeyvalueunarchiver key-value unarchiver used when unarchiving
* from rule files.
*/
public ERDKeyValueAssignment(EOKeyValueUnarchiver eokeyvalueunarchiver) {
super(eokeyvalueunarchiver);
}
/**
* Fires the assignment. In this case this method calls
* <code>valueForKeyPath</code> on the passed in context
* using the value() as the key.
* @param d2wcontext current context
* @return result of resolving the key path off of the
* context.
*/
@Override
public Object fire(D2WContext d2wcontext) {
return d2wcontext.valueForKeyPath((String)value());
}
}