All Downloads are FREE. Search and download functionalities are using the official Maven repository.

hudson.plugins.view.dashboard.Dashboard Maven / Gradle / Ivy

Go to download

Hudson view that shows various cuts of build information via configured portlets.

The newest version!
package hudson.plugins.view.dashboard;

import hudson.DescriptorExtensionList;
import hudson.Extension;
import hudson.Util;
import hudson.model.Descriptor;
import hudson.model.Job;
import hudson.model.TopLevelItem;
import hudson.model.ViewDescriptor;
import hudson.model.Descriptor.FormException;
import hudson.model.ListView;
import java.io.IOException;

import java.io.UnsupportedEncodingException;
//import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.*;

import javax.servlet.ServletException;

import net.sf.json.JSONObject;

import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.StaplerRequest;

/**
 * View that can be customized with portlets to show the selected jobs information
 * in various ways.
 * 
 * @author Peter Hayes
 */
public class Dashboard extends ListView {
  /*
   * Use custom CSS style provided by the user
   */
  private boolean useCssStyle = false;
  /*
   * Show standard hudson jobs list at the top of the page
   */
  private boolean includeStdJobList = false;
  /*
   * The width of the left portlets
   */
  private String leftPortletWidth = "50%";
  /*
   * The width of the right portlets
   */
  private String rightPortletWidth = "50%";

  private List leftPortlets = new ArrayList();
  private List rightPortlets = new ArrayList();
  private List topPortlets = new ArrayList();
  private List bottomPortlets = new ArrayList();

  @DataBoundConstructor
  public Dashboard(String name) {
    super(name);
  }

  public boolean isUseCssStyle() {
    return useCssStyle;
  }

  public boolean isIncludeStdJobList() {
		return includeStdJobList;
	}
    
  public List getLeftPortlets() {
		return leftPortlets;
	}
    
  public List getRightPortlets() {
		return rightPortlets;
	}

  public List getTopPortlets() {
		return topPortlets;
	}

  public List getBottomPortlets() {
    return bottomPortlets;
  }

  public String getLeftPortletWidth() {
    return leftPortletWidth;
  }

  public String getRightPortletWidth() {
    return rightPortletWidth;
  }

  public DashboardPortlet getPortlet(String name) {
    ArrayList allPortlets = new ArrayList(topPortlets);
    allPortlets.addAll(leftPortlets);
    allPortlets.addAll(rightPortlets);
    allPortlets.addAll(bottomPortlets);
    for (DashboardPortlet portlet : allPortlets) {
      if (name.equals(portlet.getId())) {
        return portlet;
      }
    }
    return null;
  }

  public DescriptorExtensionList> getDashboardPortletDescriptors() {
    DescriptorExtensionList> list = DashboardPortlet.all();
    //Collections.sort(list);
//    Collections.sort(list, new Comparator>() {
//      public int compare(Descriptor p1, Descriptor p2) {
//        return p1.getDisplayName().compareTo(p2.getDisplayName());
//      }
//    });
    return list;
  }

  /* Use contains */
  //@Deprecated
  public synchronized boolean HasItem(TopLevelItem item) {
    List items = getItems();
    return items.contains(item);
//    return this.contains(item);
  }

  /* Use getItems */
  //@Deprecated
  public synchronized List getJobs() {
    List jobs = new ArrayList();

    for (TopLevelItem item : getItems()) {
      if (item instanceof Job) {
        jobs.add((Job) item);
      }
    }

    return jobs;
  }

	@Override
	protected synchronized void submit(StaplerRequest req) throws IOException,
			ServletException, FormException {
        super.submit(req);

        try {
          req.setCharacterEncoding("UTF-8");
        } catch (UnsupportedEncodingException ex) {
          Logger.getLogger(Dashboard.class.getName()).log(Level.SEVERE, null, ex);
        }
        JSONObject json = req.getSubmittedForm();

        String sIncludeStdJobList = Util.nullify(req.getParameter("includeStdJobList"));
        includeStdJobList = sIncludeStdJobList != null && "on".equals(sIncludeStdJobList);

        String sUseCssStyle = Util.nullify(req.getParameter("useCssStyle"));
        useCssStyle = sUseCssStyle != null && "on".equals(sUseCssStyle);

        if (useCssStyle) {
          if (req.getParameter("leftPortletWidth") != null) {
            leftPortletWidth = req.getParameter("leftPortletWidth");
          }

          if (req.getParameter("rightPortletWidth") != null) {
            rightPortletWidth = req.getParameter("rightPortletWidth");
          }
        }
        else {
          leftPortletWidth = rightPortletWidth = "50%";
        }

        topPortlets = Descriptor.newInstancesFromHeteroList(req, json, "topPortlet", DashboardPortlet.all());
        leftPortlets = Descriptor.newInstancesFromHeteroList(req, json, "leftPortlet", DashboardPortlet.all());
        rightPortlets = Descriptor.newInstancesFromHeteroList(req, json, "rightPortlet", DashboardPortlet.all());
        bottomPortlets = Descriptor.newInstancesFromHeteroList(req, json, "bottomPortlet", DashboardPortlet.all());
	}

  @Override
  public void rename(String newName) throws FormException {
    super.rename(newName);
    // Bug 6689 
    // TODO: if this view is the default view configured in Hudson, the we must keep it after renaming
  }
	
	@Extension
  public static final class DescriptorImpl extends ViewDescriptor {

        @Override
        public String getDisplayName() {
            return Messages.Dashboard_DisplayName();
        }

    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy