Package er.directtoweb.assignments.delayed

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

/*
* 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.eocontrol.EOKeyValueUnarchiver;
import com.webobjects.eocontrol.EOQualifier;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSDictionary;

import er.directtoweb.assignments.ERDComputingAssignmentInterface;



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

    /** logging support */
    public final static Logger log = Logger.getLogger("er.directtoweb.rules.ERDDelayedSwitchAssignment");


    public static Object decodeWithKeyValueUnarchiver(EOKeyValueUnarchiver eokeyvalueunarchiver)  {
        return new ERDDelayedSwitchAssignment(eokeyvalueunarchiver);
    }


    public ERDDelayedSwitchAssignment(EOKeyValueUnarchiver u) { super(u); }


    public ERDDelayedSwitchAssignment(String key, Object value) { super(key,value); }

    public NSArray _dependentKeys;

    public NSArray dependentKeys(String keyPath) {
        if (_dependentKeys==null) {
            NSDictionary conditionAssignment = (NSDictionary)value();
            String qualFormat =
                (String)conditionAssignment.objectForKey("qualifierFormat");
            NSArray args = (NSArray)conditionAssignment.objectForKey("args");
            if (log.isDebugEnabled()) log.debug("parsing "+qualFormat);
            EOQualifier qualifier =
                EOQualifier.qualifierWithQualifierFormat(qualFormat, args);
            if (log.isDebugEnabled())
                log.debug("Qualifier keys: " + qualifier.allQualifierKeys());
            _dependentKeys=qualifier.allQualifierKeys().allObjects();
        }
        return _dependentKeys;
    }


    @Override
    public Object fireNow(D2WContext c) {
        Object result = null;
        NSDictionary conditionAssignment = (NSDictionary)value();
        String qualFormat =
            (String)conditionAssignment.objectForKey("qualifierFormat");
        NSDictionary switchDictionary = (NSDictionary)conditionAssignment.objectForKey("switch");
        NSArray args = (NSArray)conditionAssignment.objectForKey("args");
        if (log.isDebugEnabled()) {
            log.debug("Entity: " + c.entity().name());
            log.debug("Object " + c.valueForKey("object"));
            log.debug("qualifierFormat "+qualFormat);
            log.debug("args "+args);
            log.debug("switchDictionary " + switchDictionary);
        }
        for(Enumeration e = switchDictionary.allKeys().objectEnumerator();
            e.hasMoreElements();){
            String switchKey = (String)e.nextElement();
            String completedQualFormat =
                NSArray.componentsSeparatedByString( qualFormat, "@@").componentsJoinedByString(switchKey);
            EOQualifier qualifier =
                EOQualifier.qualifierWithQualifierFormat(completedQualFormat, args);
            if (log.isDebugEnabled()) {
                System.err.println("Qualifier keys: " + qualifier.allQualifierKeys());
                System.err.println("Qualifier : " + qualifier);
            }
            if (log.isDebugEnabled())
                log.debug("DelayedConditonalQualifier: " + qualifier);
            if (qualifier.evaluateWithObject(c)) {
                result = switchDictionary.valueForKey(switchKey);
                log.debug("result = " + result);
                break;
            }           
        }
        if(result == null){
            result = switchDictionary.valueForKey("defaultValueForAssignement");
        }
        return result;
    }
}
TOP

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

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.