/******************************************************************************* * Copyright (c) 2010-2014 SAP AG and others. * 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: * SAP AG - initial API and implementation *******************************************************************************/ package org.eclipse.skalli.model.ext.maven; import static org.eclipse.skalli.model.ext.maven.MavenCoordinateUtil.*; import java.util.Random; import org.eclipse.skalli.model.ext.maven.internal.MavenPom; @SuppressWarnings("nls") public class MavenPomUtility { private static final char[] WHITESPACE = new char[] {' ', '\r', '\n', '\t'}; public static final String MODULE2 = "module2"; public static final String MODULE1 = "module1"; public static void beginXml(StringBuilder sb) { sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"); } public static void beginProject(StringBuilder sb) { sb.append("<project xmlns=\"http://maven.apache.org/POM/4.0.0\"><modelVersion>4.0.0</modelVersion>"); } public static void endProject(StringBuilder sb) { sb.append("</project>"); } public static void addParentTag(StringBuilder sb) { sb.append("<parent>"); append(sb, "groupId", PARENT_GROUPID); append(sb, "artifactId", PARENT_ARTIFACT); append(sb, "relativePath", PARENT_RELATIVE_PATH); sb.append("</parent>"); } public static void addCoordinatesWithGroupId(StringBuilder sb) { append(sb, "groupId", GROUPID); append(sb, "artifactId", ARTIFACT); append(sb, "packaging", PACKAGING); append(sb, "name", "name-", GROUPID, "-", ARTIFACT); append(sb, "description", "description-", GROUPID, "-", ARTIFACT); } public static void addCoordinatesWithoutGroupId(StringBuilder sb) { append(sb, "artifactId", ARTIFACT); append(sb, "packaging", PACKAGING); } public static void addModules(StringBuilder sb) { sb.append("<modules>"); append(sb, "module", MODULE1); append(sb, "module", MODULE2); sb.append("</modules>"); } public static MavenModule getCoordinatesWithGroupId() { MavenModule c = new MavenModule(GROUPID, ARTIFACT, PACKAGING); c.setName("name-" + GROUPID + "-" + ARTIFACT); c.setDescription("description-" + GROUPID + "-" + ARTIFACT); return c; } public static MavenModule getCoordinatesWithoutGroupId() { return new MavenModule(null, ARTIFACT, PACKAGING); } public static MavenModule getParentCoordinates() { return new MavenModule(PARENT_GROUPID, PARENT_ARTIFACT, null); } public static void addModules(MavenPom pom) { pom.getModuleTags().add(MODULE1); pom.getModuleTags().add(MODULE2); } public static String getPomWithParent() { StringBuilder testContent = new StringBuilder(); beginXml(testContent); beginProject(testContent); addParentTag(testContent); addCoordinatesWithoutGroupId(testContent); endProject(testContent); return testContent.toString(); } public static String getPomWithModules() { StringBuilder testContent = new StringBuilder(); beginXml(testContent); beginProject(testContent); addCoordinatesWithGroupId(testContent); addModules(testContent); endProject(testContent); return testContent.toString(); } public static String getPomNoParent() { StringBuilder testContent = new StringBuilder(); beginXml(testContent); beginProject(testContent); addCoordinatesWithGroupId(testContent); endProject(testContent); return testContent.toString(); } public static String getPomWithParentAndModules() { StringBuilder testContent = new StringBuilder(); beginXml(testContent); beginProject(testContent); addParentTag(testContent); addCoordinatesWithoutGroupId(testContent); addModules(testContent); endProject(testContent); return testContent.toString(); } public static String getPomWithWhitespace() { StringBuilder testContent = new StringBuilder(); beginXml(testContent); beginProject(testContent); addParentTag(testContent); addCoordinatesWithoutGroupId(testContent); addModules(testContent); endProject(testContent); return testContent.toString(); } public static String getPomForModule(String moduleName, String parentPath) { StringBuilder testContent = new StringBuilder(); beginXml(testContent); beginProject(testContent); testContent.append("<parent>"); append(testContent, "groupId", PARENT_GROUPID); append(testContent, "artifactId", PARENT_ARTIFACT); if (parentPath != null) { append(testContent, "relativePath", parentPath); } testContent.append("</parent>"); append(testContent, "artifactId", moduleName); append(testContent, "packaging", PACKAGING); endProject(testContent); return testContent.toString(); } private static void append(StringBuilder sb, String nodeName, String... values) { sb.append('<').append(nodeName).append('>'); appendRandomWhitespace(sb); if (values != null) { for (String value: values) { sb.append(value); } } appendRandomWhitespace(sb); sb.append("</").append(nodeName).append('>'); } private static void appendRandomWhitespace(StringBuilder sb) { Random rd = new Random(); int count = rd.nextInt(10); for (int i = 0; i < count; ++i) { sb.append(WHITESPACE[rd.nextInt(WHITESPACE.length-1)]); } } }