package er.directtoweb.components.relationships;
import com.webobjects.appserver.WOContext;
import com.webobjects.eocontrol.EODetailDataSource;
import com.webobjects.eocontrol.EOEnterpriseObject;
import com.webobjects.foundation.NSDictionary;
import com.webobjects.foundation.NSMutableDictionary;
/**
* Same as ERDList except it uses a detail datasource so that you may edit the list as well.
*
* @see ERDList
*
* @author mendis
* @author dschonen Added collapsing
* @d2wKey id
* @d2wKey displayNameForDestinationEntity
*/
public class ERDEditableList extends ERDList {
/**
* 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 EODetailDataSource detailDataSource;
private String closedLabelString;
private String container;
public ERDEditableList(WOContext context) {
super(context);
}
@Override
public void reset() {
detailDataSource = null;
closedLabelString = null;
container = null;
super.reset();
}
// accessors
public EODetailDataSource detailDataSource() {
if (detailDataSource == null) {
EOEnterpriseObject object = (EOEnterpriseObject) valueForBinding("object");
detailDataSource = new EODetailDataSource(object.classDescription(), key());
detailDataSource.qualifyWithRelationshipKey(key(), object);
detailDataSource.fetchObjects();
} return detailDataSource;
}
@SuppressWarnings("unchecked")
@Override
public NSDictionary settings() {
NSMutableDictionary settings = super.settings().mutableClone();
settings.setObjectForKey(object(), "object");
return settings.immutableClone();
}
public String container() {
if (container == null) container = d2wContext().valueForKey("id") + "_container";
return container;
}
public String closedLabelString() {
if (closedLabelString == null) {
String localizedEntityName = (String)d2wContext().valueForKey("displayNameForDestinationEntity");
closedLabelString = detailDataSource().fetchObjects().count() + " " + localizedEntityName + "s"; // FIXME: RM: perhaps better plurification?
} return closedLabelString;
}
/*
* forces button on edit pages
*/
public String submitActionName() {
return taskIsEdit() ? "" : null;
}
}