/*
* 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.extensions.components;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.webobjects.appserver.WOComponent;
import com.webobjects.appserver.WOContext;
import com.webobjects.appserver.WOSession;
import com.webobjects.eocontrol.EOEditingContext;
import com.webobjects.eocontrol.EOEnterpriseObject;
import er.extensions.eof.ERXEnterpriseObject;
/**
* Given an object displays a link to show information about the editing context of that object.
*
* @binding object An EOEditingContext or an EOEnterpriseObject object
* @binding debugPageProvider Page to display for showing up details about a EOEnterpriseObject
*/
public class ERXDebugMarker extends WOComponent {
/**
* 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;
private static final Logger log = LoggerFactory.getLogger(ERXDebugMarker.class);
public ERXDebugMarker(WOContext aContext) {
super(aContext);
}
public static interface DebugPageProvider {
WOComponent debugPageForObject(EOEnterpriseObject o, WOSession s);
}
@Override
public boolean isStateless() { return true; }
private DebugPageProvider _debugPageProvider;
public DebugPageProvider debugPageProvider() {
if (_debugPageProvider==null) {
_debugPageProvider= (DebugPageProvider)valueForBinding("debugPageProvider");
}
return _debugPageProvider;
}
private Object _object;
public Object object() {
if (_object==null) {
_object=valueForBinding("object");
}
return _object;
}
@Override
public void reset() {
super.reset();
_object=null;
_debugPageProvider=null;
}
public boolean disabled() { return object()==null; }
public WOComponent debug() {
WOComponent result=null;
//log.debug("Object = {}", object());
if (object() instanceof EOEditingContext) {
result=pageWithName("ERXEditingContextInspector");
result.takeValueForKey(object(),"object");
result.takeValueForKey(debugPageProvider(),"debugPageProvider");
} else if (object() instanceof EOEnterpriseObject) {
result=debugPageForObject((EOEnterpriseObject)object(),session());
if(result != null) {
result.takeValueForKey(object(),"object");
} else if(object() instanceof ERXEnterpriseObject) {
log.info("Object: {}", ((ERXEnterpriseObject)object()).toLongString());
} else {
log.info("Object: {}", object());
}
}
return result;
}
public WOComponent debugPageForObject(EOEnterpriseObject o, WOSession s) {
if(debugPageProvider() != null) {
return debugPageProvider().debugPageForObject(o, s);
}
// Don't want the dependency on D2W. Not sure what the best solution is
//return (WOComponent)D2W.factory().inspectPageForEntityNamed(o.entityName(),s);
return null;
}
}