
org.chtijbug.kie.rest.backend.PackageResource Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kie-drools-framework-rest-backend Show documentation
Show all versions of kie-drools-framework-rest-backend Show documentation
kie drools Framework - REST Backend
The newest version!
package org.chtijbug.kie.rest.backend;
import org.drools.guvnor.server.jaxrs.jaxb.Asset;
import org.drools.guvnor.server.jaxrs.jaxb.Package;
import org.guvnor.common.services.project.model.Project;
import org.guvnor.common.services.project.service.ProjectService;
import org.guvnor.structure.organizationalunit.OrganizationalUnit;
import org.guvnor.structure.organizationalunit.OrganizationalUnitService;
import org.guvnor.structure.repositories.Repository;
import org.guvnor.structure.repositories.RepositoryService;
import org.kie.workbench.common.services.shared.project.KieProjectService;
import org.slf4j.LoggerFactory;
import org.uberfire.backend.server.util.Paths;
import org.uberfire.io.IOService;
import org.uberfire.java.nio.base.options.CommentedOption;
import org.uberfire.java.nio.file.*;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.ws.rs.*;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.NoSuchFileException;
import java.util.*;
@Path("/packages")
@Named
@ApplicationScoped
public class PackageResource {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(PackageResource.class);
@Context
protected UriInfo uriInfo;
@Inject
@Named("ioStrategy")
private IOService ioService;
@Inject
private OrganizationalUnitService organizationalUnitService;
@Inject
private RepositoryService repositoryService;
@Inject
private ProjectService extends Project> projectService;
@Inject
private KieProjectService kieProjectService;
private RestTypeDefinition dotFileFilter = new RestTypeDefinition();
@GET
@Path("{organizationalUnitName}/{repositoryName}")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Collection getPackagesAsJAXB(@PathParam("organizationalUnitName") String organizationalUnitName, @PathParam("repositoryName") String repositoryName) {
OrganizationalUnit organizationalUnit = organizationalUnitService.getOrganizationalUnit(organizationalUnitName);
Collection repositories = organizationalUnit.getRepositories();
for (Repository repository : repositories) {
if (repository.getAlias().equals(repositoryName)) {
String branch = repository.getDefaultBranch();
Set projects = projectService.getProjects(repository, branch);
Collection packages = new ArrayList<>();
for (Project project : projects) {
Package aPackage = new Package();
aPackage.setTitle(project.getProjectName());
aPackage.setGroupID(project.getPom().getGav().getGroupId());
aPackage.setArtifactID(project.getPom().getGav().getArtifactId());
aPackage.setVersion(project.getPom().getGav().getVersion());
aPackage.getModules().addAll(project.getModules());
packages.add(aPackage);
}
return packages;
}
}
return null;
}
@GET
@Path("{organizationalUnitName}/{repositoryName}/{packageName}/assets")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Collection getAssetsAsJAXB(
@PathParam("organizationalUnitName") String organizationalUnitName, @PathParam("repositoryName") String repositoryName,
@PathParam("packageName") String packageName,
@QueryParam("format") List formats) {
try {
List contentList = new LinkedList<>();
Project project = getProject(organizationalUnitName, repositoryName, packageName);
if (project != null && project.getProjectName().equals(packageName)) {
org.uberfire.backend.vfs.Path rootPath = project.getRootPath();
org.uberfire.java.nio.file.Path goodRootPath = Paths.convert(rootPath);
DirectoryStream directoryStream = ioService.newDirectoryStream(goodRootPath);
getContent(directoryStream, contentList);
}
return contentList;
} catch (RuntimeException e) {
throw new WebApplicationException(e);
}
}
private Project getProject(String organizationalUnitName, String repositoryName, String packageName) {
OrganizationalUnit organizationalUnit = organizationalUnitService.getOrganizationalUnit(organizationalUnitName);
Collection repositories = organizationalUnit.getRepositories();
for (Repository repository : repositories) {
if (repository.getAlias().equals(repositoryName)) {
String branch = repository.getDefaultBranch();
Set projects = projectService.getProjects(repository, branch);
for (Project project : projects) {
if (project.getProjectName().equals(packageName)) {
return project;
}
}
}
}
return null;
}
private void getContentSource(DirectoryStream directoryStream, Asset asset,List pathLinkedList) {
for (org.uberfire.java.nio.file.Path elementPath : directoryStream) {
if (org.uberfire.java.nio.file.Files.isDirectory(elementPath)) {
DirectoryStream adirectoryStream = ioService.newDirectoryStream(elementPath);
getContentSource(adirectoryStream, asset,pathLinkedList);
} else {
if (dotFileFilter.accept(Paths.convert(elementPath))) {
Map listAttributes = ioService.readAttributes(elementPath);
if (asset.getTitle().equals(elementPath.getFileName().toString())){
pathLinkedList.add(elementPath);
}
}
}
}
}
private void getContent(DirectoryStream directoryStream, Collection contentList) {
for (org.uberfire.java.nio.file.Path elementPath : directoryStream) {
if (org.uberfire.java.nio.file.Files.isDirectory(elementPath)) {
DirectoryStream adirectoryStream = ioService.newDirectoryStream(elementPath);
getContent(adirectoryStream, contentList);
} else {
if (dotFileFilter.accept(Paths.convert(elementPath))) {
Map listAttributes = ioService.readAttributes(elementPath);
Asset asset = new Asset();
asset.setTitle(elementPath.getFileName().toString());
asset.setDirectory(elementPath.getParent().toString());
asset.setRefLink(elementPath.getFileName().toUri());
contentList.add(asset);
}
}
}
}
private org.uberfire.java.nio.file.Path getFileElementPath(DirectoryStream directoryStream, String assetName) {
for (org.uberfire.java.nio.file.Path elementPath : directoryStream) {
if (org.uberfire.java.nio.file.Files.isDirectory(elementPath)) {
DirectoryStream adirectoryStream = ioService.newDirectoryStream(elementPath);
org.uberfire.java.nio.file.Path foundElementPath = getFileElementPath(adirectoryStream, assetName);
if (foundElementPath != null) {
return foundElementPath;
}
} else {
if (dotFileFilter.accept(Paths.convert(elementPath))) {
return elementPath;
}
}
}
return null;
}
private org.uberfire.java.nio.file.Path getDirectoryElementPath(DirectoryStream directoryStream, String assetName) {
for (org.uberfire.java.nio.file.Path elementPath : directoryStream) {
if (org.uberfire.java.nio.file.Files.isDirectory(elementPath)) {
DirectoryStream adirectoryStream = ioService.newDirectoryStream(elementPath);
if (elementPath.getFileName().toString().equals(assetName)) {
return elementPath;
}
org.uberfire.java.nio.file.Path foundElementPath = getDirectoryElementPath(adirectoryStream, assetName);
if (foundElementPath != null) {
return foundElementPath;
}
}
}
return null;
}
@GET
@Path("{organizationalUnitName}/{repositoryName}/{packageName}/assets/{assetName}")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Collection getAssetAsJaxB(
@PathParam("organizationalUnitName") String organizationalUnitName, @PathParam("repositoryName") String repositoryName,
@PathParam("packageName") String packageName, @PathParam("assetName") String assetName) {
List resultList = new LinkedList<>();
try {
Project project = getProject(organizationalUnitName, repositoryName, packageName);
if (project != null && project.getProjectName().equals(packageName)) {
List contentList = new LinkedList<>();
org.uberfire.backend.vfs.Path rootPath = project.getRootPath();
org.uberfire.java.nio.file.Path goodRootPath = Paths.convert(rootPath);
DirectoryStream directoryStream = ioService.newDirectoryStream(goodRootPath);
getContent(directoryStream, contentList);
for (Asset asset : contentList) {
if (asset.getTitle().equals(assetName)) {
resultList.add(asset);
}
}
}
return resultList;
} catch (RuntimeException e) {
throw new WebApplicationException(e);
}
}
@GET
@Path("{organizationalUnitName}/{repositoryName}/{packageName}/assets/{assetName}/source")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public String getAssetSource(
@PathParam("organizationalUnitName") String organizationalUnitName, @PathParam("repositoryName") String repositoryName,
@PathParam("packageName") String packageName, @PathParam("assetName") String assetName) {
List resultList = new LinkedList<>();
String result="";
try {
Project project = getProject(organizationalUnitName, repositoryName, packageName);
if (project != null && project.getProjectName().equals(packageName)) {
List contentList = new LinkedList<>();
List pathLinkedList = new LinkedList<>();
org.uberfire.backend.vfs.Path rootPath = project.getRootPath();
org.uberfire.java.nio.file.Path goodRootPath = Paths.convert(rootPath);
DirectoryStream directoryStream = ioService.newDirectoryStream(goodRootPath);
getContent(directoryStream, contentList);
for (Asset asset : contentList) {
if (asset.getTitle().equals(assetName)) {
resultList.add(asset);
DirectoryStream directoryStream2 = ioService.newDirectoryStream(goodRootPath);
getContentSource(directoryStream2, asset,pathLinkedList);
if (pathLinkedList.size()==1) {
result = ioService.readAllString(pathLinkedList.get(0));
}
}
}
}
return result;
} catch (RuntimeException e) {
throw new WebApplicationException(e);
}
}
@PUT
@Path("{organizationalUnitName}/{repositoryName}/{packageName}/asset/{assetName}")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public void updateAssetFromJAXB(
@PathParam("organizationalUnitName") String organizationalUnitName, @PathParam("repositoryName") String repositoryName,
@PathParam("packageName") String packageName,
@PathParam("assetName") String assetName, Asset asset) {
try {
Project project = getProject(organizationalUnitName, repositoryName, packageName);
if (project != null && project.getProjectName().equals(packageName)) {
org.uberfire.backend.vfs.Path rootPath = project.getRootPath();
org.uberfire.java.nio.file.Path goodRootPath = Paths.convert(rootPath);
DirectoryStream directoryStream = ioService.newDirectoryStream(goodRootPath);
org.uberfire.java.nio.file.Path elementToUpdate = getFileElementPath(directoryStream, assetName);
//What To DO ?
}
} catch (RuntimeException e) {
throw new WebApplicationException(e);
}
}
@POST
@Path("{organizationalUnitName}/{repositoryName}/{packageName}/newAsset")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Asset createAssetFromSourceAndJAXB(
@PathParam("organizationalUnitName") String organizationalUnitName, @PathParam("repositoryName") String repositoryName,
@PathParam("packageName") String packageName, Asset asset) {
try {
Project project = getProject(organizationalUnitName, repositoryName, packageName);
org.uberfire.backend.vfs.Path rootPath = project.getRootPath();
org.uberfire.java.nio.file.Path goodRootPath = Paths.convert(rootPath);
DirectoryStream directoryStream = ioService.newDirectoryStream(goodRootPath);
org.uberfire.java.nio.file.Path directoryWhereCreateAsset = getDirectoryElementPath(directoryStream, asset.getTitle());
org.uberfire.backend.vfs.Path newDirectoryPath = Paths.convert(directoryWhereCreateAsset);
final org.uberfire.java.nio.file.Path nioPath = Paths.convert(newDirectoryPath).resolve(asset.getTitle());
if (ioService.exists(nioPath)) {
throw new FileAlreadyExistsException(nioPath.toString());
}
CommentedOption commentedOption = new CommentedOption(asset.getComment());
ioService.write(nioPath, asset.getContent().getBytes(), commentedOption);
} catch (Exception e) {
throw new WebApplicationException(e);
}
return null;
}
@PUT
@Path("{organizationalUnitName}/{repositoryName}/{packageName}/asset/{assetName}/source")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN})
@Produces({MediaType.WILDCARD})
public void updateAssetSource(
@PathParam("organizationalUnitName") String organizationalUnitName, @PathParam("repositoryName") String repositoryName,
@PathParam("packageName") String packageName, @PathParam("assetName") String assetName, String content) {
try {
Project project = getProject(organizationalUnitName, repositoryName, packageName);
org.uberfire.backend.vfs.Path rootPath = project.getRootPath();
org.uberfire.java.nio.file.Path goodRootPath = Paths.convert(rootPath);
DirectoryStream directoryStream = ioService.newDirectoryStream(goodRootPath);
org.uberfire.java.nio.file.Path directoryWhereCreateAsset = getDirectoryElementPath(directoryStream, assetName);
org.uberfire.backend.vfs.Path newDirectoryPath = Paths.convert(directoryWhereCreateAsset);
final org.uberfire.java.nio.file.Path nioPath = Paths.convert(newDirectoryPath).resolve(assetName);
if (ioService.exists(nioPath)) {
throw new NoSuchFileException(nioPath.toString());
}
ioService.write(nioPath, content.getBytes(), null);
} catch (Exception e) {
throw new WebApplicationException(e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy