public void execute()

in jkstatus/src/share/org/apache/jk/status/JkStatusTask.java [170:363]


    public void execute() throws BuildException {

        if (url == null) {
            throw new BuildException("Must specify an 'url'");
        }
        boolean isWorkerOnly = worker != null && !"".equals(worker);
        boolean isLoadbalancerOnly = loadbalancer != null
                && !"".equals(loadbalancer);

        StringBuffer error = new StringBuffer();
        try {
            JkStatusAccessor accessor = new JkStatusAccessor();
            JkStatus status = accessor.status(url, username, password);
            if (status.result != null && !"OK".equals(status.result.type) ) {
                if (getErrorProperty() != null) {
                    getProject().setNewProperty(errorProperty, status.result.message);
                }
                if (isFailOnError()) {
                    throw new BuildException(status.result.message);
                } else {
                    handleErrorOutput(status.result.message);
                    return;
                }

            }
            
            if (!isWorkerOnly && !isLoadbalancerOnly) {
                JkServer server = status.getServer();
                JkSoftware software = status.getSoftware();
                JkResult result = status.getResult();
                if (resultproperty != null) {
                    createProperty(server, "server", "name");
                    createProperty(server, "server", "port");
                    createProperty(software, "web_server");
                    createProperty(software, "jk_version");
                    createProperty(result, "result", "type");
                    createProperty(result, "result", "message");
                }
                if (isEcho()) {
                    handleOutput("server name=" + server.getName() + ":"
                            + server.getPort() + " - " + software.getWeb_server() + " - " + software.getJk_version());
                }
            }
            List balancers = status.getBalancers();
            for (Iterator iter = balancers.iterator(); iter.hasNext();) {
                JkBalancer balancer = (JkBalancer) iter.next();
                String balancerIndex = null;
                if (isLoadbalancerOnly) {
                    if (loadbalancer.equals(balancer.getName())) {
                        if (resultproperty != null) {
                            setPropertyBalancerOnly(balancer);
                        }
                        echoBalancer(balancer);
                        return;
                    }
                } else {
                    if (!isWorkerOnly) {
                        if (resultproperty != null) { 
                        	if ( balancer.getId() >= 0)
                        		balancerIndex = Integer.toString(balancer.getId());
                        	else
                        		balancerIndex = balancer.getName() ;
                        	
                        	setPropertyBalancer(balancer,balancerIndex);
                        }
                        echoBalancer(balancer);
                    }
                    List members = balancer.getBalancerMembers();
                    for (Iterator iterator = members.iterator(); iterator
                            .hasNext();) {
                        JkBalancerMember member = (JkBalancerMember) iterator
                                .next();
                        if (isWorkerOnly) {
                            if (worker.equals(member.getName())) {
                                if (resultproperty != null) {
                                    setPropertyWorkerOnly(balancer, member);
                                }
                                echoWorker(member);
                                return;
                            }
                        } else {
                            if (resultproperty != null) {
                                setPropertyWorker(null, member);
                            }
                            echoWorker(member);
                            if (member.getStatus() != null && !"OK".equals(member.getStatus())) {
                                error.append(" worker name=" + member.getName()
                                        + " status=" + member.getStatus()
                                        + " host=" + member.getAddress());
                            }
                            if (member.getState() != null &&
                                !("OK".equals(member.getState()) ||
                                  "N/A".equals(member.getState()) ||
                                  "OK/IDLE".equals(member.getState())) ){
                                error.append(" worker name=" + member.getName()
                                        + " state=" + member.getState()
                                        + " host=" + member.getAddress());
                            }
                        }
                    }
                    if (!isWorkerOnly) {
                        if (resultproperty != null && members.size() > 0) {
                            getProject().setNewProperty(
                                    resultproperty + "."
                                            + balancer.getName() + ".length",
                                    Integer.toString(members.size()));
                        }
                        List mappings = balancer.getBalancerMappings();
                        int j = 0;
                        String mapIndex ;
                        if( balancerIndex != null )
                        	mapIndex = balancerIndex + ".map" ;
                        else
                        	mapIndex = "map" ;
                        for (Iterator iterator = mappings.iterator(); iterator
                                .hasNext(); j++) {
                            JkBalancerMapping mapping = (JkBalancerMapping) iterator
                                    .next();
                            if (resultproperty != null) {
                            	String stringIndex2 ;
                                if( mapping.getId() >= 0) {
                                    stringIndex2 =  Integer.toString(mapping.getId()) ;
                                } else {
                                    stringIndex2 = Integer.toString(j);
                                }                       	
                                createProperty(mapping, mapIndex,
                                        stringIndex2, "type");
                                createProperty(mapping, mapIndex,
                                        stringIndex2, "uri");
                                createProperty(mapping, mapIndex,
                                        stringIndex2, "context");
                                createProperty(mapping, mapIndex,
                                        stringIndex2, "source");
                            }
                            if (isEcho()) {
                            	String mappingOut ;
                            	
                            	if(mapping.source != null) {
                            		mappingOut =
                            			"balancer name="
                                        + balancer.getName() + " mappingtype="
                                        + mapping.getType() + " uri="
                                        + mapping.getUri() + " source="
                                        + mapping.getSource() ;
                            	} else {
                            		mappingOut = "balancer name="
                                        + balancer.getName() + " mappingtype="
                                        + mapping.getType() + " uri="
                                        + mapping.getUri() + " context="
                                        + mapping.getContext() ;
                            	}
                            	handleOutput(mappingOut);
                            }
                        }
                        if (resultproperty != null && mappings.size() > 0) {
                            getProject().setNewProperty(
                                    resultproperty + "."
                                            + mapIndex + ".length",
                                    Integer.toString(mappings.size()));
                        }
                    }
                }
            }
            if (!isWorkerOnly && !isLoadbalancerOnly) {
                if (resultproperty != null && balancers.size() > 0) {
                    getProject().setNewProperty(
                            resultproperty + ".length",
                            Integer.toString(balancers.size()));
                }
            }
        } catch (Throwable t) {
            error.append(t.getMessage());
            if (getErrorProperty() != null) {
                getProject().setNewProperty(errorProperty, error.toString());
            }
            if (isFailOnError()) {
                throw new BuildException(t);
            } else {
                handleErrorOutput(t.getMessage());
                return;
            }
        }
        if (error.length() != 0) {
            if (getErrorProperty() != null) {
                getProject().setNewProperty(errorProperty, error.toString());
            }
            if (isFailOnError()) {
                // exception should be thrown only if failOnError == true
                // or error line will be logged twice
                throw new BuildException(error.toString());
            }
        }

    }