/******************************************************************************* * * Copyright (c) 2004-2010, Oracle Corporation. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * * * * *******************************************************************************/ package hudson.cli; import hudson.model.Hudson; import hudson.Extension; import static hudson.cli.UpdateJobCommand.getNewJobName; import static hudson.cli.UpdateJobCommand.validateTeam; import hudson.model.Failure; import hudson.model.Item; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; import org.eclipse.hudson.security.team.Team; import org.eclipse.hudson.security.team.TeamManager; import org.kohsuke.args4j.Argument; import org.kohsuke.args4j.Option; /** * Creates a new job by reading stdin as a configuration XML file. * * @author Kohsuke Kawaguchi */ @Extension public class CreateJobCommand extends CLICommand { @Override public String getShortDescription() { return "Creates a new job by reading stdin or file as a configuration XML file"; } @Argument(metaVar = "NAME", usage = "Name of the job to create. The job name should not be team qualified. Ex: job1.", required = true) public String name; @Argument(metaVar = "TEAM", usage = "Team to create the job in. Optional.", index = 1, required = false) public String team; @Option(name = "-file", usage = "Read config.xml from file rather than standard input.") public String file; protected int run() throws Exception { Hudson h = Hudson.getInstance(); h.checkPermission(Item.CREATE); Team targetTeam = validateTeam(team, true, stderr); if (team != null && targetTeam == null) { return -1; } name = name.trim(); if (!isGoodName(name, stderr)) { return -1; } String qualifiedJobName = targetTeam == null ? getNewJobName(name) : h.getTeamManager().getRawTeamQualifiedJobName(targetTeam, name); if (h.getItem(qualifiedJobName) != null) { stderr.println("Job '" + qualifiedJobName + "' already exists"); return -1; } InputStream xml = stdin; if (file != null) { File inputFile = new File(file); if (!inputFile.exists()) { stderr.println("File '" + file + "' does not exist"); return -1; } if (!inputFile.isFile()) { stderr.println("File '" + file + "' is not a file"); return -1; } try { xml = new FileInputStream(inputFile); } catch (FileNotFoundException e) { stderr.println("File '" + file + "' not found"); return -1; } } h.createProjectFromXML(name, team, xml); return 0; } public static boolean isGoodName(String name, PrintStream stderr) { try { Hudson.checkGoodJobName(name); } catch (Failure e) { stderr.println(e.getMessage()); return false; } return true; } }