hudson.model.Items Java Examples

The following examples show how to use hudson.model.Items. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: AbstractPipelineCreateRequest.java    From blueocean-plugin with MIT License 6 votes vote down vote up
protected @Nonnull TopLevelItem createProject(String name, String descriptorName, Class<? extends TopLevelItemDescriptor> descriptorClass, BlueOrganization organization) throws IOException {
    ModifiableTopLevelItemGroup p = getParent(organization);

    final ACL acl = (p instanceof AccessControlled) ? ((AccessControlled) p).getACL() : Jenkins.getInstance().getACL();
    Authentication a = Jenkins.getAuthentication();
    if(!acl.hasPermission(a, Item.CREATE)){
        throw new ServiceException.ForbiddenException(
                String.format("Failed to create pipeline: %s. User %s doesn't have Job create permission", name, a.getName()));
    }
    TopLevelItemDescriptor descriptor = Items.all().findByName(descriptorName);
    if(descriptor == null || !(descriptorClass.isAssignableFrom(descriptor.getClass()))){
        throw new ServiceException.BadRequestException(String.format("Failed to create pipeline: %s, descriptor %s is not found", name, descriptorName));
    }

    if (!descriptor.isApplicableIn(p)) {
        throw new ServiceException.ForbiddenException(
                String.format("Failed to create pipeline: %s. Pipeline can't be created in Jenkins root folder", name));
    }

    if (!acl.hasCreatePermission(a, p, descriptor)) {
        throw new ServiceException.ForbiddenException("Missing permission: " + Item.CREATE.group.title+"/"+Item.CREATE.name + " " + Item.CREATE + "/" + descriptor.getDisplayName());
    }
    return p.createProject(descriptor, name, true);
}
 
Example #2
Source File: SelectJobsBallColorFolderIcon.java    From multi-branch-project-plugin with MIT License 5 votes vote down vote up
/**
 * Form validation method.  Similar to
 * {@link hudson.tasks.BuildTrigger.DescriptorImpl#doCheck(AbstractProject, String)}.
 *
 * @param folder the folder being configured
 * @param value  the user-entered value
 * @return validation result
 */
public FormValidation doCheck(@AncestorInPath AbstractFolder folder, @QueryParameter String value) {
    // Require CONFIGURE permission on this project
    if (!folder.hasPermission(Item.CONFIGURE)) {
        return FormValidation.ok();
    }

    boolean hasJobs = false;

    StringTokenizer tokens = new StringTokenizer(Util.fixNull(value), ",");
    while (tokens.hasMoreTokens()) {
        String jobName = tokens.nextToken().trim();

        if (StringUtils.isNotBlank(jobName)) {
            Item item = Jenkins.getActiveInstance().getItem(jobName, (ItemGroup) folder, Item.class);

            if (item == null) {
                Job nearest = Items.findNearest(Job.class, jobName, folder);
                String alternative = nearest != null ? nearest.getRelativeNameFrom((ItemGroup) folder) : "?";
                return FormValidation.error(
                        hudson.tasks.Messages.BuildTrigger_NoSuchProject(jobName, alternative));
            }

            if (!(item instanceof Job)) {
                return FormValidation.error(hudson.tasks.Messages.BuildTrigger_NotBuildable(jobName));
            }

            hasJobs = true;
        }
    }

    if (!hasJobs) {
        return FormValidation.error(hudson.tasks.Messages.BuildTrigger_NoProjectSpecified());
    }

    return FormValidation.ok();
}
 
Example #3
Source File: TemplateDrivenMultiBranchProject.java    From multi-branch-project-plugin with MIT License 5 votes vote down vote up
/**
 * Common initialization that is invoked when either a new project is created with the constructor
 * {@link TemplateDrivenMultiBranchProject#TemplateDrivenMultiBranchProject(ItemGroup, String)} or when a project
 * is loaded from disk with {@link #onLoad(ItemGroup, String)}.
 */
protected void init3() {
    if (disabledSubProjects == null) {
        disabledSubProjects = new PersistedList<>(this);
    }

    // Owner doesn't seem to be set when loading from XML
    disabledSubProjects.setOwner(this);

    try {
        XmlFile templateXmlFile = Items.getConfigFile(getTemplateDir());
        if (templateXmlFile.getFile().isFile()) {
            /*
             * Do not use Items.load here, since it uses getRootDirFor(i) during onLoad,
             * which returns the wrong location since template would still be unset.
             * Instead, read the XML directly into template and then invoke onLoad.
             */
            //noinspection unchecked
            template = (P) templateXmlFile.read();
            template.onLoad(this, TEMPLATE);
        } else {
            /*
             * Don't use the factory here because newInstance calls setBranch, attempting
             * to save the project before template is set.  That would invoke
             * getRootDirFor(i) and get the wrong directory to save into.
             */
            template = newTemplate();
        }

        // Prevent tampering
        if (!(template.getScm() instanceof NullSCM)) {
            template.setScm(new NullSCM());
        }
        template.disable();
    } catch (IOException e) {
        LOGGER.log(Level.WARNING, "Failed to load template project " + getTemplateDir(), e);
    }
}
 
