/*
* 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.defaults;
import com.webobjects.directtoweb.D2WContext;
import com.webobjects.eocontrol.EOKeyValueUnarchiver;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSDictionary;
import com.webobjects.foundation.NSMutableArray;
import er.directtoweb.assignments.ERDAssignment;
/**
* This assignment calculates default actions for the current page
*/
public class ERDDefaultActionAssignment extends ERDAssignment {
/**
* 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;
/** holds the array of keys this assignment depends upon */
public static final NSArray _DEPENDENT_KEYS=new NSArray(new String[] {"isEntityPrintable", "readOnly", "isEntityInspectable", "isEntityEditable", "isEntityDeletable"});
/**
* 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
*/
public static Object decodeWithKeyValueUnarchiver(EOKeyValueUnarchiver eokeyvalueunarchiver) {
return new ERDDefaultActionAssignment(eokeyvalueunarchiver);
}
/**
* Public constructor
* @param u key-value unarchiver used when unarchiving
* from rule files.
*/
public ERDDefaultActionAssignment (EOKeyValueUnarchiver u) { super(u); }
/**
* Public constructor
* @param key context key
* @param value of the assignment
*/
public ERDDefaultActionAssignment (String key, Object value) { super(key,value); }
/**
* Implementation of the {@link er.directtoweb.assignments.ERDComputingAssignmentInterface}. This
* assignment depends upon the context keys: "entity.name" and
* "object.entityName". This array of keys is used when constructing the
* significant keys for the passed in keyPath.
* @param keyPath to compute significant keys for.
* @return array of context keys this assignment depends upon.
*/
public NSArray dependentKeys(String keyPath) { return _DEPENDENT_KEYS; }
/**
* Calculates the actions names for a given context.
* @param c a D2W context
* @return the array of array of action names for that context.
*/
public NSDictionary defaultActions(D2WContext c) {
NSDictionary actions = new NSDictionary(new Object[] {defaultLeftActions(c), defaultRightActions(c)}, new Object [] {"left", "right"});
log.debug(actions);
return actions;
}
/**
* Calculates the default left actions names for a given context.
* The array is set according to whether the entity is editable, inspectable and printable.
* @param c a D2W context
* @return array of action names for that context.
*/
public NSArray defaultLeftActions(D2WContext c) {
NSMutableArray actions = new NSMutableArray();
if(booleanContextValueForKey(c, "isEntityEditable", false) || booleanContextValueForKey(c, "readOnly", true))
actions.addObject("editAction");
if(booleanContextValueForKey(c, "isEntityInspectable", false))
actions.addObject("inspectAction");
if(booleanContextValueForKey(c, "isEntityPrintable", false))
actions.addObject("printAction");
return actions;
}
/**
* Calculates the default right actions names for a given context.
* The array is set according to whether the entity is deletable.
* @param c a D2W context
* @return array of action names for that context.
*/
public NSArray defaultRightActions(D2WContext c) {
NSMutableArray actions = new NSMutableArray();
if(booleanContextValueForKey(c, "isEntityDeletable", false))
actions.addObject("deleteAction");
return actions;
}
}