Package er.directtoweb.assignments.delayed

Source Code of er.directtoweb.assignments.delayed.ERDDelayedRuleAssignment

/*
* 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.delayed;

import java.util.Enumeration;

import org.apache.log4j.Logger;

import com.webobjects.directtoweb.D2WContext;
import com.webobjects.directtoweb.Rule;
import com.webobjects.eocontrol.EOKeyValueUnarchiver;
import com.webobjects.eocontrol.EOQualifierEvaluation;
import com.webobjects.foundation.NSArray;

/**
* DelayedRuleAssignment expects an array of rules as its value. The rules are
* evaluated in turn until one returns a non-null result. This is done
* every time that the propertyKey is requested thus making the rule system
* a lot more dynamic.
*/

public class ERDDelayedRuleAssignment extends ERDDelayedAssignment {
  /**
   * 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;

    public static Object decodeWithKeyValueUnarchiver(EOKeyValueUnarchiver eokeyvalueunarchiver)  {
        return new ERDDelayedRuleAssignment(eokeyvalueunarchiver);
    }
   
    /** Logging support */
    public final static Logger log = Logger.getLogger(ERDDelayedRuleAssignment.class);

    public ERDDelayedRuleAssignment(EOKeyValueUnarchiver u) { super(u); }
    public ERDDelayedRuleAssignment(String key, Object value) { super(key,value); }

    // FIXME: this assignment should in theory return all the keys in the LHS of the rule
    // as the dependent keys!!
   
    /**
     * This method is called whenever the propertyKey is requested,
     * but the value in the cache is actually a rule.
     */
    @Override
    public Object fireNow(D2WContext c) {
        Object result = null;
        NSArray rules = (NSArray)value();
        Enumeration ruleEnumerator = rules.objectEnumerator();
        Rule rule;
        while (ruleEnumerator.hasMoreElements()) {
            rule = (Rule)ruleEnumerator.nextElement();
            EOQualifierEvaluation eval = rule.lhs();
            log.debug("Qualifier eval: \n" + eval);
            if (eval.evaluateWithObject(c)) {
                result = rule.rhs().value();
                log.debug("RHS value: " +  result);
                break;
            }
            log.debug("    object.expansionRSF:" +
                               c.valueForKey("object") +
                               c.valueForKeyPath("object.expansionRSF"));
            if (c.valueForKeyPath("object.expansionRSF") == null)
                log.debug("It is null");
        }
        return result;
    }
}
TOP

Related Classes of er.directtoweb.assignments.delayed.ERDDelayedRuleAssignment

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.