mirror of
https://github.com/Fishwaldo/rundeck-api-java-client.git
synced 2025-07-09 22:49:08 +00:00
add mappings for /projects and /project/NAME
This commit is contained in:
parent
4aab43d4ed
commit
1dfaa8555a
8 changed files with 242 additions and 0 deletions
|
@ -7,10 +7,13 @@ import org.apache.commons.lang.StringUtils;
|
||||||
import org.rundeck.api.RundeckApiException.RundeckApiLoginException;
|
import org.rundeck.api.RundeckApiException.RundeckApiLoginException;
|
||||||
import org.rundeck.api.domain.RundeckExecution;
|
import org.rundeck.api.domain.RundeckExecution;
|
||||||
import org.rundeck.api.domain.RundeckJob;
|
import org.rundeck.api.domain.RundeckJob;
|
||||||
|
import org.rundeck.api.domain.RundeckProject;
|
||||||
import org.rundeck.api.parser.ExecutionParser;
|
import org.rundeck.api.parser.ExecutionParser;
|
||||||
import org.rundeck.api.parser.ExecutionsParser;
|
import org.rundeck.api.parser.ExecutionsParser;
|
||||||
import org.rundeck.api.parser.JobParser;
|
import org.rundeck.api.parser.JobParser;
|
||||||
import org.rundeck.api.parser.JobsParser;
|
import org.rundeck.api.parser.JobsParser;
|
||||||
|
import org.rundeck.api.parser.ProjectParser;
|
||||||
|
import org.rundeck.api.parser.ProjectsParser;
|
||||||
import org.rundeck.api.util.ArgsUtil;
|
import org.rundeck.api.util.ArgsUtil;
|
||||||
import org.rundeck.api.util.AssertUtil;
|
import org.rundeck.api.util.AssertUtil;
|
||||||
|
|
||||||
|
@ -174,6 +177,32 @@ public class RundeckClient implements Serializable {
|
||||||
return new ApiCall(this).get(apiPath, new ExecutionParser("result/executions/execution"));
|
return new ApiCall(this).get(apiPath, new ExecutionParser("result/executions/execution"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List all projects
|
||||||
|
*
|
||||||
|
* @return a {@link List} of {@link RundeckProject} : might be empty, but won't be null
|
||||||
|
* @throws RundeckApiException in case of error when calling the API
|
||||||
|
* @throws RundeckApiLoginException if the login failed
|
||||||
|
*/
|
||||||
|
public List<RundeckProject> getProjects() throws RundeckApiException, RundeckApiLoginException {
|
||||||
|
return new ApiCall(this).get("/projects", new ProjectsParser("result/projects/project"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the definition of a single project, identified by the given name
|
||||||
|
*
|
||||||
|
* @param projectName name of the project - mandatory
|
||||||
|
* @return a {@link RundeckProject} instance
|
||||||
|
* @throws RundeckApiException in case of error when calling the API
|
||||||
|
* @throws RundeckApiLoginException if the login failed
|
||||||
|
* @throws IllegalArgumentException if the projectName is blank (null, empty or whitespace)
|
||||||
|
*/
|
||||||
|
public RundeckProject getProject(String projectName) throws RundeckApiException, RundeckApiLoginException,
|
||||||
|
IllegalArgumentException {
|
||||||
|
AssertUtil.notBlank(projectName, "projectName is mandatory to get the details of a project !");
|
||||||
|
return new ApiCall(this).get("/project/" + projectName, new ProjectParser("result/projects/project"));
|
||||||
|
}
|
||||||
|
|
||||||
public String getUrl() {
|
public String getUrl() {
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
70
src/main/java/org/rundeck/api/domain/RundeckProject.java
Normal file
70
src/main/java/org/rundeck/api/domain/RundeckProject.java
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
package org.rundeck.api.domain;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a RunDeck project
|
||||||
|
*
|
||||||
|
* @author Vincent Behar
|
||||||
|
*/
|
||||||
|
public class RundeckProject implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "RundeckProject [name=" + name + ", description=" + description + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + ((description == null) ? 0 : description.hashCode());
|
||||||
|
result = prime * result + ((name == null) ? 0 : name.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
RundeckProject other = (RundeckProject) obj;
|
||||||
|
if (description == null) {
|
||||||
|
if (other.description != null)
|
||||||
|
return false;
|
||||||
|
} else if (!description.equals(other.description))
|
||||||
|
return false;
|
||||||
|
if (name == null) {
|
||||||
|
if (other.name != null)
|
||||||
|
return false;
|
||||||
|
} else if (!name.equals(other.name))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
40
src/main/java/org/rundeck/api/parser/ProjectParser.java
Normal file
40
src/main/java/org/rundeck/api/parser/ProjectParser.java
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
package org.rundeck.api.parser;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.dom4j.Node;
|
||||||
|
import org.rundeck.api.domain.RundeckProject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parser for a single {@link RundeckProject}
|
||||||
|
*
|
||||||
|
* @author Vincent Behar
|
||||||
|
*/
|
||||||
|
public class ProjectParser implements NodeParser<RundeckProject> {
|
||||||
|
|
||||||
|
private String xpath;
|
||||||
|
|
||||||
|
public ProjectParser() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param xpath of the project element if it is not the root node
|
||||||
|
*/
|
||||||
|
public ProjectParser(String xpath) {
|
||||||
|
super();
|
||||||
|
this.xpath = xpath;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RundeckProject parseNode(Node node) {
|
||||||
|
Node projectNode = xpath != null ? node.selectSingleNode(xpath) : node;
|
||||||
|
|
||||||
|
RundeckProject project = new RundeckProject();
|
||||||
|
|
||||||
|
project.setName(StringUtils.trimToNull(projectNode.valueOf("name")));
|
||||||
|
project.setDescription(StringUtils.trimToNull(projectNode.valueOf("description")));
|
||||||
|
|
||||||
|
return project;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
40
src/main/java/org/rundeck/api/parser/ProjectsParser.java
Normal file
40
src/main/java/org/rundeck/api/parser/ProjectsParser.java
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
package org.rundeck.api.parser;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import org.dom4j.Node;
|
||||||
|
import org.rundeck.api.domain.RundeckProject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parser for a {@link List} of {@link RundeckProject}
|
||||||
|
*
|
||||||
|
* @author Vincent Behar
|
||||||
|
*/
|
||||||
|
public class ProjectsParser implements NodeParser<List<RundeckProject>> {
|
||||||
|
|
||||||
|
private final String xpath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param xpath of the projects elements
|
||||||
|
*/
|
||||||
|
public ProjectsParser(String xpath) {
|
||||||
|
super();
|
||||||
|
this.xpath = xpath;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<RundeckProject> parseNode(Node node) {
|
||||||
|
List<RundeckProject> projects = new ArrayList<RundeckProject>();
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
List<Node> projectNodes = node.selectNodes(xpath);
|
||||||
|
|
||||||
|
for (Node projectNode : projectNodes) {
|
||||||
|
RundeckProject project = new ProjectParser().parseNode(projectNode);
|
||||||
|
projects.add(project);
|
||||||
|
}
|
||||||
|
|
||||||
|
return projects;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
27
src/test/java/org/rundeck/api/parser/ProjectParserTest.java
Normal file
27
src/test/java/org/rundeck/api/parser/ProjectParserTest.java
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
package org.rundeck.api.parser;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import org.dom4j.Document;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.rundeck.api.domain.RundeckProject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the {@link ProjectParser}
|
||||||
|
*
|
||||||
|
* @author Vincent Behar
|
||||||
|
*/
|
||||||
|
public class ProjectParserTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void parseNode() throws Exception {
|
||||||
|
InputStream input = getClass().getResourceAsStream("project.xml");
|
||||||
|
Document document = ParserHelper.loadDocument(input);
|
||||||
|
|
||||||
|
RundeckProject project = new ProjectParser("result/projects/project").parseNode(document);
|
||||||
|
|
||||||
|
Assert.assertEquals("test", project.getName());
|
||||||
|
Assert.assertEquals("test project", project.getDescription());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
34
src/test/java/org/rundeck/api/parser/ProjectsParserTest.java
Normal file
34
src/test/java/org/rundeck/api/parser/ProjectsParserTest.java
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
package org.rundeck.api.parser;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.List;
|
||||||
|
import org.dom4j.Document;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.rundeck.api.domain.RundeckProject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the {@link ProjectsParser}
|
||||||
|
*
|
||||||
|
* @author Vincent Behar
|
||||||
|
*/
|
||||||
|
public class ProjectsParserTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void parseNode() throws Exception {
|
||||||
|
InputStream input = getClass().getResourceAsStream("projects.xml");
|
||||||
|
Document document = ParserHelper.loadDocument(input);
|
||||||
|
|
||||||
|
List<RundeckProject> projects = new ProjectsParser("result/projects/project").parseNode(document);
|
||||||
|
Assert.assertEquals(2, projects.size());
|
||||||
|
|
||||||
|
RundeckProject project1 = projects.get(0);
|
||||||
|
Assert.assertEquals("test", project1.getName());
|
||||||
|
Assert.assertEquals("test project", project1.getDescription());
|
||||||
|
|
||||||
|
RundeckProject project2 = projects.get(1);
|
||||||
|
Assert.assertEquals("other", project2.getName());
|
||||||
|
Assert.assertEquals(null, project2.getDescription());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
1
src/test/resources/org/rundeck/api/parser/project.xml
Normal file
1
src/test/resources/org/rundeck/api/parser/project.xml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<result success='true' apiversion='1'><projects count='1'><project><name>test</name><description>test project</description></project></projects></result>
|
1
src/test/resources/org/rundeck/api/parser/projects.xml
Normal file
1
src/test/resources/org/rundeck/api/parser/projects.xml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<result success='true' apiversion='1'><projects count='2'><project><name>test</name><description>test project</description></project><project><name>other</name><description></description></project></projects></result>
|
Loading…
Add table
Add a link
Reference in a new issue