Example #4
Source File: TemplateDrivenBranchProjectFactory.java    From multi-branch-project-plugin with MIT License 5 votes vote down vote up
/**
 * This is a mirror of {@link hudson.model.AbstractItem#updateByXml(Source)} without the
 * {@link hudson.model.listeners.SaveableListener#fireOnChange(Saveable, XmlFile)} trigger.
 *
 * @param project project to update by XML
 * @param source  source of XML
 * @throws IOException if error performing update
 */
@SuppressWarnings("ThrowFromFinallyBlock")
private void updateByXml(final P project, Source source) throws IOException {
    project.checkPermission(Item.CONFIGURE);
    final String projectName = project.getName();
    XmlFile configXmlFile = project.getConfigFile();
    final AtomicFileWriter out = new AtomicFileWriter(configXmlFile.getFile());
    try {
        try {
            XMLUtils.safeTransform(source, new StreamResult(out));
            out.close();
        } catch (SAXException | TransformerException e) {
            throw new IOException("Failed to persist config.xml", e);
        }

        // try to reflect the changes by reloading
        Object o = new XmlFile(Items.XSTREAM, out.getTemporaryFile()).unmarshal(project);
        if (o != project) {
            // ensure that we've got the same job type. extending this code to support updating
            // to different job type requires destroying & creating a new job type
            throw new IOException("Expecting " + project.getClass() + " but got " + o.getClass() + " instead");
        }

        Items.whileUpdatingByXml(new NotReallyRoleSensitiveCallable<Void, IOException>() {
            @SuppressWarnings("unchecked")
            @Override
            public Void call() throws IOException {
                project.onLoad(project.getParent(), projectName);
                return null;
            }
        });
        Jenkins.getActiveInstance().rebuildDependencyGraphAsync();

        // if everything went well, commit this new version
        out.commit();
    } finally {
        out.abort();
    }
}
 
Example #5
Source File: ProjectUtils.java    From ez-templates with Apache License 2.0 5 votes vote down vote up
/**
 * Copied from {@link AbstractProject#updateByXml(javax.xml.transform.Source)}, removing the save event and
 * returning the project after the update.
 */
@SuppressWarnings("unchecked")
public static AbstractProject updateProjectWithXmlSource(AbstractProject project, Source source) throws IOException {

    XmlFile configXmlFile = project.getConfigFile();
    AtomicFileWriter out = new AtomicFileWriter(configXmlFile.getFile());
    try {
        try {
            // this allows us to use UTF-8 for storing data,
            // plus it checks any well-formedness issue in the submitted
            // data
            Transformer t = TransformerFactory.newInstance()
                    .newTransformer();
            t.transform(source,
                    new StreamResult(out));
            out.close();
        } catch (TransformerException e) {
            throw new IOException2("Failed to persist configuration.xml", e);
        }

        // try to reflect the changes by reloading
        new XmlFile(Items.XSTREAM, out.getTemporaryFile()).unmarshal(project);
        project.onLoad(project.getParent(), project.getRootDir().getName());
        Jenkins.getInstance().rebuildDependencyGraph();

        // if everything went well, commit this new version
        out.commit();
        return ProjectUtils.findProject(project.getFullName());
    } finally {
        out.abort(); // don't leave anything behind
    }
}
 
