Creation of an API in the admin console to create workspace and projects #151

This commit is contained in:
Nicolas Héron 2020-09-29 17:36:03 +02:00
commit 4515972023
27 changed files with 694 additions and 153 deletions

View file

@ -17,7 +17,7 @@
package org.chtijbug.guvnor.server.jaxrs.api;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectResponse;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@ -30,17 +30,17 @@ import java.util.List;
public class UserLoginInformation {
private List<PlatformProjectResponse> projects = new ArrayList<>();
private List<PlatformProjectData> projects = new ArrayList<>();
private String username;
private List<String> roles = new ArrayList<>();
public List<PlatformProjectResponse> getProjects() {
public List<PlatformProjectData> getProjects() {
return projects;
}
public void setProjects(List<PlatformProjectResponse> projects) {
public void setProjects(List<PlatformProjectData> projects) {
this.projects = projects;
}

View file

@ -0,0 +1,43 @@
package org.chtijbug.guvnor.server.jaxrs.model;
public class DependencyData {
private String groupId;
private String artifactId;
private String version;
public DependencyData() {
}
public DependencyData(String groupId, String artifactId, String version) {
this.groupId = groupId;
this.artifactId = artifactId;
this.version = version;
}
public String getGroupId() {
return groupId;
}
public void setGroupId(String groupId) {
this.groupId = groupId;
}
public String getArtifactId() {
return artifactId;
}
public void setArtifactId(String artifactId) {
this.artifactId = artifactId;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}

View file

@ -0,0 +1,27 @@
package org.chtijbug.guvnor.server.jaxrs.model;
public class KModuleData {
private String kbaseToInclude;
private String kbase;
public KModuleData() {
}
public String getKbaseToInclude() {
return kbaseToInclude;
}
public void setKbaseToInclude(String kbaseToInclude) {
this.kbaseToInclude = kbaseToInclude;
}
public String getKbase() {
return kbase;
}
public void setKbase(String kbase) {
this.kbase = kbase;
}
}

View file

@ -5,18 +5,33 @@ import org.guvnor.rest.client.ProjectResponse;
import java.util.ArrayList;
import java.util.List;
public class PlatformProjectResponse extends ProjectResponse {
public class PlatformProjectData extends ProjectResponse {
private String artifactId;
private String wbName;
private String branch;
private List<String> javaClasses = new ArrayList<>();
public PlatformProjectResponse() {
private List<DependencyData> dependencies = new ArrayList<>();
private KModuleData kModule;
public PlatformProjectData() {
super();
}
public String getWbName() {
return wbName;
}
public void setWbName(String wbName) {
this.wbName = wbName;
}
public List<String> getJavaClasses() {
return javaClasses;
}
@ -40,4 +55,20 @@ public class PlatformProjectResponse extends ProjectResponse {
public void setBranch(String branch) {
this.branch = branch;
}
public List<DependencyData> getDependencies() {
return dependencies;
}
public void setDependencies(List<DependencyData> dependencies) {
this.dependencies = dependencies;
}
public KModuleData getkModule() {
return kModule;
}
public void setkModule(KModuleData kModule) {
this.kModule = kModule;
}
}

View file

@ -4,8 +4,11 @@ package org.chtijbug.kie.rest.backend;
import org.chtijbug.guvnor.server.jaxrs.api.UserLoginInformation;
import org.chtijbug.guvnor.server.jaxrs.jaxb.Asset;
import org.chtijbug.guvnor.server.jaxrs.jaxb.Package;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectResponse;
import org.chtijbug.guvnor.server.jaxrs.model.DependencyData;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import org.chtijbug.kie.rest.backend.service.AssetService;
import org.guvnor.common.services.project.model.GAV;
import org.guvnor.common.services.project.model.POM;
import org.guvnor.common.services.project.model.WorkspaceProject;
import org.guvnor.common.services.project.service.WorkspaceProjectService;
import org.guvnor.structure.organizationalunit.OrganizationalUnit;
@ -88,7 +91,7 @@ public class PackageResource {
@Produces(MediaType.APPLICATION_JSON)
@Path("/detailedSpaces")
// @RolesAllowed({REST_ROLE, REST_PROJECT_ROLE})
public Collection<PlatformProjectResponse> getProjects() {
public Collection<PlatformProjectData> getProjects() {
logger.debug("-----getSpaces--- ");
return assetService.getAllProjects();
}
@ -348,4 +351,88 @@ public class PackageResource {
}
}
@PUT
@Path("{organizationalUnitName}/{projectName}/dependency")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN})
public Response updateProjectDependencies(@Context HttpHeaders headers,
@PathParam("organizationalUnitName") String organizationalUnitName,
@PathParam("projectName") String projectName, PlatformProjectData request) {
try {
WorkspaceProject project = assetService.getProject(organizationalUnitName, projectName);
List<DependencyData> toAdd = new ArrayList<>();
if (project != null) {
POM pom = project.getMainModule().getPom();
for (DependencyData dependencyData : request.getDependencies()) {
for (GAV element : pom.getDependencies().getGavs()) {
if (element.getGroupId().equals(dependencyData.getGroupId())
&& element.getArtifactId().equals(dependencyData.getArtifactId())
&& element.getVersion().equals(dependencyData.getVersion())) {
toAdd.add(dependencyData);
break;
}
}
}
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("\n");
for (DependencyData dependencyData : toAdd) {
stringBuilder.append("<dependency>").append("\n");
stringBuilder.append("\t").append("<groupId>").append(dependencyData.getGroupId()).append("</groupId>").append("\n");
stringBuilder.append("\t").append("<artifactId>").append(dependencyData.getArtifactId()).append("</artifactId>").append("\n");
stringBuilder.append("\t").append("<version>").append(dependencyData.getVersion()).append("</version>").append("\n");
stringBuilder.append("</dependency>").append("\n").append("\n");
}
stringBuilder.append("\n");
org.uberfire.backend.vfs.Path pomPath = project.getMainModule().getPomXMLPath();
org.uberfire.java.nio.file.Path nioPath = Paths.get(pomPath.toURI());
String pomContent = ioService.readAllString(nioPath);
int dependInt = pomContent.indexOf("/dependencies");
String newPomContent = pomContent.substring(0, dependInt - 1) + stringBuilder.toString() + pomContent.substring(dependInt-1, pomContent.length());
CommentedOption commentedOption = new CommentedOption("Added from rest");
ioService.write(nioPath, newPomContent.getBytes(), commentedOption);
if (request.getkModule()!= null ) {
String kbase="kbase";
if (request.getkModule().getKbase()!=null
&& !request.getkModule().getKbase().isEmpty()){
kbase=request.getkModule().getKbase();
}
String basePackage = pom.getGav().getGroupId() + "."+projectName.replace("-", "_");
org.uberfire.backend.vfs.Path rootPath = project.getRootPath();
org.uberfire.java.nio.file.Path nioRootPath = Paths.get(rootPath.toURI());
DirectoryStream<org.uberfire.java.nio.file.Path> directoryRootStream = ioService.newDirectoryStream(nioRootPath);
org.uberfire.java.nio.file.Path kmodulePath = assetService.findFileByName(directoryRootStream, "kmodule.xml");
String kmoduleContent = ioService.readAllString(kmodulePath);
/**
* <?xml version="1.0" encoding="UTF-8"?>
* <kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
* <kbase name="kbase-extension" packages="com.adeo.lys.rules" includes="kbase-base">
* <ksession name="session-extension" type="stateful" default="false" clockType="realtime"/>
* </kbase>
* </kmodule>
*/
StringBuilder kModuleBuilder = new StringBuilder();
kModuleBuilder.append("<kmodule xmlns=\"http://jboss.org/kie/6.0.0/kmodule\">").append("\n");
kModuleBuilder.append("\t").append("<kbase name=\"").append(kbase).append("\" default=\"true\" eventProcessingMode=\"stream\" equalsBehavior=\"identity\" packages=\"").append(basePackage).append("\" includes=\"").append(request.getkModule().getKbaseToInclude()).append("\">").append("\n");
kModuleBuilder.append("\t").append("\t").append(" <ksession name=\"session-extension\" type=\"stateful\" default=\"false\" clockType=\"realtime\"/>").append("\n");
kModuleBuilder.append("\t").append("</kbase>").append("\n");
kModuleBuilder.append("</kmodule>").append("\n");
kmoduleContent=kModuleBuilder.toString();
CommentedOption commentedOption2= new CommentedOption("Added from rest");
ioService.write(kmodulePath, kmoduleContent.getBytes(), commentedOption2);
logger.info("Kmodule updated");
}
return Response.status(Response.Status.CREATED).entity(request).build();
} else {
logger.info("Project {} or Organization {} not found ", projectName, organizationalUnitName);
return Response.status(Response.Status.NOT_FOUND).entity(request).build();
}
} catch (RuntimeException e) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e).build();
}
}
}

View file

@ -1,7 +1,7 @@
package org.chtijbug.kie.rest.backend.service;
import org.chtijbug.guvnor.server.jaxrs.jaxb.Asset;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectResponse;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import org.chtijbug.kie.rest.backend.RestTypeDefinition;
import org.guvnor.common.services.project.model.Module;
import org.guvnor.common.services.project.model.WorkspaceProject;
@ -62,8 +62,8 @@ public class AssetService {
@Inject
private WorkspaceProjectService workspaceProjectService;
public List<PlatformProjectResponse> getAllProjects() {
final List<PlatformProjectResponse> spaces = new ArrayList<>();
public List<PlatformProjectData> getAllProjects() {
final List<PlatformProjectData> spaces = new ArrayList<>();
for (OrganizationalUnit ou : organizationalUnitService.getOrganizationalUnits()) {
spaces.addAll(getSpace(ou));
}
@ -71,9 +71,9 @@ public class AssetService {
return spaces;
}
private List<PlatformProjectResponse> getSpace(OrganizationalUnit ou) {
private List<PlatformProjectData> getSpace(OrganizationalUnit ou) {
final List<PlatformProjectResponse> repoNames = new ArrayList<>();
final List<PlatformProjectData> repoNames = new ArrayList<>();
try {
for (WorkspaceProject workspaceProject : workspaceProjectService.getAllWorkspaceProjects(ou)) {
for (Branch branch : workspaceProject.getRepository().getBranches()) {
@ -89,11 +89,14 @@ public class AssetService {
private PlatformProjectResponse getProjectResponse(WorkspaceProject workspaceProject, Branch branch) {
final PlatformProjectResponse projectResponse = new PlatformProjectResponse();
private PlatformProjectData getProjectResponse(WorkspaceProject workspaceProject, Branch branch) {
final PlatformProjectData projectResponse = new PlatformProjectData();
projectResponse.setName(workspaceProject.getName());
projectResponse.setSpaceName(workspaceProject.getOrganizationalUnit().getName());
String wbName=System.getProperty("org.chtijbug.wbname");
if (wbName==null || wbName.length()==0)
wbName="demo";
projectResponse.setWbName(wbName);
if (workspaceProject.getMainModule() != null) {
Module kmodule = workspaceProject.getMainModule();
org.uberfire.backend.vfs.Path importVFPath = PathFactory.newPath("project.imports", branch.getPath().toURI() + "project.imports");
@ -220,6 +223,22 @@ public class AssetService {
}
return null;
}
public org.uberfire.java.nio.file.Path findFileByName(DirectoryStream<org.uberfire.java.nio.file.Path> directoryStream, String assetName) {
for (org.uberfire.java.nio.file.Path elementPath : directoryStream) {
if (org.uberfire.java.nio.file.Files.isDirectory(elementPath)) {
DirectoryStream<org.uberfire.java.nio.file.Path> adirectoryStream = ioService.newDirectoryStream(elementPath);
org.uberfire.java.nio.file.Path foundElementPath = findFileByName(adirectoryStream, assetName);
if (foundElementPath != null) {
return foundElementPath;
}
} else {
if (elementPath.getFileName().toString().contains(assetName)) {
return elementPath;
}
}
}
return null;
}
public org.uberfire.java.nio.file.Path getRuleDirectory(DirectoryStream<org.uberfire.java.nio.file.Path> directoryStream, String assetName) {
for (org.uberfire.java.nio.file.Path elementPath : directoryStream) {

View file

@ -3,7 +3,7 @@
# Start Wildfly with the given arguments.
echo "Running Drools Workbench on JBoss Wildfly..."
#export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,address=50505,suspend=y,server=y"
export JAVA_OPTS=" -Djava.net.preferIPv4Stack=true -Dorg.uberfire.metadata.index.dir=/home/lucene -Dorg.uberfire.nio.git.daemon.host=0.0.0.0 -Dorg.uberfire.nio.git.ssh.host=0.0.0.0 -Dorg.guvnor.m2repo.dir=/m2_kiewb/repository -DM2_HOME=/m2_kiewb/repository -Dorg.uberfire.nio.git.dir=/home/niodir -Dorg.uberfire.nio.git.dirname=gitBase -Dorg.appformer.m2repo.url=http://localhost:8080/kie-wb/maven2 -Dkie.maven.settings.custom=/m2_kiewb/settings.xml -Dfile.encoding=UTF-8 -Duser.language=fr -Duser.country=FR -Dorg.uberfire.ext.security.management.api.userManagementServices=PymmaKieSecurityService $PYMMA_OPTS"
export JAVA_OPTS=" -Dorg.kie.workbench.profile=PLANNER_AND_RULES -Djava.net.preferIPv4Stack=true -Dorg.uberfire.metadata.index.dir=/home/lucene -Dorg.uberfire.nio.git.daemon.host=0.0.0.0 -Dorg.uberfire.nio.git.ssh.host=0.0.0.0 -Dorg.guvnor.m2repo.dir=/m2_kiewb/repository -DM2_HOME=/m2_kiewb/repository -Dorg.uberfire.nio.git.dir=/home/niodir -Dorg.uberfire.nio.git.dirname=gitBase -Dorg.appformer.m2repo.url=http://localhost:8080/kie-wb/maven2 -Dkie.maven.settings.custom=/m2_kiewb/settings.xml -Dfile.encoding=UTF-8 -Duser.language=fr -Duser.country=FR -Dorg.uberfire.ext.security.management.api.userManagementServices=PymmaKieSecurityService $PYMMA_OPTS"
exec ./standalone.sh -b $JBOSS_BIND_ADDRESS -c $KIE_SERVER_PROFILE.xml
exit $?