FileDocCategorySizeDatePackage
HttpListenerTest.javaAPI DocGlassfish v2 API9635Fri May 04 22:24:38 BST 2007com.sun.enterprise.config.serverbeans.validation.tests

HttpListenerTest

public class HttpListenerTest extends com.sun.enterprise.config.serverbeans.validation.GenericValidator
Custom Test for Http Listener Test which calls the Generic Validation before performing custom tests
author
Srinivas Krishnan
version
2.0

Fields Summary
private static final String
DELIMITER
Constructors Summary
public HttpListenerTest(com.sun.enterprise.config.serverbeans.validation.ValidationDescriptor desc)

    
       
        super(desc);
    
Methods Summary
private booleancheckVSExists(java.lang.String vsID, com.sun.enterprise.config.serverbeans.Config config)
Checks whether a virtual server with given id is available in the given server. Current hierarchy is that the http-service has a single virtual-server-class and which has many virtual-servers. An Http lsnr can have any one of these virtual servers as its default-virtual-server.

param
vsID String representing the id of vs specified
param
server ConfigBean representing the server.xml
return
true if and only if the given vsID exists in given Server, false otherwise

        return getDefaultVirtualServer(vsID, config) != null;
    
private final com.sun.enterprise.config.serverbeans.VirtualServergetDefaultVirtualServer(java.lang.String vsID, com.sun.enterprise.config.serverbeans.Config config)
Get the default virtual server given an ID and the config in which teh server should be found.

param
vsId the id of the virtual server to be found
param
config the config to be searched for the virtual server
return
the virtual server object, if found; null otherwise.

        final VirtualServer[] virtualServer = config.getHttpService().getVirtualServer();
        for(int i = 0 ; i < virtualServer.length ; i++) {
            if(vsID.equals(virtualServer[i].getId())) {
                return virtualServer[i];
            }
        }
        return null;
    
private final booleanisVirtualServerOn(com.sun.enterprise.config.serverbeans.HttpListener h, com.sun.enterprise.config.serverbeans.Config c, com.sun.enterprise.config.serverbeans.validation.Result result)

        final VirtualServer vs = getDefaultVirtualServer(h.getDefaultVirtualServer(), c);
        return (null != vs && vs.getState().equals("on"));
    
public com.sun.enterprise.config.serverbeans.validation.Resultvalidate(com.sun.enterprise.config.ConfigContextEvent cce)

        Result result = super.validate(cce); // Before doing custom validation do basic validation
        String choice = cce.getChoice();
        
        if(choice.equals(StaticTest.ADD) || choice.equals(StaticTest.VALIDATE)) {
            final HttpListener h = (HttpListener)cce.getObject();
            String vsId = h.getDefaultVirtualServer();
            try {
                Config config = (Config) ((HttpService) cce.getClassObject()).parent();
                if( config!=null ) {
                    boolean exists = checkVSExists(vsId, config);
                    if(!exists) {
                        result.failed(smh.getLocalString(getClass().getName() + ".virtualserverNotFound",
                                                         "Attribute(default-virtual-server={0}) : Virtual Server not found", new Object[]{vsId}));
                    } else if (h.isEnabled()){
                            // When the listener is enabled then the virtual
                            // server must be on.
                        if (! isVirtualServerOn(h, config, result)){
                            result.failed(smh.getLocalString(getClass().getName() + ".cannotAddVsNotOn",
                                                             "Cannot add this HttpListener \"{0}\" because it is enabled but its virtual server \"{1}\" has a state other than \"on\" ({2})",
                                                             new Object[]{h.getId(), vsId, getDefaultVirtualServer(vsId, config).getState()}));
                        }
                    }
                }
                
            }
            catch(Exception e){
                _logger.log(Level.FINE, "domainxmlverifier.error", e);
                
            }
        } else if (choice.equals(StaticTest.UPDATE)) {
            if (cce.getName().equals("enabled") && ConfigBean.toBoolean((String) cce.getObject())){
                final HttpListener h = (HttpListener) cce.getClassObject();
                final Config c = (Config) ((HttpService) h.parent()).parent();
                final VirtualServer vs = getDefaultVirtualServer(h.getDefaultVirtualServer(), c);
                if (null != vs && !vs.getState().equals("on")){
                    result.failed(smh.getLocalString(getClass().getName() + ".cannotUpdateVSNotOn",
                                                     "Cannot enable this HttpListener \"{0}\" because its virtual server \"{1}\" has a state other than \"on\" ({2})",
                                                     new Object[]{h.getId(), vs.getId(), vs.getState()}));
                                                     
                }
            } else if (ServerTags.ENABLED.equals(cce.getName()) && ! ConfigBean.toBoolean((String) cce.getObject())) {
                final HttpListener h = (HttpListener) cce.getClassObject();
                if (com.sun.enterprise.config.serverbeans.ServerHelper.ADMIN_HTTP_LISTNER_ID.equals(h.getId())) {
                    //this is rather stupid
                    final String locmsg = this.getClass().getName() + ".cantDisableAdminVS";
                    final String enmsg = "ADMVAL1076: The http-listener reserved for administrative purposes can not be disabled.";
                    final String msg = smh.getLocalString(locmsg, enmsg);
                    result.failed(msg);                    
                }
            }
        } else if (StaticTest.DELETE.equals(choice)) {
            //the admin-listener cannot be deleted
            if (cce.getObject() instanceof HttpListener) {
                final HttpListener h = (HttpListener) cce.getObject();
                // this assumes that "admin-listener" is reserved in any config, although it makes sense only for DAS
                // so, I am not making any checks if this is DAS's config
                if (com.sun.enterprise.config.serverbeans.ServerHelper.ADMIN_HTTP_LISTNER_ID.equals(h.getId())) {
                    //this is rather stupid
                    final String locmsg = this.getClass().getName() + ".cantDeleteAdminListener";
                    final String enmsg = "ADMVAL1075: The http-listener reserved for administrative purposes can not be deleted.";
                    final String msg = smh.getLocalString(locmsg, enmsg);
                    result.failed(msg);
                }
            }
        } else {
            _logger.log(Level.SEVERE, "domainxmlverifier.unknownchoice", choice);
        }
        
        return result;