Example #6
Source File: MockFolderTest.java    From jenkins-test-harness with MIT License 4 votes vote down vote up
@Test public void moving() throws Exception {
    MockFolder top = j.createFolder("top");
    FreeStyleProject p = top.createProject(FreeStyleProject.class, "p");
    MockFolder sub = top.createProject(MockFolder.class, "sub");
    assertNews("created=top created=top/p created=top/sub");
    Items.move(p, j.jenkins);
    assertEquals(j.jenkins, p.getParent());
    assertEquals(p, j.jenkins.getItem("p"));
    assertNull(top.getItem("p"));
    assertNews("moved=p;from=top/p");
    Items.move(p, sub);
    assertEquals(sub, p.getParent());
    assertEquals(p, sub.getItem("p"));
    assertNull(j.jenkins.getItem("p"));
    assertNews("moved=top/sub/p;from=p");
    Items.move(sub, j.jenkins);
    assertEquals(sub, p.getParent());
    assertEquals(p, sub.getItem("p"));
    assertEquals(j.jenkins, sub.getParent());
    assertEquals(sub, j.jenkins.getItem("sub"));
    assertNull(top.getItem("sub"));
    assertNews("moved=sub;from=top/sub moved=sub/p;from=top/sub/p");
    Items.move(sub, top);
    assertNews("moved=top/sub;from=sub moved=top/sub/p;from=sub/p");
    assertEquals(sub, top.getItem("sub"));
    sub.renameTo("lower");
    assertNews("renamed=top/lower;from=sub moved=top/lower;from=top/sub moved=top/lower/p;from=top/sub/p");
    top.renameTo("upper");
    assertNews("renamed=upper;from=top moved=upper;from=top moved=upper/lower;from=top/lower moved=upper/lower/p;from=top/lower/p");
    assertEquals(p, sub.getItem("p"));
    p.renameTo("j");
    assertNews("renamed=upper/lower/j;from=p moved=upper/lower/j;from=upper/lower/p");
    top.renameTo("upperz");
    assertNews("renamed=upperz;from=upper moved=upperz;from=upper moved=upperz/lower;from=upper/lower moved=upperz/lower/j;from=upper/lower/j");
    assertEquals(sub, top.getItem("lower"));
    sub.renameTo("upperzee");
    assertNews("renamed=upperz/upperzee;from=lower moved=upperz/upperzee;from=upperz/lower moved=upperz/upperzee/j;from=upperz/lower/j");
    Items.move(sub, j.jenkins);
    assertNews("moved=upperzee;from=upperz/upperzee moved=upperzee/j;from=upperz/upperzee/j");
    assertEquals(p, j.jenkins.getItemByFullName("upperzee/j"));
}
 
Example #7
Source File: FolderConfig.java    From docker-workflow-plugin with MIT License 4 votes vote down vote up
public DescriptorImpl() {
    Items.XSTREAM2.addCompatibilityAlias("org.jenkinsci.plugins.pipeline.modeldefinition.config.FolderConfig", FolderConfig.class);
}
 
Example #8
Source File: MatrixMultiBranchProject.java    From multi-branch-project-plugin with MIT License 4 votes vote down vote up
/**
 * Gives this class an alias for configuration XML.
 */
@Initializer(before = InitMilestone.PLUGINS_STARTED)
@SuppressWarnings(UNUSED)
public static void registerXStream() {
    Items.XSTREAM.alias("matrix-multi-branch-project", MatrixMultiBranchProject.class);
}
 
Example #9
Source File: BranchListView.java    From multi-branch-project-plugin with MIT License 4 votes vote down vote up
/**
 * Gives this class an alias for configuration XML.
 */
@SuppressWarnings(UNUSED)
@Initializer(before = InitMilestone.PLUGINS_STARTED)
public static void registerXStream() {
    Items.XSTREAM.alias("branch-list-view", BranchListView.class);
}
 
Example #10
Source File: IvyMultiBranchProject.java    From multi-branch-project-plugin with MIT License 4 votes vote down vote up
/**
 * Gives this class an alias for configuration XML.
 */
@SuppressWarnings(UNUSED)
@Initializer(before = InitMilestone.PLUGINS_STARTED)
public static void registerXStream() {
    Items.XSTREAM.alias("ivy-multi-branch-project", IvyMultiBranchProject.class);
}
 
Example #11
Source File: FreeStyleMultiBranchProject.java    From multi-branch-project-plugin with MIT License 4 votes vote down vote up
/**
 * Gives this class an alias for configuration XML.
 */
@Initializer(before = InitMilestone.PLUGINS_STARTED)
@SuppressWarnings("unused")
public static void registerXStream() {
    Items.XSTREAM.alias("freestyle-multi-branch-project", FreeStyleMultiBranchProject.class);
}
 
Example #12
Source File: MavenMultiBranchProject.java    From multi-branch-project-plugin with MIT License 4 votes vote down vote up
/**
 * Gives this class an alias for configuration XML.
 */
@Initializer(before = InitMilestone.PLUGINS_STARTED)
@SuppressWarnings(UNUSED)
public static void registerXStream() {
    Items.XSTREAM.alias("maven-multi-branch-project", MavenMultiBranchProject.class);
}
 
Example #13
Source File: ElasticsearchPlugin.java    From elasticsearch-jenkins with MIT License 4 votes vote down vote up
@Override
public void start() throws Exception {
    Items.XSTREAM.registerConverter(new Config.ConverterImpl());
    load();
    LOG.fine("Loading config: " + config);
}
 
Example #14
Source File: PluginImpl.java    From zulip-plugin with MIT License 4 votes vote down vote up
@Initializer(before = InitMilestone.PLUGINS_STARTED)
public static void addAliases() {
  Items.XSTREAM2.addCompatibilityAlias("hudson.plugins.humbug.HumbugNotifier", ZulipNotifier.class);
}