// TODO Tag projects as created by us, so that we can intelligently delete them and prevent // multiple jobs editing Projects private boolean createNewJob(String jobName, String config) { LOGGER.log(Level.FINE, String.format("Creating project as %s", config)); boolean created; try { InputStream is = new ByteArrayInputStream(config.getBytes("UTF-8")); // TODO confirm that we're using UTF-8 int i = jobName.lastIndexOf('/'); Jenkins jenkins = Jenkins.getInstance(); ModifiableTopLevelItemGroup ctx = jenkins; if (i > 0) { String contextName = jobName.substring(0, i); jobName = jobName.substring(i + 1); Item contextItem = jenkins.getItemByFullName(contextName); if (contextItem instanceof ModifiableItemGroup) { ctx = (ModifiableTopLevelItemGroup) contextItem; } } TopLevelItem item = ctx.createProjectFromXML(jobName, is); created = true; } catch (UnsupportedEncodingException ueex) { LOGGER.log(Level.WARNING, "Unsupported encoding used in config. Should be UTF-8."); created = false; } catch (IOException ioex) { LOGGER.log( Level.WARNING, String.format("Error writing config for new job %s.", jobName), ioex); created = false; } return created; }
/** * Gets all group folders without applying the filter. * * @return all group folders */ private Map<Integer, GroupFolderInfo> getUnfilteredFolders() { Map<Integer, GroupFolderInfo> folders = new TreeMap<Integer, GroupFolderInfo>(); for (TopLevelItem item : itemGroup.getItems()) { // check if the item is a group folder GroupFolderInfo groupFolderInfo = GroupFolderInfo.createFromItem(item); if (groupFolderInfo != null) { folders.put(groupFolderInfo.getGroupId(), groupFolderInfo); } } return folders; }
/** * Creates a group folder. * * <p>Does not check if a folder already exists for the GitLab group. * * @param group the group * @throws ItemNameCollisionException if an item name for a new folder already was in use * @throws IOException if saving to persistent storage failed */ private void createFolder(GitLabGroupInfo group) throws ItemNameCollisionException, IOException { try { Folder folder = (Folder) itemGroup.createProject(folderDescriptor, group.getPath(), true); folder.addProperty(new GitLabFolderAuthorization(group.getId())); } catch (IllegalArgumentException e) { throw new ItemNameCollisionException( "Cannot create folder because an item with the name " + group.getPath() + " already exists"); } }
@Override public void cook(Recipe recipe, ImportReportList reportList) throws IOException { // expansion of this is deferred XStreamDOM actual = recipe.createImportOptions().apply(definition); ByteArrayOutputStream baos = new ByteArrayOutputStream(); XStreamDOM.ConverterImpl c = new ConverterImpl(); c.marshal(actual, new XppDriver().createWriter(baos), null); ModifiableTopLevelItemGroup g = Jenkins.getInstance(); TopLevelItem j = g.getItem(name); InputStream is = new ByteArrayInputStream(baos.toByteArray()); if (j == null) { j = g.createProjectFromXML(name, is); } else if (j instanceof AbstractItem) { Source source = new StreamSource(is); ((AbstractItem) j).updateByXml(source); } else { throw new IOException("Cannot update " + j + " in place"); } reportList.add(new ImportReportImpl(j)); }
private boolean createNewItem(String path, String config) { LOGGER.log(Level.FINE, format("Creating item as %s", config)); boolean created = false; try { InputStream is = new ByteArrayInputStream(config.getBytes("UTF-8")); ItemGroup parent = lookupStrategy.getParent(build.getProject(), path); String itemName = FilenameUtils.getName(path); if (parent instanceof ModifiableTopLevelItemGroup) { ((ModifiableTopLevelItemGroup) parent).createProjectFromXML(itemName, is); created = true; } else if (parent == null) { throw new DslException(format(Messages.CreateItem_UnknownParent(), path)); } else { LOGGER.log(Level.WARNING, format("Could not create item within %s", parent.getClass())); } } catch (UnsupportedEncodingException e) { LOGGER.log(Level.WARNING, "Unsupported encoding used in config. Should be UTF-8."); } catch (IOException e) { LOGGER.log(Level.WARNING, format("Error writing config for new item %s.", path), e); } return created; }