expose rest API for Guided Rule template over admin console application

This commit is contained in:
nheron 2020-11-18 15:34:15 +01:00
commit 46ae8eb6dd
22 changed files with 1216 additions and 245 deletions

View file

@ -14,7 +14,7 @@ import org.apache.kafka.common.serialization.StringSerializer;
import org.chtijbug.drools.KieContainerResponse;
import org.chtijbug.drools.ReverseProxyUpdate;
import org.chtijbug.drools.common.KafkaTopicConstants;
import org.chtijbug.drools.console.middle.DababaseContentInit;
import org.chtijbug.drools.console.middle.DababaseContentUpdate;
import org.chtijbug.drools.console.service.model.kie.KieConfigurationData;
import org.chtijbug.drools.console.service.util.ApplicationContextProvider;
import org.chtijbug.drools.console.service.wbconnector.KieBusinessCentralConnector;
@ -92,7 +92,7 @@ public class DroolsSpringBootConsoleApplication extends SpringBootServletInitial
private String sslKeystoreType;
@Autowired
private DababaseContentInit dababaseContentInit;
private DababaseContentUpdate dababaseContentUpdate;
@Autowired
private KieBusinessCentralConnector kieBusinessCentralConnector;
@Autowired
@ -218,7 +218,7 @@ public class DroolsSpringBootConsoleApplication extends SpringBootServletInitial
@EventListener(ApplicationReadyEvent.class)
public void initPlatform(){
dababaseContentInit.initDatabaseIfNecessary();
dababaseContentUpdate.initDatabaseIfNecessary();
/**
for (KieWorkbench kieWorkbench: kieWorkbenchRepository.findAll()) {
Map<String, KieContainerResource> kies = new HashMap<>();
@ -275,7 +275,7 @@ public class DroolsSpringBootConsoleApplication extends SpringBootServletInitial
.select()
.apis(RequestHandlerSelectors.basePackage("org.chtijbug.drools.console.restexpose"))
//.paths(PathSelectors.regex("/api/wb./wb.*"))
.paths(PathSelectors.regex("/api/wb.*"))
.paths(PathSelectors.regex("/api.*"))
.build()
.pathMapping("/swagger");
}

View file

@ -1,155 +0,0 @@
package org.chtijbug.drools.console.middle;
import org.chtijbug.drools.console.service.KieRepositoryService;
import org.chtijbug.drools.console.service.ProjectPersistService;
import org.chtijbug.drools.console.service.model.UserConnected;
import org.chtijbug.drools.proxy.persistence.model.*;
import org.chtijbug.drools.proxy.persistence.repository.*;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.util.UUID;
@Service
public class DababaseContentInit {
@Value("${kie-wb.mainwbintern}")
private String mainwbUrlIntern;
@Value("${kie-wb.mainwbextern}")
private String mainwbExtern;
@Value("${kie-wb.baseurl}")
private String kiewbUrl;
@Autowired
private UserRepository userRepository;
@Autowired
private UserRolesRepository userRolesRepository;
@Autowired
private UserGroupsRepository userGroupsRepository;
@Autowired
private KieWorkbenchRepository kieWorkbenchRepository;
@Autowired
private CustomerRepository customerRepository;
@Autowired
private KieRepositoryService kieRepositoryService;
@Autowired
private ProjectPersistService projectPersistService;
public void initDatabaseIfNecessary() {
/**
* admin The administrator
* analyst The analyst
* developer The developer
* manager The manager
* user The end user
* kiemgmt KIE management user
*/
User adminUser = userRepository.findByLogin("admin");
if (adminUser == null) {
this.initDatabase();
}else{
this.synchronizeDatabaseWithWorkbenches();
}
}
private void initDatabase(){
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "process-admin"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "manager"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "admin"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "analyst"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "rest-all"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "developer"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "rest-project"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "user"));
userGroupsRepository.save(new UserGroups(UUID.randomUUID().toString(), "kiemgmt"));
userGroupsRepository.save(new UserGroups(UUID.randomUUID().toString(), "admingroup"));
userGroupsRepository.save(new UserGroups(UUID.randomUUID().toString(), "demogroup"));
User adminUser = new User(UUID.randomUUID().toString(), "admin", "adminadmin99#");
adminUser.getUserGroups().add(userGroupsRepository.findByName("kiemgmt"));
adminUser.getUserGroups().add(userGroupsRepository.findByName("admingroup"));
adminUser.getUserRoles().add(userRolesRepository.findByName("admin"));
adminUser.getUserRoles().add(userRolesRepository.findByName("analyst"));
adminUser.getUserRoles().add(userRolesRepository.findByName("rest-all"));
userRepository.save(adminUser);
User nheronUser = new User(UUID.randomUUID().toString(), "nheron", "adminnheron00@");
nheronUser.getUserGroups().add(userGroupsRepository.findByName("kiemgmt"));
nheronUser.getUserGroups().add(userGroupsRepository.findByName("admingroup"));
nheronUser.getUserRoles().add(userRolesRepository.findByName("admin"));
nheronUser.getUserRoles().add(userRolesRepository.findByName("analyst"));
nheronUser.getUserRoles().add(userRolesRepository.findByName("rest-all"));
userRepository.save(nheronUser);
KieWorkbench mainWorkbench = new KieWorkbench();
mainWorkbench.setID(UUID.randomUUID().toString());
mainWorkbench.setName("demo");
mainWorkbench.setExternalUrl(mainwbExtern);
mainWorkbench.setInternalUrl(mainwbUrlIntern);
mainWorkbench = kieWorkbenchRepository.save(mainWorkbench);
UserConnected userConnected = kieRepositoryService.getUserContent(mainWorkbench.getExternalUrl() + "/rest",
nheronUser.getLogin(), nheronUser.getPassword(), mainWorkbench.getName());
for (PlatformProjectData platformProjectData : userConnected.getProjectResponses()) {
String projectName = platformProjectData.getName();
String workspaceName = platformProjectData.getSpaceName();
ProjectPersist projectPersist=projectPersistService.saveorUpdateProject(platformProjectData, mainWorkbench);
UserGroups workspaceUserGroups=projectPersistService.createWorkSpaceGroupIfNeeded(workspaceName, mainWorkbench);
projectPersistService.createProjectGroupIfNeeded(projectName, mainWorkbench,projectPersist,workspaceUserGroups);
//platformProjectData.getJavaClasses()
}
Customer demCustomer = new Customer();
demCustomer.setKieWorkbench(mainWorkbench);
demCustomer.setName("demoCustomer");
demCustomer.setID(UUID.randomUUID().toString());
customerRepository.save(demCustomer);
User demoUser = new User(UUID.randomUUID().toString(), "demo", "demo");
demoUser.getUserGroups().add(userGroupsRepository.findByName("demogroup"));
demoUser.getUserRoles().add(userRolesRepository.findByName("user"));
demoUser.getUserRoles().add(userRolesRepository.findByName("rest-all"));
demoUser.getUserRoles().add(userRolesRepository.findByName("analyst"));
demoUser.setWbName(mainWorkbench.getName());
demoUser.setCustomer(demCustomer);
userRepository.save(demoUser);
}
@Scheduled(cron = "0 0 0/1 * * ?")
public void synchronizeDatabaseWithWorkbenches(){
for (KieWorkbench kieWorkbench : kieWorkbenchRepository.findAll()){
User nheronUser = userRepository.findByLogin("nheron");
UserConnected userConnected = kieRepositoryService.getUserContent(kieWorkbench.getExternalUrl() + "/rest",
nheronUser.getLogin(), nheronUser.getPassword(), kieWorkbench.getName());
for (PlatformProjectData platformProjectData : userConnected.getProjectResponses()) {
String projectName = platformProjectData.getName();
String workspaceName = platformProjectData.getSpaceName();
ProjectPersist projectPersist=projectPersistService.saveorUpdateProject(platformProjectData, kieWorkbench);
UserGroups workSpaceGroupIfNeeded = projectPersistService.createWorkSpaceGroupIfNeeded(workspaceName, kieWorkbench);
projectPersistService.createProjectGroupIfNeeded(projectName, kieWorkbench,projectPersist,workSpaceGroupIfNeeded);
}
}
}
}

