package er.directtoweb.components.relationships;
import org.apache.log4j.Logger;
import com.webobjects.appserver.WOComponent;
import com.webobjects.appserver.WOContext;
import com.webobjects.directtoweb.D2W;
import com.webobjects.directtoweb.D2WEditToManyFault;
import com.webobjects.directtoweb.EditRelationshipPageInterface;
import com.webobjects.directtoweb.InspectPageInterface;
import com.webobjects.eocontrol.EOEnterpriseObject;
import er.extensions.eof.ERXEOControlUtilities;
import er.extensions.foundation.ERXStringUtilities;
/**
* An alternative/simplified edit to many fault component for D2W
* displaying the the toMany relationship in a <ul></ul> with add/remove functionality
*
* @author mendis
*/
public class ERD2WEditToManyFaultList extends D2WEditToManyFault {
/**
* 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 ERD2WEditToManyFaultList(WOContext arg0) {
super(arg0);
}
public static Logger log = Logger.getLogger(ERD2WEditToManyFaultList.class);
// accessors
public String addBoxID() {
return id() + "_add";
}
public String removeBoxID() {
String primaryKeyString = ERXEOControlUtilities.primaryKeyStringForObject(browserItem);
return ERXStringUtilities.safeIdentifierName(browserItem.entityName() + primaryKeyString);
}
public Object toOneDescription() {
EOEnterpriseObject anEO = browserItem;
if(anEO != null) {
String keyWhenRelationship = keyWhenRelationship();
if(keyWhenRelationship == null || keyWhenRelationship.equals("userPresentableDescription"))
return anEO.userPresentableDescription();
else
return anEO.valueForKeyPath(keyWhenRelationship);
} else {
return null;
}
}
public String id() {
return (String) d2wContext().valueForKey("id");
}
// actions
public WOComponent toOneAction() {
EOEnterpriseObject anEO = browserItem;
if(anEO == null) {
return null;
} else {
InspectPageInterface inspectPage = (InspectPageInterface) D2W.factory().pageForConfigurationNamed("Inspect" + anEO.entityName(), session());
inspectPage.setObject(anEO);
inspectPage.setNextPage(context().page());
return (WOComponent)inspectPage;
}
}
public void removeFromToManyRelationshipAction() {
EOEnterpriseObject anEO = browserItem;
object().removeObjectFromBothSidesOfRelationshipWithKey(anEO, propertyKey());
}
@Override
public WOComponent editValues() {
String targetEntityName = relationship().destinationEntity().name();
EditRelationshipPageInterface editPage = D2W.factory().editRelationshipPageForEntityNamed(targetEntityName, session());
editPage.setMasterObjectAndRelationshipKey(object(), propertyKey());
editPage.setNextPage(context().page());
return (WOComponent)editPage;
}
}