Package com.sun.faban.harness.webclient

Source Code of com.sun.faban.harness.webclient.Results

/* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the License). You may not use this file except in
* compliance with the License.
*
* You can obtain a copy of the License at
* http://www.sun.com/cddl/cddl.html or
* install_dir/legal/LICENSE
* See the License for the specific language governing
* permission and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* Header Notice in each file and include the License file
* at install_dir/legal/LICENSE.
* If applicable, add the following below the CDDL Header,
* with the fields enclosed by brackets [] replaced by
* your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
*
* $Id$
*
* Copyright 2005-2009 Sun Microsystems Inc. All Rights Reserved
*/
package com.sun.faban.harness.webclient;

import com.sun.faban.common.SortableTableModel;
import com.sun.faban.harness.common.Config;
import com.sun.faban.harness.common.RunId;
import com.sun.faban.harness.engine.RunQ;
import com.sun.faban.harness.security.AccessController;
import com.sun.faban.harness.util.FileHelper;
import com.sun.faban.harness.util.XMLReader;
import com.sun.faban.harness.webclient.RunResult.FeedRecord;
import com.sun.faban.harness.webclient.RunResult.Target;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.StringTokenizer;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
* Controller handling actions from the result list screen.
* @author akara
*/
public class Results {
    private static SimpleDateFormat formatOrig =
            new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");

