📄 genericportlet.java
字号:
/**
* Helper method to serve up the <code>edit</code> mode.
* <p>
* The default implementation throws an exception.
*
* @param request
* the portlet request
* @param response
* the render response
*
* @exception PortletException
* if the portlet cannot fulfilling the request
* @exception UnavailableException
* if the portlet is unavailable to perform render at this
* time
* @exception PortletSecurityException
* if the portlet cannot fullfill this request because of
* security reasons
* @exception java.io.IOException
* if the streaming causes an I/O problem
*
*/
protected void doEdit(RenderRequest request, RenderResponse response) throws PortletException, java.io.IOException {
throw new PortletException("doEdit method not implemented");
}
/**
* Helper method to serve up the <code>help</code> mode.
* <p>
* The default implementation throws an exception.
*
* @param request
* the portlet request
* @param response
* the render response
*
* @exception PortletException
* if the portlet cannot fulfilling the request
* @exception UnavailableException
* if the portlet is unavailable to perform render at this
* time
* @exception PortletSecurityException
* if the portlet cannot fullfill this request because of
* security reasons
* @exception java.io.IOException
* if the streaming causes an I/O problem
*/
protected void doHelp(RenderRequest request, RenderResponse response) throws PortletException, java.io.IOException {
throw new PortletException("doHelp method not implemented");
}
/**
* Returns the PortletConfig object of this portlet.
*
* @return the PortletConfig object of this portlet
*/
public PortletConfig getPortletConfig() {
return config;
}
/**
* Called by the portlet container to indicate to a portlet that the portlet
* is being taken out of service.
* <p>
* The default implementation does nothing.
*
*/
public void destroy() {
// do nothing
}
// -------------------------------------------------------------------------
// implement PortletConfig
// -------------------------------------------------------------------------
/**
* Returns the name of this portlet.
*
* @return the portlet name
*
* @see PortletConfig#getPortletName()
*/
public String getPortletName() {
if (config == null)
throw new java.lang.IllegalStateException(
"Config is null, please ensure that your init(config) method calls super.init(config)");
return config.getPortletName();
}
/**
* Returns the <code>PortletContext</code> of the portlet application the
* portlet is in.
*
* @return the portlet application context
*/
public PortletContext getPortletContext() {
if (config == null)
throw new java.lang.IllegalStateException(
"Config is null, please ensure that your init(config) method calls super.init(config)");
return config.getPortletContext();
}
/**
* Gets the resource bundle for the given locale based on the resource
* bundle defined in the deployment descriptor with
* <code>resource-bundle</code> tag or the inlined resources defined in
* the deployment descriptor.
*
* @return the resource bundle for the given locale
*/
public java.util.ResourceBundle getResourceBundle(java.util.Locale locale) {
if (config == null)
throw new java.lang.IllegalStateException(
"Config is null, please ensure that your init(config) method calls super.init(config)");
return config.getResourceBundle(locale);
}
/**
* Returns a String containing the value of the named initialization * parameter, or null if the parameter does not exist.
*
* @param name
* a <code>String</code> specifying the name of the
* initialization parameter
*
* @return a <code>String</code> containing the value of the
* initialization parameter
*
* @exception java.lang.IllegalArgumentException
* if name is <code>null</code>.
*/
public String getInitParameter(java.lang.String name) {
if (config == null)
throw new java.lang.IllegalStateException(
"Config is null, please ensure that your init(config) method calls super.init(config)");
return config.getInitParameter(name);
}
/**
* Returns the names of the portlet initialization parameters as an
* Enumeration of String objects, or an empty Enumeration if the portlet has
* no initialization parameters.
*
* @return an <code>Enumeration</code> of <code>String</code> objects
* containing the names of the portlet initialization parameters, or
* an empty Enumeration if the portlet has no initialization
* parameters.
*/
public java.util.Enumeration<String> getInitParameterNames() {
if (config == null)
throw new java.lang.IllegalStateException(
"Config is null, please ensure that your init(config) method calls super.init(config)");
return config.getInitParameterNames();
}
/*
* (non-Javadoc)
*
* @see javax.portlet.PortletConfig#getProcessingEventQNames()
*/
public Enumeration<QName> getProcessingEventQNames() {
if (config == null)
throw new java.lang.IllegalStateException(
"Config is null, please ensure that your init(config) method calls super.init(config)");
return config.getProcessingEventQNames();
}
/*
* (non-Javadoc)
*
* @see javax.portlet.PortletConfig#getPublishingEventQNames()
*/
public Enumeration<QName> getPublishingEventQNames() {
if (config == null)
throw new java.lang.IllegalStateException(
"Config is null, please ensure that your init(config) method calls super.init(config)");
return config.getPublishingEventQNames();
}
/*
* (non-Javadoc)
*
* @see javax.portlet.PortletConfig#getSupportedLocales()
*/
public Enumeration<Locale> getSupportedLocales() {
if (config == null)
throw new java.lang.IllegalStateException(
"Config is null, please ensure that your init(config) method calls super.init(config)");
return config.getSupportedLocales();
}
/* (non-Javadoc)
* @see javax.portlet.PortletConfig#getContainerRuntimeOptions()
*/
public Map<String, String[]> getContainerRuntimeOptions() {
return config.getContainerRuntimeOptions();
}
// -------------------------------------------------------------------------
// V 2.0 additions
// -------------------------------------------------------------------------
/**
* Default resource serving.
* <p>
* The default implemention of this method is to call a
* RequestDispatcher.foward with the ResourceID of the ResourceRequest.
* <p>
* If no ResourceID is set on the resource URL the default implementation
* does nothing.
*
* @since 2.0
*/
public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException {
if (request.getResourceID() != null) {
PortletRequestDispatcher rd = getPortletConfig().getPortletContext().getRequestDispatcher(
request.getResourceID());
if (rd != null)
rd.forward(request, response);
}
}
/**
* The default implementation tries to dispatch to a method
* annotated with <code>@ProcessEvent</name> that matches the
* event name or, if no
* such method is found just sets the current render parameters on
* the response.<br>
* Note that the annotated methods needs to be public in order
* to be allowed to be called by <code>GenericPortlet</code>.
*
* @see javax.portlet.EventPortlet#processEvent(javax.portlet.EventRequest,
* javax.portlet.EventResponse)
* @since 2.0
*/
public void processEvent(EventRequest request, EventResponse response) throws PortletException, IOException {
String eventName = request.getEvent().getQName().toString();
try {
// check for exact match
Method eventMethod = processEventHandlingMethodsMap.get(eventName);
if (eventMethod != null) {
eventMethod.invoke(this, request, response);
return;
} else {
// Search for the longest possible matching wildcard annotation
int endPos = eventName.indexOf('}');
int dotPos = eventName.lastIndexOf('.');
while (dotPos > endPos) {
String wildcardLookup = eventName.substring(0, dotPos + 1);
eventMethod = processEventHandlingMethodsMap.get(wildcardLookup);
if (eventMethod != null) {
eventMethod.invoke(this, request, response);
return;
}
if (dotPos == 0) {
break;
}
dotPos = eventName.lastIndexOf('.', dotPos - 1);
}
}
} catch (Exception e) {
throw new PortletException(e);
}
// if no event processing method was found just keep render params
response.setRenderParameters(request);
}
/**
* Used by the render method to set the response properties and headers.
* <p>
* The portlet should override this method and set its response header using
* this method in order to ensure that they are set before anything is
* written to the output stream.
* <p>
* The default implemention of this method is emtpy.
*
* @param request the render request
* @param response the render response
* @since 2.0
*/
protected void doHeaders(RenderRequest request, RenderResponse response) {
return;
}
/**
* Used by the render method to set the next possible portlet modes.
* <p>
* The portlet should override this method and set the next possible portlet
* modes using this method in order to ensure that they are set before
* anything is written to the output stream.
* <p>
* The default implemention of this method returns <code>null</code>.
*
* @since 2.0
*/
protected java.util.Collection<PortletMode> getNextPossiblePortletModes(RenderRequest request) {
return null;
}
/**
* Returns the names of the public render parameters supported by the
* portlet as an <code>Enumeration</code> of String objects, or an empty
* <code>Enumeration</code> if the portlet has no public render
* parameters.
*
* @return an <code>Enumeration</code> of <code>String</code> objects
* containing the names of the public render parameters, or an empty
* <code>Enumeration</code> if the portlet does not define any
* public render parameters.
*
* @see javax.portlet.PortletConfig#getPublicRenderParameterNames()
*/
public Enumeration<String> getPublicRenderParameterNames() {
if (config == null)
throw new java.lang.IllegalStateException(
"Config is null, please ensure that your init(config) method calls super.init(config)");
return config.getPublicRenderParameterNames();
}
/**
* Returns the default namespace for events and public parameters. This
* namespace is defined in the portlet deployment descriptor with the
* <code>default-namespace</code> element.
* <p>
* If no default namespace is defined in the portlet deployment descriptor
* this methods returns the XML default namespace
* <code>XMLConstants.NULL_NS_URI</code>.
*
* @return the default namespace defined in the portlet deployment
* descriptor, or <code>XMLConstants.NULL_NS_URI</code> is non is
* defined.
*
* @see javax.portlet.PortletConfig#getDefaultNamespace()
*/
public String getDefaultNamespace() {
if (config == null)
throw new java.lang.IllegalStateException(
"Config is null, please ensure that your init(config) method calls super.init(config)");
return config.getDefaultNamespace();
}
private void cacheAnnotatedMethods() {
// cache all annotated and visible public methods
for (Method method : this.getClass().getMethods()) {
Annotation[] annotations = method.getAnnotations();
if (annotations != null) {
for (Annotation annotation : annotations) {
Class<? extends Annotation> annotationType = annotation.annotationType();
if (ProcessAction.class.equals(annotationType)) {
String name = ((ProcessAction) annotation).name();
if (name != null && name.length() > 0)
processActionHandlingMethodsMap.put(name, method);
} else if (ProcessEvent.class.equals(annotationType)) {
String qname = ((ProcessEvent) annotation).qname();
if (qname == null || qname.length() <= 0) {
if (config == null)
throw new java.lang.IllegalStateException(
"Config is null, please ensure that your init(config) method calls super.init(config)");
String name = ((ProcessEvent) annotation).name();
if (name != null && name.length() > 0) {
qname = new QName(config.getDefaultNamespace(), name).toString();
processEventHandlingMethodsMap.put(qname, method);
}
} else
processEventHandlingMethodsMap.put(qname, method);
} else if (RenderMode.class.equals(annotationType)) {
String name = ((RenderMode) annotation).name();
if (name != null && name.length() > 0)
renderModeHandlingMethodsMap.put(name.toLowerCase(), method);
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -