/** * Utility method for registering a handler. The parameters are the same as <code> * Registry.register</code> except for the <code>handlerName</code> and <code>requestListener * </code>. The <code>handlerName</code> demonstrates how to use an <code>ApplicationDescriptor * </code> to set the name of a handler. The <code>requestListener</code> parameter is used to set * the listener on the registered content handler server. */ static void register( final String classname, final String[] types, final String[] suffixes, final String[] actions, final ActionNameMap[] actionnames, final String id, final String[] accessAllowed, String handlerName, final RequestListener requestListener) throws ContentHandlerException, ClassNotFoundException { // Get access to the registry and register as a content handler final Registry registry = Registry.getRegistry(classname); registry.register(classname, types, suffixes, actions, null, id, null); // When this content handler gets requests, // invocationRequestNotify() will be called final ContentHandlerServer contentHandlerServer = Registry.getServer(classname); contentHandlerServer.setListener(requestListener); // Set the name of the content handler by updating the // ApplicationDescriptor final DefaultContentHandlerRegistry defaultRegistry = DefaultContentHandlerRegistry.getDefaultContentHandlerRegistry(registry); final ApplicationDescriptor currentDescriptor = ApplicationDescriptor.currentApplicationDescriptor(); handlerName = handlerName != null ? handlerName : currentDescriptor.getName(); final ApplicationDescriptor descriptor = new ApplicationDescriptor(currentDescriptor, handlerName, null); defaultRegistry.setApplicationDescriptor(descriptor, id); }
/** * Utility method for unregistering a content handler class. This method also sets the request * listener to null on the content handler server. */ static void unregister(final String classname) throws ContentHandlerException { if (classname == null) { return; } final ContentHandlerServer contentHandlerServer = Registry.getServer(classname); contentHandlerServer.setListener(null); final Registry registry = Registry.getRegistry(classname); registry.unregister(classname); }
/** * This method is called when the handler receives a request. This class needs to be set as the * listener on the <code>ContentHandlerServer</code>. See {@link #register}. * * @see RequestListener#invocationRequestNotify(ContentHandlerServer) */ public void invocationRequestNotify(final ContentHandlerServer server) { // Retrieve Invocation from the content handler server final Invocation invoc = server.getRequest(false); if (invoc == null) { return; // Nothing to do } int invocationStatus = invoc.getStatus(); try { final Registry registry = Registry.getRegistry(getClass().getName()); final DefaultContentHandlerRegistry defaultRegistry = DefaultContentHandlerRegistry.getDefaultContentHandlerRegistry(registry); final ApplicationDescriptor descriptor = defaultRegistry.getApplicationDescriptor(server.getID()); Dialog.alert(descriptor.getName() + " invoked for: " + invoc.getURL()); // ... // Other processing could be done here // ... // If there are errors or exceptions, the invocation status // should be updated. In this case everything is OK. invocationStatus = Invocation.OK; } finally { server.finish(invoc, invocationStatus); } }