View file

@ -0,0 +1,243 @@
package org.chtijbug.drools.console.middle;
import org.chtijbug.drools.console.dto.VariableData;
import org.chtijbug.drools.console.dto.VariableDefinition;
import org.chtijbug.drools.console.service.KieRepositoryService;
import org.chtijbug.drools.console.service.ProjectPersistService;
import org.chtijbug.drools.console.service.model.UserConnected;
import org.chtijbug.drools.proxy.persistence.model.*;
import org.chtijbug.drools.proxy.persistence.repository.*;
import org.chtijbug.guvnor.server.jaxrs.jaxb.Asset;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import org.drools.workbench.models.datamodel.rule.InterpolationVariable;
import org.drools.workbench.models.guided.template.backend.RuleTemplateModelXMLPersistenceImpl;
import org.drools.workbench.models.guided.template.shared.TemplateModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@Service
public class DababaseContentUpdate {
@Value("${kie-wb.mainwbintern}")
private String mainwbUrlIntern;
@Value("${kie-wb.mainwbextern}")
private String mainwbExtern;
@Value("${kie-wb.baseurl}")
private String kiewbUrl;
@Autowired
private UserRepository userRepository;
@Autowired
private UserRolesRepository userRolesRepository;
@Autowired
private UserGroupsRepository userGroupsRepository;
@Autowired
private KieWorkbenchRepository kieWorkbenchRepository;
@Autowired
private GuidedRulestemplateDefinitionRepository guidedRulestemplateDefinitionRepository;
@Autowired
private GuidedRulestemplateDataRepository guidedRulestemplateDataRepository;
@Autowired
private CustomerRepository customerRepository;
@Autowired
private KieRepositoryService kieRepositoryService;
@Autowired
private ProjectPersistService projectPersistService;
public void initDatabaseIfNecessary() {
/**
* admin The administrator
* analyst The analyst
* developer The developer
* manager The manager
* user The end user
* kiemgmt KIE management user
*/
User adminUser = userRepository.findByLogin("admin");
if (adminUser == null) {
this.initDatabase();
} else {
this.synchronizeDatabaseWithWorkbenches();
}
}
private void initDatabase() {
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "process-admin"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "manager"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "admin"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "analyst"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "rest-all"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "developer"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "rest-project"));
userRolesRepository.save(new UserRoles(UUID.randomUUID().toString(), "user"));
userGroupsRepository.save(new UserGroups(UUID.randomUUID().toString(), "kiemgmt"));
userGroupsRepository.save(new UserGroups(UUID.randomUUID().toString(), "admingroup"));
userGroupsRepository.save(new UserGroups(UUID.randomUUID().toString(), "demogroup"));
User adminUser = new User(UUID.randomUUID().toString(), "admin", "adminadmin99#");
adminUser.getUserGroups().add(userGroupsRepository.findByName("kiemgmt"));
adminUser.getUserGroups().add(userGroupsRepository.findByName("admingroup"));
adminUser.getUserRoles().add(userRolesRepository.findByName("admin"));
adminUser.getUserRoles().add(userRolesRepository.findByName("analyst"));
adminUser.getUserRoles().add(userRolesRepository.findByName("rest-all"));
userRepository.save(adminUser);
User nheronUser = new User(UUID.randomUUID().toString(), "nheron", "adminnheron00@");
nheronUser.getUserGroups().add(userGroupsRepository.findByName("kiemgmt"));
nheronUser.getUserGroups().add(userGroupsRepository.findByName("admingroup"));
nheronUser.getUserRoles().add(userRolesRepository.findByName("admin"));
nheronUser.getUserRoles().add(userRolesRepository.findByName("analyst"));
nheronUser.getUserRoles().add(userRolesRepository.findByName("rest-all"));
userRepository.save(nheronUser);
KieWorkbench mainWorkbench = new KieWorkbench();
mainWorkbench.setID(UUID.randomUUID().toString());
mainWorkbench.setName("demo");
mainWorkbench.setExternalUrl(mainwbExtern);
mainWorkbench.setInternalUrl(mainwbUrlIntern);
mainWorkbench = kieWorkbenchRepository.save(mainWorkbench);
UserConnected userConnected = kieRepositoryService.getUserContent(mainWorkbench.getExternalUrl() + "/rest",
nheronUser.getLogin(), nheronUser.getPassword(), mainWorkbench.getName());
for (PlatformProjectData platformProjectData : userConnected.getProjectResponses()) {
String projectName = platformProjectData.getName();
String workspaceName = platformProjectData.getSpaceName();
ProjectPersist projectPersist = projectPersistService.saveorUpdateProject(platformProjectData, mainWorkbench);
UserGroups workspaceUserGroups = projectPersistService.createWorkSpaceGroupIfNeeded(workspaceName, mainWorkbench);
projectPersistService.createProjectGroupIfNeeded(projectName, mainWorkbench, projectPersist, workspaceUserGroups);
//platformProjectData.getJavaClasses()
}
Customer demCustomer = new Customer();
demCustomer.setKieWorkbench(mainWorkbench);
demCustomer.setName("demoCustomer");
demCustomer.setID(UUID.randomUUID().toString());
customerRepository.save(demCustomer);
User demoUser = new User(UUID.randomUUID().toString(), "demo", "demo");
demoUser.getUserGroups().add(userGroupsRepository.findByName("demogroup"));
demoUser.getUserRoles().add(userRolesRepository.findByName("user"));
demoUser.getUserRoles().add(userRolesRepository.findByName("rest-all"));
demoUser.getUserRoles().add(userRolesRepository.findByName("analyst"));
demoUser.setWbName(mainWorkbench.getName());
demoUser.setCustomer(demCustomer);
userRepository.save(demoUser);
}
public void updateOrCreateLineGuidedRuleTemplate(UserGroups spaceGroup,UserGroups projectGroup,String assetName, GuidedRulesTemplateData guidedRulesTemplateData){
}
@Scheduled(cron = "0 0 0/1 * * ?")
public void synchronizeDatabaseWithWorkbenches() {
guidedRulestemplateDefinitionRepository.deleteAll();
guidedRulestemplateDataRepository.deleteAll();
for (KieWorkbench kieWorkbench : kieWorkbenchRepository.findAll()) {
User nheronUser = userRepository.findByLogin("nheron");
UserConnected userConnected = kieRepositoryService.getUserContent(kieWorkbench.getExternalUrl() + "/rest",
nheronUser.getLogin(), nheronUser.getPassword(), kieWorkbench.getName());
for (PlatformProjectData platformProjectData : userConnected.getProjectResponses()) {
String projectName = platformProjectData.getName();
String workspaceName = platformProjectData.getSpaceName();
ProjectPersist projectPersist = projectPersistService.saveorUpdateProject(platformProjectData, kieWorkbench);
UserGroups workSpaceGroupIfNeeded = projectPersistService.createWorkSpaceGroupIfNeeded(workspaceName, kieWorkbench);
UserGroups projectGroupIfNeeded = projectPersistService.createProjectGroupIfNeeded(projectName, kieWorkbench, projectPersist, workSpaceGroupIfNeeded);
List<Asset> assets = kieRepositoryService.getListAssets(kieWorkbench.getExternalUrl() + "/rest", nheronUser.getLogin(), nheronUser.getPassword(), workspaceName, projectName);
for (Asset asset : assets) {
if (asset.getTitle().contains(".template")) {
GuidedRulesTemplateDefinition guidedRulesTemplateDefinition = guidedRulestemplateDefinitionRepository.findByTemplateNameAndProjectGroup(asset.getTitle(), projectGroupIfNeeded);
if (guidedRulesTemplateDefinition == null) {
guidedRulesTemplateDefinition = new GuidedRulesTemplateDefinition();
guidedRulesTemplateDefinition.setTemplateName(asset.getTitle());
guidedRulesTemplateDefinition.setProjectGroup(projectGroupIfNeeded);
}
String assetSource = kieRepositoryService.getAssetSource(kieWorkbench.getExternalUrl() + "/rest", nheronUser.getLogin(), nheronUser.getPassword(), workspaceName, projectName, asset.getTitle());
TemplateModel model = RuleTemplateModelXMLPersistenceImpl.getInstance().unmarshal(assetSource);
guidedRulesTemplateDefinition.getVariables().clear();
for (InterpolationVariable interpolationVariable : model.getInterpolationVariablesList()) {
VariableDefinition variableDefinition = new VariableDefinition();
variableDefinition.setVarName(interpolationVariable.getVarName());
variableDefinition.setDataType(interpolationVariable.getDataType());
variableDefinition.setFactField(interpolationVariable.getFactField());
variableDefinition.setFactType(interpolationVariable.getFactType());
variableDefinition.setOperator(interpolationVariable.getOperator());
guidedRulesTemplateDefinition.getVariables().add(variableDefinition);
}
guidedRulesTemplateDefinition = guidedRulestemplateDefinitionRepository.save(guidedRulesTemplateDefinition);
Map<String, VariableDefinition> variableDefinitionMap = new HashMap<>();
for (VariableDefinition variableDefinition : guidedRulesTemplateDefinition.getVariables()) {
variableDefinitionMap.put(variableDefinition.getVarName(), variableDefinition);
}
Map<String, List<String>> dataTable = model.getTable();
int nbRows = model.getRowsCount();
for (int i = 0; i < nbRows; i++) {
GuidedRulesTemplateData guidedRulesTemplateData=guidedRulestemplateDataRepository.findByGuidedRulesTemplateDefinitionAndLineID(guidedRulesTemplateDefinition,String.valueOf(i));
String colid = dataTable.get(TemplateModel.ID_COLUMN_NAME).get(i);
if (guidedRulesTemplateData==null) {
guidedRulesTemplateData = new GuidedRulesTemplateData();
guidedRulesTemplateData.setGuidedRulesTemplateDefinition(guidedRulesTemplateDefinition);
guidedRulesTemplateData.setLineID(colid);
}
for (VariableDefinition variableDefinition : guidedRulesTemplateDefinition.getVariables()) {
String data = dataTable.get(variableDefinition.getVarName()).get(i);
VariableData variableData= new VariableData();
variableData.setVarName(variableDefinition.getVarName());
if ("String".equals(variableDefinition.getDataType())){
variableData.setStringValue(data);
}else if ("Long".equals(variableDefinition.getDataType())){
if (data!=null && data.length()>0) {
variableData.setLongValue(Long.parseLong(data));
}
}else if ("Double".equals(variableDefinition.getDataType())){
if (data!=null && data.length()>0) {
variableData.setDoubleValue(Double.parseDouble(data));
}
}else if ("BigDecimal".equals(variableDefinition.getDataType())){
if (data!=null && data.length()>0) {
variableData.setBigDecimalValue(BigDecimal.valueOf(Double.parseDouble(data)));
}
}
guidedRulesTemplateData.getRows().add(variableData);
}
guidedRulestemplateDataRepository.save(guidedRulesTemplateData);
}
}
}
}
}
}
}

