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

hudson.model.ListView Maven / Gradle / Ivy

package hudson.model;

import hudson.Util;
import hudson.util.CaseInsensitiveComparator;
import hudson.util.FormFieldValidator;

import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;

import javax.servlet.ServletException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.ArrayList;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import java.text.ParseException;

/**
 * Displays {@link Job}s in a flat list view.
 *
 * @author Kohsuke Kawaguchi
 */
public class ListView extends View {

    private final Hudson owner;

    /**
     * List of job names. This is what gets serialized.
     */
    /*package*/ final Set jobNames = new TreeSet(CaseInsensitiveComparator.INSTANCE);

    /**
     * Name of this view.
     */
    private String name;

    /**
     * Message displayed in the view page.
     */
    private String description;

    /**
     * Include regex string.
     */
    private String includeRegex;
    
    /**
     * Compiled include pattern from the includeRegex string.
     */
    private transient Pattern includePattern;

    public ListView(Hudson owner, String name) {
        this.name = name;
        this.owner = owner;
    }

    /**
     * Returns a read-only view of all {@link Job}s in this view.
     *
     * 

* This method returns a separate copy each time to avoid * concurrent modification issue. */ public synchronized List getItems() { Set names = (Set) ((TreeSet) jobNames).clone(); if (includeRegex != null) { try { if (includePattern == null) { includePattern = Pattern.compile(includeRegex); } for (TopLevelItem item : owner.getItems()) { String itemName = item.getName(); if (includePattern.matcher(itemName).matches()) { names.add(itemName); } } } catch (PatternSyntaxException pse) { } } List items = new ArrayList(names.size()); for (String name : names) { TopLevelItem item = owner.getItem(name); if(item!=null) items.add(item); } return items; } public TopLevelItem getItem(String name) { return owner.getItem(name); } public TopLevelItem getJob(String name) { return getItem(name); } public boolean contains(TopLevelItem item) { return jobNames.contains(item.getName()); } public String getViewName() { return name; } public String getDescription() { return description; } public String getDisplayName() { return name; } public String getIncludeRegex() { return includeRegex; } public Item doCreateItem(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { Item item = owner.doCreateItem(req, rsp); if(item!=null) { jobNames.add(item.getName()); owner.save(); } return item; } public String getUrl() { return "view/"+name+'/'; } /** * Accepts submission from the configuration page. */ public synchronized void doConfigSubmit( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException { checkPermission(CONFIGURE); req.setCharacterEncoding("UTF-8"); jobNames.clear(); for (TopLevelItem item : owner.getItems()) { if(req.getParameter(item.getName())!=null) jobNames.add(item.getName()); } description = Util.nullify(req.getParameter("description")); if (req.getParameter("useincluderegex") != null) { includeRegex = Util.nullify(req.getParameter("includeregex")); } else { includeRegex = null; } includePattern = null; try { String n = req.getParameter("name"); Hudson.checkGoodName(n); name = n; } catch (ParseException e) { sendError(e, req, rsp); return; } owner.save(); rsp.sendRedirect2("../"+name); } /** * Accepts the new description. */ public synchronized void doSubmitDescription( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException { checkPermission(CONFIGURE); req.setCharacterEncoding("UTF-8"); description = req.getParameter("description"); owner.save(); rsp.sendRedirect("."); // go to the top page } /** * Deletes this view. */ public synchronized void doDoDelete( StaplerRequest req, StaplerResponse rsp ) throws IOException { checkPermission(DELETE); owner.deleteView(this); rsp.sendRedirect2(req.getContextPath()+"/"); } /** * Checks if the include regular expression is valid. */ public synchronized void doIncludeRegexCheck( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException, InterruptedException { new FormFieldValidator(req, rsp, false) { @Override protected void check() throws IOException, ServletException { String v = Util.fixEmpty(request.getParameter("value")); if (v != null) { try { Pattern.compile(v); } catch (PatternSyntaxException pse) { error(pse.getMessage()); } } ok(); } }.process(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy