001: /*
002: * Created on Jan 25, 2006
003: *
004: * TODO To change the template for this generated file go to
005: * Window - Preferences - Java - Code Style - Code Templates
006: */
007: package org.jasig.portal.channels.jsp;
008:
009: import org.jasig.portal.PortalException;
010:
011: /**
012: * @author Mark Boyd
013: *
014: * TODO To change the template for this generated type comment go to
015: * Window - Preferences - Java - Code Style - Code Templates
016: */
017: public class ServantChannel extends Channel implements
018: IServantController {
019: /**
020: * Custom constructor used to create a an instance of this class
021: * that implements the IServant interface. Since servants use the containing
022: * channel's ChannelStaticData we don't want to have to corrupt that object
023: * by setting the "controllerClass" parameter. Hence this constructor takes
024: * the class name of the controller as a parameter. If this value is null
025: * it will result in the lookup in the ChannelStaticData object.
026: *
027: * Furthermore, since this is a servant its instance is unknown to
028: * ChannelManager. Therefore it will never have its PortalControlStructures
029: * called which is manditory for the jsp channel type. Hence for using
030: * any jsp channel type servant a containing channel must itself be an
031: * IPriviledgedChannel implementation and must pass the
032: * PortalControlStructures to this channel prior to calling setRuntimeData
033: * and update them whenever its own setPortalControlStructures()
034: * method is called.
035: *
036: * WARNING: The jsp channel handles controllers from within CARs in a
037: * special manner to extract classes, properties, and JSPs from the CAR and
038: * make them available to the web server's classloader and JSP compiler.
039: * This handling mechanism depends on the controller class not as yet being
040: * loaded by the classloader before the jsp channel attempts to load the
041: * class. Therefore, the String passed into this constructor should not be
042: * obtained from theControllerClass.getName() unless that class does not
043: * reside in a CAR. Such a call causes that class to be loaded and will
044: * prevent the proper deployment of CAR resources for that class.
045: * @throws PortalException
046: */
047: public ServantChannel(String controllerClassName)
048: throws PortalException {
049: super ();
050: this .mControllerClassname = controllerClassName;
051: }
052:
053: /**
054: * Delegates to the controller if it supports IJspChannelServant. Throws an
055: * UnsupportedOperationException if it doesn't.
056: *
057: * @see org.jasig.portal.channels.jsp.IServantController#isFinished()
058: */
059: public boolean isFinished() {
060: if (mController == null)
061: throw new NullPointerException(
062: "Servant controller has not been " + "supplied.");
063: if (mController != null
064: && mController instanceof IServantController) {
065: return ((IServantController) mController).isFinished();
066: }
067: throw new UnsupportedOperationException("JSP Controller "
068: + mControllerClassname + " does not implement "
069: + IServantController.class.getName() + ".");
070: }
071:
072: /**
073: * Delegates to the controller if it supports IJspChannelServant. Throws an
074: * UnsupportedOperationException if it doesn't.
075: *
076: * @see org.jasig.portal.channels.jsp.IServantController#getResults()
077: * @return Object[] the expected Object type should be documented by the
078: * IController implementation
079: */
080: public Object[] getResults() {
081: if (mController == null)
082: throw new NullPointerException(
083: "Servant controller has not been " + "supplied.");
084: if (mController != null
085: && mController instanceof IServantController) {
086: return ((IServantController) mController).getResults();
087: }
088: throw new UnsupportedOperationException("JSP Controller "
089: + mControllerClassname + " does not implement "
090: + IServantController.class.getName() + ".");
091: }
092:
093: /**
094: * Delegates to the controller if it supports IJspChannelServant. Throws an
095: * UnsupportedOperationException if it doesn't.
096: *
097: * @see org.jasig.portal.channels.jsp.IServantController#configure(java.lang.Object)
098: */
099: public void configure(Object o) {
100: if (mController == null)
101: throw new NullPointerException(
102: "Servant controller has not been " + "supplied.");
103: if (mController instanceof IServantController) {
104: ((IServantController) mController).configure(o);
105: } else
106: throw new UnsupportedOperationException("JSP Controller "
107: + mController.getClass().getName()
108: + " does not implement "
109: + IServantController.class.getName() + ".");
110: }
111: }
|