    /**
     * Add/Edit the target to target.xml file
     * @param req
     * @param resp
     * @return String
     * @throws java.io.IOException
     */
    public String addEditTarget(HttpServletRequest req, HttpServletResponse resp)
            throws IOException, Exception {
        String targetname = req.getParameter("targetname");
        String targetowner = req.getParameter("targetowner");
        String targetmetric = req.getParameter("targetmetric");
        String targetmetricunit = req.getParameter("targetmetricunit");
        String targetcolorred = req.getParameter("targetcolorred");
        String targetcolororange = req.getParameter("targetcolororange");
        String targetcoloryellow = req.getParameter("targetcoloryellow");
        String targettags = req.getParameter("targettags");
        String flag = req.getParameter("flag");
        String add = "<target>\n" +
                            "<name>" + targetname +"</name>\n" +
                            "<owner>" + targetowner +"</owner>\n" +
                            "<metric>" + targetmetric +"</metric>\n" +
                            "<metricunit>" + targetmetricunit +"</metricunit>\n" +
                            "<tags>" + targettags +"</tags>\n" +
                            "<red>" + targetcolorred +"</red>\n" +
                            "<orange>" + targetcolororange +"</orange>\n" +
                            "<yellow>" + targetcoloryellow +"</yellow>\n" +
                    "</target>\n</targets>";

        File targetFile = new File(Config.CONFIG_DIR, "targets.xml");

        if (!targetFile.exists() || targetFile.length() == 0) {
            FileHelper.writeStringToFile(
                    "<?xml version='1.0' encoding='UTF-8'?><targets></targets>",
                    targetFile);
        }

        XMLReader reader = new XMLReader(targetFile.getAbsolutePath());
        boolean found = false;
        if (reader != null) {
            List<String> list = reader.getValues("name");
            if(list.contains(targetname)){
                found = true;
            }
        }
        if (targetFile.exists() && targetFile.length() > 0) {
            if (flag.equals("add")) {
                if(found == false){
                    FileHelper.tokenReplace(targetFile.getAbsolutePath(),
                            "</targets>", add, null);
                    req.setAttribute("answer", "<span style=color:#00cc00; font-size: 14px>Target " + targetname +
                            " added Successfully!!</span>" );
                }else{
                    req.setAttribute("answer", "<span style=color:red; font-size: 14px>Sorry, target " + targetname +
                            " already exists, please try different name.</span>" );
                }
            }else if (flag.equals("edit") || flag.equals("delete")) {
                if (found == true) {
                    NodeList targetnodes = reader.getTopLevelElements();
                    for(int i = 0; i < targetnodes.getLength(); i++){
                        Node e = targetnodes.item(i);
                        if(targetnodes.item(i).getNodeType() ==
                                Node.ELEMENT_NODE ) {
                            NodeList targetchildnodes =
                                    targetnodes.item(i).getChildNodes();
                            for(int j = 0; j < targetchildnodes.getLength(); j++){
                                if(targetchildnodes.item(j).getNodeType() ==
                                        Node.ELEMENT_NODE) {
                                    //Node e = targetnodes.item(i);
                                    String nodename =
                                            targetchildnodes.item(j).getNodeName();
                                    String nodeval = reader.getValue("name", e);
                                    if(nodename == null || !nodename.equals("name")
                                       || nodeval == null || !nodeval.equals(targetname)){
                                        continue;
                                    }else if (nodename != null &&
                                            nodename.equals("name") &&
                                            nodeval != null &&
                                            nodeval.equals(targetname)) {
                                        if(flag.equals("edit")){
                                            editTargetNode(e, reader, targetowner,
                                                    targetmetric, targetmetricunit, targettags,
                                                    targetcolorred, targetcolororange,
                                                    targetcoloryellow);
                                            req.setAttribute("answer", "<span style=color:#00cc00; font-size: 14px>Target " +
                                                    targetname + " edited Successfully!!</span>" );
                                        }else if(flag.equals("delete")){
                                            deleteTargetNode(e, e.getParentNode(),
                                                    reader);
                                            req.setAttribute("answer", "<span style=color:#00cc00; font-size: 14px>Target " +
                                                    targetname + " deleted Successfully!!</span>" );
                                        }
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }else{
                    req.setAttribute("answer", "<span style=color:red; font-size: 14px>Sorry, could not find target " +
                            targetname + " for editing.</span>" );
                }
            }
        }
        return targetlist(req,resp);
    }

    private void editTargetNode(Node target, XMLReader reader,
            String targetowner, String targetmetric, String targetmetricunit,
            String targettags, String targetcolorred, String targetcolororange,
            String targetcoloryellow ) throws Exception {
        //String paramFileName = Config.CONFIG_DIR + "targets.xml";
        //ParamRepository param = new ParamRepository(paramFileName, false);

        NodeList targetchildnodes = target.getChildNodes();
        for (int j = 0; j < targetchildnodes.getLength(); j++) {
            if (targetchildnodes.item(j).getNodeType() == Node.ELEMENT_NODE) {
                Element e = (Element) targetchildnodes.item(j);
                if (e.getNodeName().equals("owner")){
                    reader.replaceValue(e, targetowner);
                }else if (e.getNodeName().equals("metric")){
                    reader.replaceValue(e, targetmetric);
                }else if (e.getNodeName().equals("metricunit")){
                    reader.replaceValue(e, targetmetricunit);
                }else if (e.getNodeName().equals("tags")){
                    reader.replaceValue(e, targettags);
                }else if (e.getNodeName().equals("red")){
                    reader.replaceValue(e, targetcolorred);
                }else if (e.getNodeName().equals("orange")){
                    reader.replaceValue(e, targetcolororange);
                }else if (e.getNodeName().equals("yellow")){
                    reader.replaceValue(e, targetcoloryellow);
                }

            }
        }
        reader.save(null);
    }

    private void deleteTargetNode(Node target, Node parent, XMLReader reader ) throws Exception {
        reader.deleteNode(target, parent);
        reader.save(null);
    }

    /**
     * Obtains the resultlist table.
     * @param req
     * @param resp
     * @return String
     * @throws java.io.IOException
     */
    public String list(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        int col = -1;
        UserEnv usrEnv = getUserEnv(req);
        String tag = req.getParameter("inputtag");
        String sortColumn = req.getParameter("sortColumn");
        String sortDirection = req.getParameter("sortDirection");
        if (sortColumn != null && !"".equals(sortColumn)) {
            col = Integer.parseInt(sortColumn);
        }
        SortableTableModel resultTable = null;
        boolean tagSearch = false;
        String feedURL = "/controller/results/feed";
        if (tag != null && !"".equals(tag)) {
            tag = tag.trim();
            if (tag.length() > 0) {
                tagSearch = true;
            }
        }
        if (tagSearch) {
            if (col >= 0 && col < 8)
                resultTable = RunResult.getResultTable(usrEnv.getSubject(), tag, col, sortDirection.trim());
            else    
                resultTable = RunResult.getResultTable(usrEnv.getSubject(), tag, 5, "DESCENDING");
            StringTokenizer t = new StringTokenizer(tag, " ,;:");
            StringBuilder b = new StringBuilder(tag.length());
            b.append(feedURL);
            while (t.hasMoreTokens()) {
                b.append('/');
                String tagName = t.nextToken();
                tagName = tagName.replace("/", "+");
                b.append(tagName);
            }
            feedURL = b.toString();
            req.setAttribute("tagInSearch", tag);
        } else if (col >= 0 && col < 8) {
            resultTable = RunResult.getResultTable(usrEnv.getSubject(), col, sortDirection.trim());
        } else {
            resultTable = RunResult.getResultTable(usrEnv.getSubject(), 5, "DESCENDING");
        }

        req.setAttribute("feedURL", feedURL );
        req.setAttribute("table.model", resultTable);
        return "/resultlist.jsp";
    }

    /**
     * Obtains the targetlist table.
     * @param req
     * @param resp
     * @return String
     * @throws java.io.IOException
     */
    public String targetlist(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        ArrayList<Target> targetList = new ArrayList<Target>();
        int col = -1;
        UserEnv usrEnv = getUserEnv(req);
        String user = usrEnv.getUser();
        String target = req.getParameter("inputtarget");
        String sortColumn = req.getParameter("sortColumn");
        String sortDirection = req.getParameter("sortDirection");
        String viewAll = req.getParameter("viewAll");
        String viewMy = req.getParameter("viewMy");
        if (sortColumn != null && !"".equals(sortColumn)) {
            col = Integer.parseInt(sortColumn);
        }
        SortableTableModel targetTable = null;
        boolean targetSearch = false;
        if (target != null && !"".equals(target)) {
            target = target.trim();
            if (target.length() > 0) {
                targetSearch = true;
            }
        }

        if(targetSearch == true){
            targetList = RunResult.getTargetListForTarget(target);
            req.setAttribute("targetInSearch", target);
            if(targetList.isEmpty()) {
                req.setAttribute("answer", "<span style=color:red; font-size: 14px>There are no targets for search key " + target + "</span>" );
            }
            /*if(targetSearch == true && user == null){
                targetList = RunResult.getTargetListForTarget(target);
                req.setAttribute("targetInSearch", target);
            }else if(targetSearch == true && user != null){
            targetList = RunResult.getTargetListForUserWithTg(target, user);
            if(targetList.isEmpty()){
                viewAll = "null";
                targetList = RunResult.getTargetListForTarget(target);
            }
            req.setAttribute("targetInSearch", target);}*/
        }else if(targetSearch == false && user != null && !viewAll.equals("null")){
            targetList = RunResult.getTargetListForUser(user);
            if(targetList.isEmpty()){
                viewMy = "disable";
                viewAll = "null";
                targetList = RunResult.getTargetList();
                if(targetList.isEmpty()){
                    req.setAttribute("answer", "<span style=color:green; font-size: 14px>Targets " +
                    "are not defined. Currently, the list is empty.</span>" );
                }
            }
        }else{
            viewAll = "null";
            targetList = RunResult.getTargetList();
            if(targetList.isEmpty()){
                    req.setAttribute("answer", "<span style=color:green; font-size: 14px>Targets " +
                    "are not defined. Currently, the list is empty.</span>" );
            }
        }
        if(targetList.size() > 0) {
            if (col >= 0 && col < 5){
                    targetTable = RunResult.generateTargetTable(targetList, col, sortDirection.trim());
            }else{
                    targetTable = RunResult.generateTargetTable(targetList, 0, "DESCENDING");
            }
        }
        req.setAttribute("viewMy", viewMy);
        req.setAttribute("viewAll", viewAll);
        req.setAttribute("table.model", targetTable);
        return "/targetlist.jsp";
    }

    /**
     * Obtains the feed list.
     * @param req
     * @param resp
     * @throws java.io.IOException
     */
    public void feed(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        UserEnv usrEnv = getUserEnv(req);
        String[] restRequest = (String[]) req.getAttribute("rest.request");
        List<FeedRecord> itemList;
        if (restRequest != null) {
            itemList = RunResult.getFeeds(usrEnv.getSubject(), restRequest);
        } else {
            itemList = RunResult.getFeeds(usrEnv.getSubject());
        }

        // The first result is the most up-to-date.
        SimpleDateFormat format = (SimpleDateFormat) formatOrig.clone();
        for (FeedRecord feedItem : itemList) {
            feedItem.updated = format.format(new Date(feedItem.date));
        }
        req.setAttribute("feed.model", itemList);
        req.setAttribute("request.url", req.getRequestURL());

        String updated;
        if (itemList.size() > 0) {
            FeedRecord item0 = itemList.get(0);
            updated = item0.updated;
        } else {
            updated = format.format(new Date(0));
        }
        req.setAttribute("feed.updated", updated);
    }

    /**
     * Obtains the run information.
     * @param req
     * @param resp
     * @return String
     * @throws java.io.IOException
     */
    public String getRunInfo(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        UserEnv usrEnv = getUserEnv(req);
        String runId = req.getParameter("runId");
        RunResult result = RunResult.getInstance(new RunId(runId));
        String[] header = {"RunId","Description","Result","Scale","Metric","Status","Date/Time","Submitter","Tags"};
        String[] runInfo = new String[9];
        runInfo[0] = result.runId.toString();
        if (result.description == null || result.description.length() == 0)
                runInfo[1] = "UNAVAILABLE";
        else
                runInfo[1] = result.description;
        if (result.result != null) {             
                runInfo[2] = result.result;
        } else {               
                runInfo[2] = "N/A";
        }

            if (result.scale == null || result.scale.length() < 1) {
                runInfo[3] = "N/A";
            } else {
                runInfo[3] = result.scale;
            }

            if (result.metric.text == null) {
                runInfo[4] = "N/A";
            } else {
                runInfo[4] = result.metric.text;
            }
            if (result.status != null) {
                runInfo[5] = result.status;
            } else {              
                runInfo[5] = "UNKNOWN";
            }

            if (result.dateTime != null) {
                runInfo[6] = formatOrig.format(result.dateTime);
            } else {
                runInfo[6] = "N/A";
            }
           
            if (result.submitter != null)
                runInfo[7] = result.submitter;
            else
                runInfo[7] = "&nbsp;";


            if (result.tags != null && result.tags.length > 0) {
                StringBuilder b = new StringBuilder();
                for (String tag : result.tags) {
                    b.append(tag).append(' ');
                }
                b.setLength(b.length() - 1);
                runInfo[8] = b.toString();
                b.setLength(0);
            } else {
                runInfo[8] = "&nbsp;";
            }
        req.setAttribute("header", header);
        req.setAttribute("runinfo", runInfo);
        if (!AccessController.isWriteAllowed(usrEnv.getSubject(), runId))
            return "/runinfo_readonly.jsp";
        else
            return "/runinfo.jsp";
    }

    /**
     * .
     * @param req
     * @param resp
     * @throws java.io.IOException
     */
    public void location(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        String[] restRequest = (String[]) req.getAttribute("rest.request");
        String runId = restRequest[0];
        UserEnv usrEnv = getUserEnv(req);

        RunResult result = RunResult.getInstance(new RunId(runId));
        if (result == null) {
            // Perhaps the runId is still in the pending queue.
            boolean found = false;
            String[] pending = RunQ.listPending();
            for (String run : pending) {
                if (run.equals(runId)) {
                    resp.sendRedirect("/pending-runs.jsp");
                    found = true;
                    break;
                }
            }
            if (!found) {
                resp.sendError(HttpServletResponse.SC_NOT_FOUND,
                                "Run " + runId + " not found");
            }
        } else if (!AccessController.isViewAllowed(usrEnv.getSubject(), runId)) {
            resp.sendError(HttpServletResponse.SC_NOT_FOUND,
                           "Run " + runId + " not found");
        } else if ("COMPLETED".equals(result.status)){
            resp.sendRedirect(result.resultLink);
        } else if (result.logLink.length() > 0) {
            resp.sendRedirect(result.logLink);
        } else {
            resp.sendRedirect("/controller/results/list");
        }
    }

    private UserEnv getUserEnv(HttpServletRequest req) {
        HttpSession session = req.getSession();
        UserEnv usrEnv = (UserEnv) session.getAttribute("usrEnv");
        if (usrEnv == null) {
            usrEnv = new UserEnv();
            session.setAttribute("usrEnv", usrEnv);
        }
        return usrEnv;
    }
}
TOP

Related Classes of com.sun.faban.harness.webclient.Results

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.