View file

@ -1,27 +1,31 @@
package org.chtijbug.drools.console.restexpose;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.*;
import org.apache.commons.codec.binary.Base64;
import org.chtijbug.drools.console.dto.GuidedRuleTemplate;
import org.chtijbug.drools.console.dto.GuidedRuleTemplateDataRow;
import org.chtijbug.drools.console.dto.VariableData;
import org.chtijbug.drools.console.dto.VariableDefinition;
import org.chtijbug.drools.console.middle.DababaseContentUpdate;
import org.chtijbug.drools.console.service.IndexerService;
import org.chtijbug.drools.console.service.JobService;
import org.chtijbug.drools.console.service.KieRepositoryService;
import org.chtijbug.drools.console.service.ProjectPersistService;
import org.chtijbug.drools.proxy.persistence.model.KieWorkbench;
import org.chtijbug.drools.proxy.persistence.model.User;
import org.chtijbug.drools.proxy.persistence.model.UserGroups;
import org.chtijbug.drools.proxy.persistence.repository.KieWorkbenchRepository;
import org.chtijbug.drools.proxy.persistence.repository.UserGroupsRepository;
import org.chtijbug.drools.proxy.persistence.repository.UserRepository;
import org.chtijbug.drools.proxy.persistence.model.*;
import org.chtijbug.drools.proxy.persistence.repository.*;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import org.guvnor.rest.client.CreateProjectJobRequest;
import org.guvnor.rest.client.CreateProjectRequest;
import org.guvnor.rest.client.Space;
import org.drools.workbench.models.datamodel.rule.InterpolationVariable;
import org.drools.workbench.models.datamodel.rule.util.InterpolationVariableCollector;
import org.drools.workbench.models.datamodel.rule.visitors.RuleModelVisitor;
import org.drools.workbench.models.guided.template.backend.RuleTemplateModelXMLPersistenceImpl;
import org.drools.workbench.models.guided.template.shared.TemplateModel;
import org.guvnor.rest.client.SpaceRequest;
import org.kie.server.api.model.KieServerInfo;
import org.kie.soup.project.datamodel.oracle.DataType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.*;
@ -30,11 +34,15 @@ import org.springframework.web.client.RestTemplate;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Variant;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
import java.util.*;
import static org.drools.workbench.models.guided.template.shared.TemplateModel.ID_COLUMN_NAME;
@RestController
@RequestMapping("/api/wb")
@RequestMapping("/api/asset")
@Api("/api/asset")
public class AssetServiceExpose {
@Autowired
@ -53,108 +61,353 @@ public class AssetServiceExpose {
@Autowired
private UserRepository userRepository;
@Autowired
private GuidedRulestemplateDefinitionRepository guidedRulestemplateDefinitionRepository;
@Autowired
private GuidedRulestemplateDataRepository guidedRulestemplateDataRepository;
@Autowired
private UserRolesRepository userRolesRepository;
@Autowired
private JobService jobService;
@Autowired
private ProjectPersistService projectPersistService;
@PostMapping(value = "/spaces",
@Autowired
private KieRepositoryService kieRepositoryService;
@GetMapping(value = "/{spaceName}/{projectName}/grt/{templateName}/data",
consumes = {javax.ws.rs.core.MediaType.APPLICATION_JSON, javax.ws.rs.core.MediaType.APPLICATION_XML},
produces = {javax.ws.rs.core.MediaType.APPLICATION_JSON, javax.ws.rs.core.MediaType.APPLICATION_XML})
public Response createWorkSpace(@RequestBody PlatformProjectData request) {
String wbName = "demo";
if (request.getWbName() != null
&& !request.getWbName().isEmpty()) {
wbName = request.getWbName();
}
KieWorkbench kieWorkbench = kieWorkbenchRepository.findByName(wbName);
if (kieWorkbench == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Workbench not found").build();
}
String completeurl = kieWorkbench.getExternalUrl() + "/rest/spaces";
Space space = new Space();
space.setName(request.getSpaceName());
space.setDescription(request.getDescription());
space.setDefaultGroupId(request.getGroupId());
@ApiOperation(value = "Get Template dta", notes = "Sends back data of a guided rule template", response = GuidedRuleTemplate.class)
@ApiResponses({
@ApiResponse(code = 201, message = "Created", response = GuidedRuleTemplate.class)
})
public Response getTemplateData(@PathVariable("spaceName") String spaceName, @PathVariable("projectName") String projectName, @PathVariable("templateName") String templateName) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();
space.setOwner(authentication.getName());
User connectedUser = userRepository.findByLogin(currentPrincipalName);
ResponseEntity<SpaceRequest> response = restTemplateKiewb
.execute(completeurl, HttpMethod.POST, requestCallback(space, connectedUser.getLogin(), connectedUser.getPassword()), clientHttpResponse -> {
SpaceRequest extractedResponse = null;
if (clientHttpResponse.getBody() != null) {
Scanner s = new Scanner(clientHttpResponse.getBody()).useDelimiter("\\A");
String result = s.hasNext() ? s.next() : "";
extractedResponse = mapper.readValue(result, SpaceRequest.class);
UserGroups userGroupsSpace = userGroupsRepository.findBySpaceName(spaceName);
if (userGroupsSpace == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Space not found").build();
}
UserGroups userGroupsProject = userGroupsRepository.findByWorkspaceUserGroupAndProjectName(userGroupsSpace, projectName);
if (userGroupsProject == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Project not found").build();
}
if (!connectedUser.getUserRoles().contains(userRolesRepository.findByName("admin"))
&& !connectedUser.getUserGroups().contains(userGroupsSpace)
&& !connectedUser.getUserGroups().contains(userGroupsProject)) {
return Response.status(Response.Status.NOT_FOUND).entity("User not allowed to access workspace/project").build();
}
GuidedRulesTemplateDefinition guidedRulesTemplateDefinition = guidedRulestemplateDefinitionRepository.findByTemplateNameAndProjectGroup(templateName, userGroupsProject);
if (guidedRulesTemplateDefinition == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Guided rule template not found").build();
}
GuidedRuleTemplate guidedRuleTemplate = new GuidedRuleTemplate();
for (VariableDefinition elt : guidedRulesTemplateDefinition.getVariables()) {
guidedRuleTemplate.getDefinitionList().put(elt.getVarName(), elt.getDataType());
}
guidedRuleTemplate.setName(templateName);
guidedRuleTemplate.setSpaceName(spaceName);
guidedRuleTemplate.setProjectName(projectName);
if (userGroupsSpace.getKieWorkbench() != null) {
guidedRuleTemplate.setWorkbenchName(userGroupsSpace.getKieWorkbench().getName());
}
List<GuidedRulesTemplateData> guidedRulesTemplateDatas = guidedRulestemplateDataRepository.findByGuidedRulesTemplateDefinition(guidedRulesTemplateDefinition);
for (GuidedRulesTemplateData elt : guidedRulesTemplateDatas) {
GuidedRuleTemplateDataRow guidedRuleTemplateDataRow = new GuidedRuleTemplateDataRow();
guidedRuleTemplate.getRows().add(guidedRuleTemplateDataRow);
guidedRuleTemplateDataRow.setLineID(elt.getLineID());
for (VariableData elt2 : elt.getRows()) {
if (elt2.getVarName()!= null) {
if (elt2.getStringValue() != null) {
guidedRuleTemplateDataRow.getDataList().put(elt2.getVarName(), elt2.getStringValue());
} else if (elt2.getBigDecimalValue() != null) {
guidedRuleTemplateDataRow.getDataList().put(elt2.getVarName(), elt2.getBigDecimalValue());
} else if (elt2.getDoubleValue() != null) {
guidedRuleTemplateDataRow.getDataList().put(elt2.getVarName(), elt2.getDoubleValue());
} else if (elt2.getLongValue() != null) {
guidedRuleTemplateDataRow.getDataList().put(elt2.getVarName(), elt2.getLongValue());
}
return new ResponseEntity<>(extractedResponse, clientHttpResponse.getHeaders(), clientHttpResponse.getStatusCode());
});
projectPersistService.createWorkSpaceGroupIfNeeded(request.getSpaceName(),kieWorkbench);
jobService.executeWrite(kieWorkbench.getExternalUrl()+"/rest", connectedUser.getLogin(), connectedUser.getPassword(), null, response.getBody().getJobId(), null);
}
}
}
Variant variant = Variant.mediaTypes(javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE).add().build().get(0);
return Response.status(Response.Status.CREATED).entity(response.getBody()).variant(variant).build();
return Response.status(Response.Status.CREATED).entity(guidedRuleTemplate).variant(variant).build();
}
@PostMapping(value = "/spaces/{spaceName}/projects",
@PutMapping(value = "/{spaceName}/{projectName}/grt/{templateName}/data/{lineID}",
consumes = {javax.ws.rs.core.MediaType.APPLICATION_JSON, javax.ws.rs.core.MediaType.APPLICATION_XML},
produces = {javax.ws.rs.core.MediaType.APPLICATION_JSON, javax.ws.rs.core.MediaType.APPLICATION_XML})
public Response createProject(@PathVariable("spaceName") String spaceName,@RequestBody PlatformProjectData request) {
String wbName = "demo";
if (request.getWbName() != null
&& !request.getWbName().isEmpty()) {
wbName = request.getWbName();
}
KieWorkbench kieWorkbench = kieWorkbenchRepository.findByName(wbName);
if (kieWorkbench == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Workbench not found").build();
}
String completeurl = kieWorkbench.getExternalUrl() + "/rest/spaces/"+spaceName+"/projects";
CreateProjectRequest projectRequest = new CreateProjectRequest();
projectRequest.setName(request.getName());
projectRequest.setGroupId(request.getGroupId());
projectRequest.setVersion(request.getVersion());
projectRequest.setDescription(request.getDescription());
@ApiOperation(value = "update Template dta row", notes = "updates row of a guided rule template", response = GuidedRuleTemplateDataRow.class)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GuidedRuleTemplateDataRow.class)
})
public Response updateTemplateData(@PathVariable("spaceName") String spaceName, @PathVariable("projectName") String projectName,
@PathVariable("templateName") String templateName, @PathVariable("lineID") String lineID,
@RequestBody GuidedRuleTemplateDataRow updatedRow) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();
User connectedUser = userRepository.findByLogin(currentPrincipalName);
ResponseEntity<CreateProjectJobRequest> response = restTemplateKiewb
.execute(completeurl, HttpMethod.POST, requestCallback(projectRequest, connectedUser.getLogin(), connectedUser.getPassword()), clientHttpResponse -> {
CreateProjectJobRequest extractedResponse = null;
if (clientHttpResponse.getBody() != null) {
Scanner s = new Scanner(clientHttpResponse.getBody()).useDelimiter("\\A");
String result = s.hasNext() ? s.next() : "";
extractedResponse = mapper.readValue(result, CreateProjectJobRequest.class);
UserGroups userGroupsSpace = userGroupsRepository.findBySpaceName(spaceName);
if (userGroupsSpace == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Space not found").build();
}
UserGroups userGroupsProject = userGroupsRepository.findByWorkspaceUserGroupAndProjectName(userGroupsSpace, projectName);
if (userGroupsProject == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Project not found").build();
}
if (!connectedUser.getUserRoles().contains(userRolesRepository.findByName("admin"))
&& !connectedUser.getUserGroups().contains(userGroupsSpace)
&& !connectedUser.getUserGroups().contains(userGroupsProject)) {
return Response.status(Response.Status.NOT_FOUND).entity("User not allowed to access workspace/project").build();
}
GuidedRulesTemplateDefinition guidedRulesTemplateDefinition = guidedRulestemplateDefinitionRepository.findByTemplateNameAndProjectGroup(templateName, userGroupsProject);
if (guidedRulesTemplateDefinition == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Guided rule template not found").build();
}
if (updatedRow == null) {
return Response.status(Response.Status.NO_CONTENT).entity("No data ").build();
}
GuidedRulesTemplateData guidedRulesTemplateData = guidedRulestemplateDataRepository.findByGuidedRulesTemplateDefinitionAndLineID(guidedRulesTemplateDefinition, lineID);
if (guidedRulesTemplateData == null) {
return Response.status(Response.Status.NO_CONTENT).entity("Line ID not existing ").build();
}
Map<String, VariableDefinition> defData = new HashMap<>();
for (VariableDefinition dataDefinition : guidedRulesTemplateDefinition.getVariables()) {
defData.put(dataDefinition.getVarName(), dataDefinition);
}
String assetSource = kieRepositoryService.getAssetSource(userGroupsSpace.getKieWorkbench().getExternalUrl() + "/rest", connectedUser.getLogin(), connectedUser.getPassword(), spaceName, projectName, templateName);
TemplateModel model = RuleTemplateModelXMLPersistenceImpl.getInstance().unmarshal(assetSource);
Object[] indexes = model.getTable().get(ID_COLUMN_NAME).toArray();
int foundIndex=0;
boolean found=false;
for (Object o : indexes){
if (o.equals(lineID)){
found=true;
break;
}
foundIndex++;
}
if (found) {
Map<InterpolationVariable, Integer> variableIntegerMap = this.getInterpolationVariables(model);
String[] rowContent = new String[variableIntegerMap.size() - 1];
for (Map.Entry<InterpolationVariable, Integer> entry : variableIntegerMap.entrySet()) {
if (!entry.getKey().getVarName().equals(ID_COLUMN_NAME)) {
Object data = updatedRow.getDataList().get(entry.getKey().getVarName());
if (data != null) {
model.setValue(entry.getKey().getVarName(), foundIndex, data.toString());
} else {
model.setValue(entry.getKey().getVarName(), foundIndex, "");
}
return new ResponseEntity<>(extractedResponse, clientHttpResponse.getHeaders(), clientHttpResponse.getStatusCode());
});
jobService.executeWrite(kieWorkbench.getExternalUrl()+"/rest", connectedUser.getLogin(), connectedUser.getPassword(), null, response.getBody().getJobId(), null);
}
}
completeurl = kieWorkbench.getExternalUrl() + "/rest/chtijbug/"+spaceName+"/"+projectRequest.getName()+"/dependency";
ResponseEntity<PlatformProjectData> response2 = restTemplateKiewb
.execute(completeurl, HttpMethod.PUT, requestCallback(request, connectedUser.getLogin(), connectedUser.getPassword()), clientHttpResponse -> {
PlatformProjectData extractedResponse = null;
if (clientHttpResponse.getBody() != null) {
Scanner s = new Scanner(clientHttpResponse.getBody()).useDelimiter("\\A");
String result = s.hasNext() ? s.next() : "";
extractedResponse = mapper.readValue(result, PlatformProjectData.class);
String newAssetSource=RuleTemplateModelXMLPersistenceImpl.getInstance().marshal(model);
kieRepositoryService.updateAssetSource(userGroupsSpace.getKieWorkbench().getExternalUrl() + "/rest", connectedUser.getLogin(), connectedUser.getPassword(), spaceName, projectName, templateName,newAssetSource);
Enumeration e = updatedRow.getDataList().keys();
while (e.hasMoreElements()) {
String variableName = (String) e.nextElement();
Object variableData = updatedRow.getDataList().get(variableName);
for (VariableData variableData1 : guidedRulesTemplateData.getRows()) {
VariableDefinition dataDefinition = defData.get(variableData1.getVarName());
if (dataDefinition.getVarName().equals(variableName)) {
if ("String".equals(dataDefinition.getDataType())) {
variableData1.setStringValue((String) variableData);
} else if ("Long".equals(dataDefinition.getDataType())) {
if (variableData != null) {
Long ll = (Long) variableData;
variableData1.setLongValue(ll);
}
} else if ("Double".equals(dataDefinition.getDataType())) {
if (variableData != null) {
Double dd = (Double) variableData;
variableData1.setDoubleValue(dd);
}
} else if ("BigDecimal".equals(dataDefinition.getDataType())) {
if (variableData != null) {
BigDecimal bg = (BigDecimal) variableData;
variableData1.setBigDecimalValue(bg);
}
}
}
return new ResponseEntity<>(extractedResponse, clientHttpResponse.getHeaders(), clientHttpResponse.getStatusCode());
});
}
}
guidedRulestemplateDataRepository.save(guidedRulesTemplateData);
Variant variant = Variant.mediaTypes(javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE).add().build().get(0);
return Response.status(Response.Status.OK).entity(updatedRow).variant(variant).build();
}else{
Variant variant = Variant.mediaTypes(javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE).add().build().get(0);
return Response.status(Response.Status.NOT_FOUND).entity(updatedRow).variant(variant).build();
}
}
@PostMapping(value = "/{spaceName}/{projectName}/grt/{templateName}/data",
consumes = {javax.ws.rs.core.MediaType.APPLICATION_JSON, javax.ws.rs.core.MediaType.APPLICATION_XML},
produces = {javax.ws.rs.core.MediaType.APPLICATION_JSON, javax.ws.rs.core.MediaType.APPLICATION_XML})
@ApiOperation(value = "create Template dta row", notes = "creates row of a guided rule template", response = GuidedRuleTemplateDataRow.class)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GuidedRuleTemplateDataRow.class)
})
public Response createTemplateData(@PathVariable("spaceName") String spaceName, @PathVariable("projectName") String projectName,
@PathVariable("templateName") String templateName,
@RequestBody GuidedRuleTemplateDataRow updatedRow) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();
User connectedUser = userRepository.findByLogin(currentPrincipalName);
UserGroups userGroupsSpace = userGroupsRepository.findBySpaceName(spaceName);
if (userGroupsSpace == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Space not found").build();
}
UserGroups userGroupsProject = userGroupsRepository.findByWorkspaceUserGroupAndProjectName(userGroupsSpace, projectName);
if (userGroupsProject == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Project not found").build();
}
if (!connectedUser.getUserRoles().contains(userRolesRepository.findByName("admin"))
&& !connectedUser.getUserGroups().contains(userGroupsSpace)
&& !connectedUser.getUserGroups().contains(userGroupsProject)) {
return Response.status(Response.Status.NOT_FOUND).entity("User not allowed to access workspace/project").build();
}
GuidedRulesTemplateDefinition guidedRulesTemplateDefinition = guidedRulestemplateDefinitionRepository.findByTemplateNameAndProjectGroup(templateName, userGroupsProject);
if (guidedRulesTemplateDefinition == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Guided rule template not found").build();
}
if (updatedRow == null) {
return Response.status(Response.Status.NO_CONTENT).entity("No data ").build();
}
GuidedRulesTemplateData guidedRulesTemplateData = new GuidedRulesTemplateData();
guidedRulesTemplateData.setGuidedRulesTemplateDefinition(guidedRulesTemplateDefinition);
Map<String, VariableDefinition> defData = new HashMap<>();
for (VariableDefinition dataDefinition : guidedRulesTemplateDefinition.getVariables()) {
defData.put(dataDefinition.getVarName(), dataDefinition);
}
String assetSource = kieRepositoryService.getAssetSource(userGroupsSpace.getKieWorkbench().getExternalUrl() + "/rest", connectedUser.getLogin(), connectedUser.getPassword(), spaceName, projectName, templateName);
TemplateModel model = RuleTemplateModelXMLPersistenceImpl.getInstance().unmarshal(assetSource);
Map<InterpolationVariable, Integer> variableIntegerMap = this.getInterpolationVariables(model);
String[] rowContent = new String[variableIntegerMap.size()-1];
for (Map.Entry<InterpolationVariable, Integer> entry : variableIntegerMap.entrySet()){
if (!entry.getKey().getVarName().equals(ID_COLUMN_NAME)) {
Object data = updatedRow.getDataList().get(entry.getKey().getVarName());
if (data != null) {
rowContent[entry.getValue()] = data.toString();
} else {
rowContent[entry.getValue()] = "";
}
}
}
String lineID = model.addRow(rowContent);
guidedRulesTemplateData.setLineID(lineID);
String newAssetSource=RuleTemplateModelXMLPersistenceImpl.getInstance().marshal(model);
kieRepositoryService.updateAssetSource(userGroupsSpace.getKieWorkbench().getExternalUrl() + "/rest", connectedUser.getLogin(), connectedUser.getPassword(), spaceName, projectName, templateName,newAssetSource);
Enumeration e = updatedRow.getDataList().keys();
while (e.hasMoreElements()) {
String variableName = (String) e.nextElement();
Object variableData = updatedRow.getDataList().get(variableName);
VariableData variableData1 = new VariableData();
guidedRulesTemplateData.getRows().add(variableData1);
variableData1.setVarName(variableName);
VariableDefinition dataDefinition = defData.get(variableName);
if (dataDefinition!= null
&& dataDefinition.getVarName().equals(variableName)) {
if ("String".equals(dataDefinition.getDataType())) {
variableData1.setStringValue((String) variableData);
} else if ("Long".equals(dataDefinition.getDataType())) {
if (variableData != null) {
Long ll = (Long) variableData;
variableData1.setLongValue(ll);
}
} else if ("Double".equals(dataDefinition.getDataType())) {
if (variableData != null) {
Double dd = (Double) variableData;
variableData1.setDoubleValue(dd);
}
} else if ("BigDecimal".equals(dataDefinition.getDataType())) {
if (variableData != null) {
BigDecimal bg = (BigDecimal) variableData;
variableData1.setBigDecimalValue(bg);
}
}
}
}
guidedRulestemplateDataRepository.save(guidedRulesTemplateData);
Variant variant = Variant.mediaTypes(javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE).add().build().get(0);
UserGroups workspaceUsergroup = userGroupsRepository.findByName("wrk_" + spaceName);
projectPersistService.createProjectGroupIfNeeded(request.getName(),kieWorkbench,null,workspaceUsergroup);
return Response.status(Response.Status.CREATED).entity(response2.getBody()).variant(variant).build();
updatedRow.setLineID(lineID);
return Response.status(Response.Status.OK).entity(updatedRow).variant(variant).build();
}
@DeleteMapping(value = "/{spaceName}/{projectName}/grt/{templateName}/data/{lineID}",
consumes = {javax.ws.rs.core.MediaType.APPLICATION_JSON, javax.ws.rs.core.MediaType.APPLICATION_XML},
produces = {javax.ws.rs.core.MediaType.APPLICATION_JSON, javax.ws.rs.core.MediaType.APPLICATION_XML})
@ApiOperation(value = "delete Template dta row", notes = "deletes row of a guided rule template", response = GuidedRuleTemplateDataRow.class)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = Response.class)
})
public Response deleteemplateData(@PathVariable("spaceName") String spaceName, @PathVariable("projectName") String projectName,
@PathVariable("templateName") String templateName, @PathVariable("lineID") String lineID) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();
User connectedUser = userRepository.findByLogin(currentPrincipalName);
UserGroups userGroupsSpace = userGroupsRepository.findBySpaceName(spaceName);
if (userGroupsSpace == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Space not found").build();
}
UserGroups userGroupsProject = userGroupsRepository.findByWorkspaceUserGroupAndProjectName(userGroupsSpace, projectName);
if (userGroupsProject == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Project not found").build();
}
if (!connectedUser.getUserRoles().contains(userRolesRepository.findByName("admin"))
&& !connectedUser.getUserGroups().contains(userGroupsSpace)
&& !connectedUser.getUserGroups().contains(userGroupsProject)) {
return Response.status(Response.Status.NOT_FOUND).entity("User not allowed to access workspace/project").build();
}
GuidedRulesTemplateDefinition guidedRulesTemplateDefinition = guidedRulestemplateDefinitionRepository.findByTemplateNameAndProjectGroup(templateName, userGroupsProject);
if (guidedRulesTemplateDefinition == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Guided rule template not found").build();
}
GuidedRulesTemplateData guidedRulesTemplateData = guidedRulestemplateDataRepository.findByGuidedRulesTemplateDefinitionAndLineID(guidedRulesTemplateDefinition, lineID);
if (guidedRulesTemplateData == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Line ID not existing ").build();
}
String assetSource = kieRepositoryService.getAssetSource(userGroupsSpace.getKieWorkbench().getExternalUrl() + "/rest", connectedUser.getLogin(), connectedUser.getPassword(), spaceName, projectName, templateName);
TemplateModel model = RuleTemplateModelXMLPersistenceImpl.getInstance().unmarshal(assetSource);
model.removeRowById(lineID);
String newAssetSource=RuleTemplateModelXMLPersistenceImpl.getInstance().marshal(model);
kieRepositoryService.updateAssetSource(userGroupsSpace.getKieWorkbench().getExternalUrl() + "/rest", connectedUser.getLogin(), connectedUser.getPassword(), spaceName, projectName, templateName,newAssetSource);
guidedRulestemplateDataRepository.delete(guidedRulesTemplateData);
Variant variant = Variant.mediaTypes(javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE).add().build().get(0);
return Response.status(Response.Status.OK).variant(variant).build();
}
private RequestCallback requestCallback(final Object content, String username, String password) {
return clientHttpRequest -> {
@ -180,5 +433,18 @@ public class AssetServiceExpose {
HttpHeaders.AUTHORIZATION, authHeader);
};
}
private Map<InterpolationVariable, Integer> getInterpolationVariables(TemplateModel templateModel) {
final Map<InterpolationVariable, Integer> variables = new HashMap<InterpolationVariable, Integer>();
new RuleModelVisitor(variables).visit(templateModel);
final Map<InterpolationVariable, Integer> result = new InterpolationVariableCollector(variables).getMap();
InterpolationVariable id = new InterpolationVariable(ID_COLUMN_NAME,
DataType.TYPE_NUMERIC_LONG);
result.put(id,
result.size());
return result;
}
}

View file

@ -1,5 +1,6 @@
package org.chtijbug.drools.console.restexpose;
import io.swagger.annotations.Api;
import org.chtijbug.drools.console.service.IndexerService;
import org.chtijbug.drools.proxy.persistence.model.BusinessTransactionAction;
import org.chtijbug.drools.proxy.persistence.model.BusinessTransactionPersistence;
@ -13,7 +14,8 @@ import javax.servlet.http.HttpServletResponse;
import java.util.List;
@RestController
@RequestMapping("/api/elasticSearch")
@RequestMapping("/api/logging")
@Api("/api/logging")
public class ElasticSearchExpose {
@Autowired

View file

@ -0,0 +1,194 @@
package org.chtijbug.drools.console.restexpose;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import org.apache.commons.codec.binary.Base64;
import org.chtijbug.drools.console.service.IndexerService;
import org.chtijbug.drools.console.service.JobService;
import org.chtijbug.drools.console.service.ProjectPersistService;
import org.chtijbug.drools.proxy.persistence.model.KieWorkbench;
import org.chtijbug.drools.proxy.persistence.model.User;
import org.chtijbug.drools.proxy.persistence.model.UserGroups;
import org.chtijbug.drools.proxy.persistence.repository.KieWorkbenchRepository;
import org.chtijbug.drools.proxy.persistence.repository.UserGroupsRepository;
import org.chtijbug.drools.proxy.persistence.repository.UserRepository;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import org.guvnor.rest.client.CreateProjectJobRequest;
import org.guvnor.rest.client.CreateProjectRequest;
import org.guvnor.rest.client.Space;
import org.guvnor.rest.client.SpaceRequest;
import org.kie.server.api.model.KieServerInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RequestCallback;
import org.springframework.web.client.RestTemplate;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Variant;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
@RestController
@RequestMapping("/api/wb")
@Api("/api/wb")
public class ProjectWorkspaceServiceExpose {
@Autowired
private IndexerService indexerService;
private RestTemplate restTemplateKiewb = new RestTemplate();
private ObjectMapper mapper = new ObjectMapper();
@Autowired
private KieWorkbenchRepository kieWorkbenchRepository;
@Autowired
private UserGroupsRepository userGroupsRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private JobService jobService;
@Autowired
private ProjectPersistService projectPersistService;
@PostMapping(value = "/spaces",
consumes = {javax.ws.rs.core.MediaType.APPLICATION_JSON, javax.ws.rs.core.MediaType.APPLICATION_XML},
produces = {javax.ws.rs.core.MediaType.APPLICATION_JSON, javax.ws.rs.core.MediaType.APPLICATION_XML})
@ApiOperation(value = "Create Workspace", notes = "Creating a workspace in specified workbench name in body", response = SpaceRequest.class)
@ApiResponses({
@ApiResponse(code = 201, message = "Created", response = SpaceRequest.class)
})
public Response createWorkSpace(@RequestBody PlatformProjectData request) {
String wbName = "demo";
if (request.getWbName() != null
&& !request.getWbName().isEmpty()) {
wbName = request.getWbName();
}
KieWorkbench kieWorkbench = kieWorkbenchRepository.findByName(wbName);
if (kieWorkbench == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Workbench not found").build();
}
String completeurl = kieWorkbench.getExternalUrl() + "/rest/spaces";
Space space = new Space();
space.setName(request.getSpaceName());
space.setDescription(request.getDescription());
space.setDefaultGroupId(request.getGroupId());
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();
space.setOwner(authentication.getName());
User connectedUser = userRepository.findByLogin(currentPrincipalName);
ResponseEntity<SpaceRequest> response = restTemplateKiewb
.execute(completeurl, HttpMethod.POST, requestCallback(space, connectedUser.getLogin(), connectedUser.getPassword()), clientHttpResponse -> {
SpaceRequest extractedResponse = null;
if (clientHttpResponse.getBody() != null) {
Scanner s = new Scanner(clientHttpResponse.getBody()).useDelimiter("\\A");
String result = s.hasNext() ? s.next() : "";
extractedResponse = mapper.readValue(result, SpaceRequest.class);
}
return new ResponseEntity<>(extractedResponse, clientHttpResponse.getHeaders(), clientHttpResponse.getStatusCode());
});
projectPersistService.createWorkSpaceGroupIfNeeded(request.getSpaceName(),kieWorkbench);
jobService.executeWrite(kieWorkbench.getExternalUrl()+"/rest", connectedUser.getLogin(), connectedUser.getPassword(), null, response.getBody().getJobId(), null);
Variant variant = Variant.mediaTypes(javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE).add().build().get(0);
return Response.status(Response.Status.CREATED).entity(response.getBody()).variant(variant).build();
}
@PostMapping(value = "/spaces/{spaceName}/projects",
consumes = {javax.ws.rs.core.MediaType.APPLICATION_JSON, javax.ws.rs.core.MediaType.APPLICATION_XML},
produces = {javax.ws.rs.core.MediaType.APPLICATION_JSON, javax.ws.rs.core.MediaType.APPLICATION_XML})
public Response createProject(@PathVariable("spaceName") String spaceName,@RequestBody PlatformProjectData request) {
String wbName = "demo";
if (request.getWbName() != null
&& !request.getWbName().isEmpty()) {
wbName = request.getWbName();
}
KieWorkbench kieWorkbench = kieWorkbenchRepository.findByName(wbName);
if (kieWorkbench == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Workbench not found").build();
}
String completeurl = kieWorkbench.getExternalUrl() + "/rest/spaces/"+spaceName+"/projects";
CreateProjectRequest projectRequest = new CreateProjectRequest();
projectRequest.setName(request.getName());
projectRequest.setGroupId(request.getGroupId());
projectRequest.setVersion(request.getVersion());
projectRequest.setDescription(request.getDescription());
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();
User connectedUser = userRepository.findByLogin(currentPrincipalName);
ResponseEntity<CreateProjectJobRequest> response = restTemplateKiewb
.execute(completeurl, HttpMethod.POST, requestCallback(projectRequest, connectedUser.getLogin(), connectedUser.getPassword()), clientHttpResponse -> {
CreateProjectJobRequest extractedResponse = null;
if (clientHttpResponse.getBody() != null) {
Scanner s = new Scanner(clientHttpResponse.getBody()).useDelimiter("\\A");
String result = s.hasNext() ? s.next() : "";
extractedResponse = mapper.readValue(result, CreateProjectJobRequest.class);
}
return new ResponseEntity<>(extractedResponse, clientHttpResponse.getHeaders(), clientHttpResponse.getStatusCode());
});
jobService.executeWrite(kieWorkbench.getExternalUrl()+"/rest", connectedUser.getLogin(), connectedUser.getPassword(), null, response.getBody().getJobId(), null);
completeurl = kieWorkbench.getExternalUrl() + "/rest/chtijbug/"+spaceName+"/"+projectRequest.getName()+"/dependency";
ResponseEntity<PlatformProjectData> response2 = restTemplateKiewb
.execute(completeurl, HttpMethod.PUT, requestCallback(request, connectedUser.getLogin(), connectedUser.getPassword()), clientHttpResponse -> {
PlatformProjectData extractedResponse = null;
if (clientHttpResponse.getBody() != null) {
Scanner s = new Scanner(clientHttpResponse.getBody()).useDelimiter("\\A");
String result = s.hasNext() ? s.next() : "";
extractedResponse = mapper.readValue(result, PlatformProjectData.class);
}
return new ResponseEntity<>(extractedResponse, clientHttpResponse.getHeaders(), clientHttpResponse.getStatusCode());
});
Variant variant = Variant.mediaTypes(javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE).add().build().get(0);
UserGroups workspaceUsergroup = userGroupsRepository.findByName("wrk_" + spaceName);
projectPersistService.createProjectGroupIfNeeded(request.getName(),kieWorkbench,null,workspaceUsergroup);
return Response.status(Response.Status.CREATED).entity(response2.getBody()).variant(variant).build();
}
private RequestCallback requestCallback(final Object content, String username, String password) {
return clientHttpRequest -> {
if (content != null) {
if (content instanceof KieServerInfo) {
KieServerInfo kieServerSetup = (KieServerInfo) content;
mapper.writeValue(clientHttpRequest.getBody(), kieServerSetup);
} else {
mapper.writeValue(clientHttpRequest.getBody(), content);
}
}
clientHttpRequest.getHeaders().add(
HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
clientHttpRequest.getHeaders().add(
HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE);
String auth = username + ":" + password;
byte[] encodedAuth = Base64.encodeBase64(
auth.getBytes(StandardCharsets.UTF_8));
String authHeader = "Basic " + new String(encodedAuth);
clientHttpRequest.getHeaders().add(
HttpHeaders.AUTHORIZATION, authHeader);
};
}
}

View file

@ -106,7 +106,7 @@ public class ProjectPersistService {
return projectPersist;
}
public void createProjectGroupIfNeeded(String projectName, KieWorkbench kieWorkbench, ProjectPersist projectPersist, UserGroups workspaceUserGroup) {
public UserGroups createProjectGroupIfNeeded(String projectName, KieWorkbench kieWorkbench, ProjectPersist projectPersist, UserGroups workspaceUserGroup) {
UserGroups userGroups = userGroupsRepository.findByName("prj_" + projectName);
if (userGroups == null) {
UserGroups projectGroup = new UserGroups(UUID.randomUUID().toString(), "prj_" + projectName);
@ -114,15 +114,16 @@ public class ProjectPersistService {
projectGroup.setProjectName(projectName);
projectGroup.setProjectPersist(projectPersist);
projectGroup.setWorkspaceUserGroup(workspaceUserGroup);
userGroupsRepository.save(projectGroup);
projectGroup = userGroupsRepository.save(projectGroup);
User groupUser = new User(UUID.randomUUID().toString(), "prj_user_" + projectName, "adminadmin99#");
groupUser.getUserGroups().add(projectGroup);
groupUser.getUserRoles().add(userRolesRepository.findByName("analyst"));
userRepository.save(groupUser);
} else {
userGroups.setWorkspaceUserGroup(workspaceUserGroup);
userGroupsRepository.save(userGroups);
userGroups=userGroupsRepository.save(userGroups);
}
return userGroups;
}
public UserGroups createWorkSpaceGroupIfNeeded(String workSpaceName, KieWorkbench kieWorkbench) {