Merge pull request #152 from pymma/kafka

Creation of an API in the admin console to create workspace and proje…
This commit is contained in:
Nicolas Héron 2020-09-29 17:36:40 +02:00 committed by GitHub
commit 2ca99e707e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
27 changed files with 694 additions and 153 deletions

View file

@ -70,6 +70,10 @@
<artifactId>spring-kafka</artifactId>
<version>${kafka.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
@ -81,6 +85,10 @@
<artifactId>kie-server-api</artifactId>
<version>${jbpm.version}</version>
</dependency>
<dependency>
<groupId>org.uberfire</groupId>
<artifactId>uberfire-rest-client</artifactId>
</dependency>
<dependency>
<groupId>com.pymmasoftware.jbpm</groupId>
<artifactId>drools-framework-kie-wb-rest-pojo</artifactId>
@ -231,7 +239,11 @@
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>

View file

@ -38,7 +38,11 @@ import org.springframework.kafka.support.serializer.JsonDeserializer;
import org.springframework.kafka.support.serializer.JsonSerializer;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.HashMap;
import java.util.Map;
@ -48,8 +52,13 @@ import java.util.Map;
@EnableMongoRepositories("org.chtijbug.drools.proxy.persistence.repository")
@EnableKafka
@PropertySource("classpath:application.properties")
@EnableSwagger2
public class DroolsSpringBootConsoleApplication extends SpringBootServletInitializer {
@Value("${kie-wb.baseurl}")
private String kiewbUrl;
@ -68,10 +77,9 @@ public class DroolsSpringBootConsoleApplication extends SpringBootServletInitial
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
super.addCorsMappings(registry);
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "OPTIONS", "DELETE", "PUT")
@ -85,8 +93,7 @@ public class DroolsSpringBootConsoleApplication extends SpringBootServletInitial
@Bean(name = "applicationContext")
public ApplicationContextProvider getAppplicationContext() {
ApplicationContextProvider applicationContextProvider = new ApplicationContextProvider();
return applicationContextProvider;
return new ApplicationContextProvider();
}
@Bean
@ -166,7 +173,7 @@ public class DroolsSpringBootConsoleApplication extends SpringBootServletInitial
@EventListener(ApplicationReadyEvent.class)
public void InitPlatform(){
public void initPlatform(){
dababaseContentInit.initDatabaseIfNecessary();
/**
for (KieWorkbench kieWorkbench: kieWorkbenchRepository.findAll()) {
@ -218,5 +225,17 @@ public class DroolsSpringBootConsoleApplication extends SpringBootServletInitial
**/
}
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("org.chtijbug.drools.console.restExpose"))
//.paths(PathSelectors.regex("/api/wb./wb.*"))
.paths(PathSelectors.regex("/api/wb.*"))
.build()
.pathMapping("/swagger");
}
}

View file

@ -0,0 +1,60 @@
package org.chtijbug.drools.console;
import org.chtijbug.drools.console.security.MongoUserDetailsService;
import org.chtijbug.drools.console.security.MyNoOpPasswordEncoder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import org.springframework.security.web.util.matcher.OrRequestMatcher;
import org.springframework.security.web.util.matcher.RequestMatcher;
@Configuration
@EnableConfigurationProperties
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
MongoUserDetailsService userDetailsService;
private static final String[] AUTH_WHITELIST = {
// -- swagger ui
"/v2/api-docs",
"/swagger-resources",
"/swagger-resources/**",
"/configuration/ui",
"/configuration/security",
"/swagger-ui.html",
"/webjars/**"
// other public endpoints of your API may be appended to this array
};
private static final RequestMatcher PROTECTED_URLS = new OrRequestMatcher(
new AntPathRequestMatcher("/api/**")
);
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests().antMatchers(AUTH_WHITELIST).permitAll()
.requestMatchers(PROTECTED_URLS).authenticated()
.and().httpBasic()
.and().sessionManagement().disable();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new MyNoOpPasswordEncoder();
}
@Override
public void configure(AuthenticationManagerBuilder builder) throws Exception {
builder.userDetailsService(userDetailsService);
}
}

View file

@ -0,0 +1,173 @@
package org.chtijbug.drools.console.restexpose;
import com.fasterxml.jackson.databind.ObjectMapper;
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.proxy.persistence.model.KieWorkbench;
import org.chtijbug.drools.proxy.persistence.model.User;
import org.chtijbug.drools.proxy.persistence.repository.KieWorkbenchRepository;
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")
public class AssetServiceExpose {
@Autowired
private IndexerService indexerService;
private RestTemplate restTemplateKiewb = new RestTemplate();
private ObjectMapper mapper = new ObjectMapper();
@Autowired
private KieWorkbenchRepository kieWorkbenchRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private JobService jobService;
@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})
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());
});
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);
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

@ -1,4 +1,4 @@
package org.chtijbug.drools.console.restExpose;
package org.chtijbug.drools.console.restexpose;
import org.chtijbug.drools.console.service.IndexerService;
import org.chtijbug.drools.proxy.persistence.model.BusinessTransactionAction;
@ -6,10 +6,7 @@ import org.chtijbug.drools.proxy.persistence.model.BusinessTransactionPersistenc
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@ -22,7 +19,7 @@ public class ElasticSearchExpose {
@Autowired
private IndexerService indexerService;
@RequestMapping(value = "/findLastByTransactionId", method = RequestMethod.GET)
@GetMapping(value = "/findLastByTransactionId")
public BusinessTransactionPersistence findTransactionById(@RequestParam String transactionId, HttpServletRequest request, HttpServletResponse response) {
BusinessTransactionPersistence tmp=null;
@ -43,12 +40,9 @@ public class ElasticSearchExpose {
}
return tmp;
}
@RequestMapping(value = "/findActionByBusinessId", method = RequestMethod.GET)
@GetMapping(value = "/findActionByBusinessId")
public List<BusinessTransactionAction> findActionById(@RequestParam String businessId, HttpServletRequest request, HttpServletResponse response) {
List<BusinessTransactionAction> businessTransactionPersistences = indexerService.getBusinessTransactionActionRepository().findAllByBusinessTransactionId(businessId,Sort.by(new Sort.Order(Sort.Direction.ASC,"eventNumber")),PageRequest.of(0,5000));
return businessTransactionPersistences;
return indexerService.getBusinessTransactionActionRepository().findAllByBusinessTransactionId(businessId,Sort.by(new Sort.Order(Sort.Direction.ASC,"eventNumber")),PageRequest.of(0,5000));
}
}

View file

@ -0,0 +1,32 @@
package org.chtijbug.drools.console.security;
import org.chtijbug.drools.proxy.persistence.model.User;
import org.chtijbug.drools.proxy.persistence.model.UserRoles;
import org.chtijbug.drools.proxy.persistence.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@Service
public class MongoUserDetailsService implements UserDetailsService {
@Autowired
private UserRepository repository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = repository.findByLogin(username);
if(user == null) {
throw new UsernameNotFoundException("User not found");
}
ArrayList<SimpleGrantedAuthority> authorities = new ArrayList<>();
for (UserRoles userRole: user.getUserRoles()){
authorities.add(new SimpleGrantedAuthority(userRole.getName()));
}
return new org.springframework.security.core.userdetails.User(user.getLogin(), user.getPassword(), authorities);
}
}

View file

@ -0,0 +1,27 @@
package org.chtijbug.drools.console.security;
import org.springframework.security.crypto.password.PasswordEncoder;
public final class MyNoOpPasswordEncoder implements PasswordEncoder {
public String encode(CharSequence rawPassword) {
return rawPassword.toString();
}
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return rawPassword.toString().equals(encodedPassword);
}
/**
* Get the singleton {@link org.springframework.security.crypto.password.NoOpPasswordEncoder}.
*/
public static PasswordEncoder getInstance() {
return INSTANCE;
}
private static final PasswordEncoder INSTANCE = new MyNoOpPasswordEncoder();
public MyNoOpPasswordEncoder() {
}
}

View file

@ -0,0 +1,52 @@
package org.chtijbug.drools.console.service;
import com.vaadin.flow.component.UI;
import org.chtijbug.drools.console.AddLog;
import org.chtijbug.drools.console.service.model.kie.JobStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Service;
@Service
@DependsOn("applicationContext")
public class JobService {
private static final Logger logger = LoggerFactory.getLogger(JobService.class);
@Autowired
private KieRepositoryService kieRepositoryService;
public void executeWrite(String url, String username, String password, AddLog workOnGoingView, String jobID, UI ui) {
String isJobDone = "NO";
while ("NO".equals(isJobDone)) {
JobStatus jobStatus = kieRepositoryService.getStatusJobID(url,
username,
password, jobID);
if ("DUPLICATE_RESOURCE".equals(jobStatus.getStatus())
|| "SUCCESS".equals(jobStatus.getStatus())) {
isJobDone = "YES";
if (ui!= null) {
workOnGoingView.addRow("JobID=" + jobID + " finished", ui);
}
} else if ("ACCEPTED".equals(jobStatus.getStatus())
|| ("APPROVED".equals(jobStatus.getStatus()))) {
try {
synchronized (this) {
if (ui!= null) {
workOnGoingView.addRow("JobID=" + jobID + " not yet finished", ui);
}
this.wait(1000);
}
} catch (InterruptedException e) {
logger.error("executeWrite", e);
Thread.currentThread().interrupt();
}
}
}
}
}

View file

@ -10,7 +10,7 @@ import org.chtijbug.drools.proxy.persistence.model.User;
import org.chtijbug.drools.proxy.persistence.repository.UserRepository;
import org.chtijbug.guvnor.server.jaxrs.api.UserLoginInformation;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -80,21 +80,21 @@ public class KieRepositoryService {
return reponseMoteur;
}
public List<PlatformProjectResponse> getListSpaces2(String url, String username, String password) {
public List<PlatformProjectData> getListSpaces2(String url, String username, String password) {
String completeurl = url + chtijbugprefix+"detailedSpaces";
logger.info("url getListSpaces2 :{} ", completeurl);
ResponseEntity<List<PlatformProjectResponse>> response = restTemplateKiewb
ResponseEntity<List<PlatformProjectData>> response = restTemplateKiewb
.execute(completeurl, HttpMethod.GET, requestCallback(null, username, password), clientHttpResponse -> {
List<PlatformProjectResponse> extractedResponse = null;
List<PlatformProjectData> extractedResponse = null;
if (clientHttpResponse.getBody() != null) {
Scanner s = new Scanner(clientHttpResponse.getBody()).useDelimiter("\\A");
String result = s.hasNext() ? s.next() : "";
PlatformProjectResponse[] values = mapper.readValue(result, PlatformProjectResponse[].class);
PlatformProjectData[] values = mapper.readValue(result, PlatformProjectData[].class);
extractedResponse = Arrays.asList(values);
}
return new ResponseEntity<>(extractedResponse, clientHttpResponse.getHeaders(), clientHttpResponse.getStatusCode());
});
List<PlatformProjectResponse> reponseMoteur;
List<PlatformProjectData> reponseMoteur;
reponseMoteur = response.getBody();
return reponseMoteur;

View file

@ -12,7 +12,7 @@ import org.chtijbug.drools.console.service.util.AppContext;
import org.chtijbug.drools.proxy.persistence.json.KieProject;
import org.chtijbug.drools.proxy.persistence.model.*;
import org.chtijbug.drools.proxy.persistence.repository.*;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectResponse;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -44,6 +44,8 @@ public class ProjectPersistService {
@Autowired
private UserConnectedService userConnectedService;
@Autowired
private JobService jobService;
@Autowired
private ContainerRepository containerRepository;
@ -68,11 +70,11 @@ public class ProjectPersistService {
}
public void saveIfnotExist(List<PlatformProjectResponse> platformProjectResponses,String workbenchName) {
public void saveIfnotExist(List<PlatformProjectData> platformProjectResponses, String workbenchName) {
KieWorkbench kieWorkbench = workbenchRepository.findByName(workbenchName);
for (PlatformProjectResponse platformProjectResponse : platformProjectResponses) {
for (PlatformProjectData platformProjectResponse : platformProjectResponses) {
ProjectPersist projectPersist = projectRepository.findByProjectNameAndBranch(new KieProject(platformProjectResponse.getSpaceName(), platformProjectResponse.getName()), platformProjectResponse.getBranch());
@ -160,7 +162,7 @@ public class ProjectPersistService {
return false;
}
public ProjectPersist platformProjectResponseToProjectPersist(PlatformProjectResponse platformProjectResponse) {
public ProjectPersist platformProjectResponseToProjectPersist(PlatformProjectData platformProjectResponse) {
ProjectPersist projectPersist = new ProjectPersist();
projectPersist.setArtifactID(platformProjectResponse.getArtifactId());
projectPersist.setGroupID(platformProjectResponse.getGroupId());
@ -185,12 +187,12 @@ public class ProjectPersistService {
JobStatus result = kieRepositoryService.buildProject(config.getKiewbUrl(), userConnected.getUserName(),
userConnected.getUserPassword(), projectPersist.getProjectName().getSpaceName(), projectPersist.getProjectName().getName(), projectPersist.getBranch(), "compile", workOnGoingView, ui);
executeWrite(url, username, password, workOnGoingView, result.getJobId(), ui);
jobService.executeWrite(url, username, password, workOnGoingView, result.getJobId(), ui);
result = kieRepositoryService.buildProject(config.getKiewbUrl(), userConnected.getUserName(),
userConnected.getUserPassword(), projectPersist.getProjectName().getSpaceName(), projectPersist.getProjectName().getName(), projectPersist.getBranch(), "install", workOnGoingView, ui);
executeWrite(url, username, password, workOnGoingView, result.getJobId(), ui);
jobService.executeWrite(url, username, password, workOnGoingView, result.getJobId(), ui);
@ -221,31 +223,7 @@ public class ProjectPersistService {
}
private void executeWrite(String url, String username, String password, AddLog workOnGoingView, String jobID, UI ui) {
String isJobDone = "NO";
while ("NO".equals(isJobDone)) {
JobStatus jobStatus = kieRepositoryService.getStatusJobID(url,
username,
password, jobID);
if ("DUPLICATE_RESOURCE".equals(jobStatus.getStatus())
|| "SUCCESS".equals(jobStatus.getStatus())) {
isJobDone = "YES";
workOnGoingView.addRow("JobID=" + jobID + " finished", ui);
} else if ("ACCEPTED".equals(jobStatus.getStatus())
|| ("APPROVED".equals(jobStatus.getStatus()))) {
try {
synchronized (this) {
workOnGoingView.addRow("JobID=" + jobID + " not yet finished", ui);
this.wait(1000);
}
} catch (InterruptedException e) {
logger.error("executeWrite", e);
Thread.currentThread().interrupt();
}
}
}
}
public ProjectRepository getProjectRepository() {
return projectRepository;

View file

@ -1,6 +1,6 @@
package org.chtijbug.drools.console.service.model;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectResponse;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import java.util.ArrayList;
import java.util.List;
@ -10,7 +10,7 @@ public class UserConnected {
private String userPassword;
private List<PlatformProjectResponse> projectResponses = new ArrayList<>();
private List<PlatformProjectData> projectResponses = new ArrayList<>();
private List<String> roles = new ArrayList<>();
@ -50,11 +50,11 @@ public class UserConnected {
this.kieWorkbenchName = kieWorkbenchName;
}
public List<PlatformProjectResponse> getProjectResponses() {
public List<PlatformProjectData> getProjectResponses() {
return projectResponses;
}
public void setProjectResponses(List<PlatformProjectResponse> projectResponses) {
public void setProjectResponses(List<PlatformProjectData> projectResponses) {
this.projectResponses = projectResponses;
}

View file

@ -98,7 +98,7 @@ public class SqueletteComposant extends VerticalLayout {
infoPage.removeAll();
infoPage.add(verticalLayout);
if(pageName.equals(DeploymentView.pageName)){
if(pageName.equals(DeploymentView.PAGE_NAME)){
consoleDeploy.setVisible(true);
}
}

View file

@ -5,7 +5,7 @@ import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import org.chtijbug.drools.console.vaadincomponent.componentperso.ComboBoxPerso;
import org.chtijbug.drools.console.view.TemplateView;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectResponse;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
public class TemplatesAction extends VerticalLayout {
@ -15,7 +15,7 @@ public class TemplatesAction extends VerticalLayout {
private Button edit;
private ComboBoxPerso<PlatformProjectResponse> spaceSelection;
private ComboBoxPerso<PlatformProjectData> spaceSelection;
public TemplatesAction(TemplateView templateView){
@ -24,7 +24,7 @@ public class TemplatesAction extends VerticalLayout {
spaceSelection = new ComboBoxPerso<>("Project",VaadinIcon.SEARCH.create());
spaceSelection.getComboBox().setItems(templateView.getUserConnectedService().getUserConnected().getProjectResponses());
spaceSelection.getComboBox().setItemLabelGenerator(PlatformProjectResponse::getName);
spaceSelection.getComboBox().setItemLabelGenerator(PlatformProjectData::getName);
spaceSelection.getComboBox().addValueChangeListener(valueChangeEvent -> {
templateView.setDataProvider(spaceSelection.getComboBox());
});

View file

@ -30,7 +30,7 @@ public class MenuScondaireDeployement extends HorizontalLayout {
DeploymentAction deploymentAction=new DeploymentAction(squeletteComposant,deploymentView);
deploymentView.setDeploymentAction(deploymentAction);
squeletteComposant.navigate(deploymentView,DeploymentView.pageName,deploymentAction);
squeletteComposant.navigate(deploymentView,DeploymentView.PAGE_NAME,deploymentAction);
});
}

View file

@ -29,7 +29,7 @@ public class MenuSecondaireRuntime extends HorizontalLayout {
}
RuntimesView deploymentView=new RuntimesView();
RuntimesAction deploymentAction=new RuntimesAction(squeletteComposant);
squeletteComposant.navigate(deploymentView,DeploymentView.pageName,deploymentAction);
squeletteComposant.navigate(deploymentView,DeploymentView.PAGE_NAME,deploymentAction);
});
}

View file

@ -23,6 +23,7 @@ import org.springframework.data.domain.Sort;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
@ -33,7 +34,7 @@ public class ActionLoggingView extends VerticalLayout {
private static Logger logger = LoggerFactory.getLogger(ActionLoggingView.class);
private IndexerService indexerService;
private transient IndexerService indexerService;
private Label title;
@ -47,8 +48,6 @@ public class ActionLoggingView extends VerticalLayout {
public ActionLoggingView(BusinessTransactionPersistence businessTransactionPersistence, DialogPerso dialogPerso) {
indexerService = AppContext.getApplicationContext().getBean(IndexerService.class);
dialogPerso.getClose().setVisible(false);
//Text text = new Text("Sessino Context ");
//dialogPerso.getBar().add(text);
this.uniqueID = businessTransactionPersistence.getTransactionId();
this.dbID = businessTransactionPersistence.getId();
@ -82,11 +81,9 @@ public class ActionLoggingView extends VerticalLayout {
String inputData = "";
String outputData = "";
if (c.getInputData() != null) {
//inputData = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(c.getInputData().getRealFact());
inputData = mapper.writeValueAsString(c.getInputData().getRealFact());
}
if (c.getOutputData() != null) {
//outputData = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(c.getOutputData().getRealFact());
outputData = mapper.writeValueAsString(c.getOutputData().getRealFact());
}
if (c.getRuleExecution() != null) {
@ -95,8 +92,6 @@ public class ActionLoggingView extends VerticalLayout {
beginDate = simpleDateFormat.format(c.getRuleExecution().getStartDate());
endDate = simpleDateFormat.format(c.getRuleExecution().getEndDate());
}
//TODO Encode in string the json content
if (c.getEventType().equals(EventType.INPUT)) {
csvWriter.writeNext("", "", c.getEventType().name(), String.valueOf(c.getEventNumber()), "", "", "", "", "", "", "",c.getInputData().getFullClassName(),inputData);
} else if (c.getEventType().equals(EventType.OUPUT)) {
@ -132,7 +127,6 @@ public class ActionLoggingView extends VerticalLayout {
datas.add(f.getFullClassName());
datas.add(mapper.writeValueAsString(f.getRealFact()));
}
//csvWriter.writeAll("", "", c.getEventType().name(), String.valueOf(c.getEventNumber()), "", "", "", c.getProcessID(), "", "", "",datas);
csvWriter.writeAll(Collections.singletonList(datas));
} else {
csvWriter.writeNext(beginDate, endDate, c.getEventType().name(), String.valueOf(c.getEventNumber()),
@ -142,7 +136,7 @@ public class ActionLoggingView extends VerticalLayout {
}
return IOUtils.toInputStream(stringWriter.toString(), "UTF-8");
return IOUtils.toInputStream(stringWriter.toString(), StandardCharsets.UTF_8.name());
} catch (IOException e) {
logger.error("getInputStream.csvWriter",e);

View file

@ -28,21 +28,21 @@ import java.util.Map;
@StyleSheet("css/accueil.css")
public class DeploymentView extends VerticalLayout implements AddLog {
public static final String pageName = "Deployment";
public static final String PAGE_NAME = "Deployment";
//GRID composant
private final String strNameDeploy = "Deploy name";
private final String strNameProject = "Project name";
private final String strGroupeId = "Groupe ID";
private final String strBranchName = "Branch Name";
private final String strArtefactID = "Artefact ID";
private static final String STR_NAME_DEPLOY = "Deploy name";
private static final String STR_NAME_PROJECT = "Project name";
private static final String STR_GROUPE_ID = "Groupe ID";
private static final String STR_BRANCH_NAME = "Branch Name";
private static final String STR_ARTEFACT_ID = "Artefact ID";
//TEXTFIELD search
private final String strProcessID = "Process ID";
private final String strServerName = "Server Name";
private final String strStatus = "Status";
private static final String STR_PROCESS_ID = "Process ID";
private static final String STR_SERVER_NAME = "Server Name";
private static final String STR_STATUS = "Status";
private Grid<ProjectPersist> projectPersistGrid;
private ListDataProvider<ProjectPersist> dataProvider;
private ConfigurableFilterDataProvider<ProjectPersist, Void, SerializablePredicate<ProjectPersist>> filterDataProvider;
private DeploymentAction deploymentAction;
@ -57,7 +57,7 @@ public class DeploymentView extends VerticalLayout implements AddLog {
private ComboBox status;
//SERVICE
private ProjectPersistService projectPersistService;
private transient ProjectPersistService projectPersistService;
private SqueletteComposant squeletteComposant;
@ -76,18 +76,18 @@ public class DeploymentView extends VerticalLayout implements AddLog {
Grid.Column<ProjectPersist> deployNameCo = projectPersistGrid.addColumn(projectPersist -> projectPersist.getDeploymentName());
nameDeploy = new TextField(strNameDeploy);
nameDeploy = new TextField(STR_NAME_DEPLOY);
nameDeploy.setValueChangeMode(ValueChangeMode.EAGER);
nameDeploy.addValueChangeListener(e -> {
refreshtGrid(nameDeploy.getValue(), strNameDeploy);
});
nameDeploy.addValueChangeListener(e ->
refreshtGrid(nameDeploy.getValue(), STR_NAME_DEPLOY)
);
deployNameCo.setHeader(nameDeploy);
Grid.Column<ProjectPersist> nameProjectCo = projectPersistGrid.addColumn(projectPersist -> projectPersist.getProjectName());
nameProject = new TextField(strNameProject);
nameProject = new TextField(STR_NAME_PROJECT);
nameProject.setValueChangeMode(ValueChangeMode.EAGER);
nameProject.addValueChangeListener(e -> {
refreshtGrid(nameProject.getValue(), strNameProject);
refreshtGrid(nameProject.getValue(), STR_NAME_PROJECT);
});
nameProjectCo.setHeader(nameProject);
@ -95,55 +95,54 @@ public class DeploymentView extends VerticalLayout implements AddLog {
.setComparator((projectPersist, t1) -> projectPersist.getMainClass().compareTo(t1.getMainClass()));
Grid.Column<ProjectPersist> branchCo = projectPersistGrid.addColumn(projectPersist -> projectPersist.getBranch());
branchName = new TextField(strBranchName);
branchName = new TextField(STR_BRANCH_NAME);
branchName.setValueChangeMode(ValueChangeMode.EAGER);
branchName.addValueChangeListener(e -> {
refreshtGrid(groupeId.getValue(), strBranchName);
refreshtGrid(groupeId.getValue(), STR_BRANCH_NAME);
});
branchCo.setHeader(branchName);
Grid.Column<ProjectPersist> groupIdCo = projectPersistGrid.addColumn(projectPersist -> projectPersist.getGroupID());
groupeId = new TextField(strGroupeId);
groupeId = new TextField(STR_GROUPE_ID);
groupeId.setValueChangeMode(ValueChangeMode.EAGER);
groupeId.addValueChangeListener(e -> {
refreshtGrid(groupeId.getValue(), strGroupeId);
refreshtGrid(groupeId.getValue(), STR_GROUPE_ID);
});
groupIdCo.setHeader(groupeId);
Grid.Column<ProjectPersist> artifactIDCO = projectPersistGrid.addColumn(projectPersist -> projectPersist.getArtifactID());
artifactId = new TextField(strArtefactID);
artifactId = new TextField(STR_ARTEFACT_ID);
artifactId.setValueChangeMode(ValueChangeMode.EAGER);
artifactId.addValueChangeListener(e -> {
refreshtGrid(artifactId.getValue(), strArtefactID);
refreshtGrid(artifactId.getValue(), STR_ARTEFACT_ID);
});
artifactIDCO.setHeader(artifactId);
Grid.Column<ProjectPersist> processIDco = projectPersistGrid.addColumn(projectPersist -> projectPersist.getProcessID());
processId = new TextField(strProcessID);
processId = new TextField(STR_PROCESS_ID);
processId.setValueChangeMode(ValueChangeMode.EAGER);
processId.addValueChangeListener(e -> {
refreshtGrid(processId.getValue(), strProcessID);
});
processId.addValueChangeListener(e ->
refreshtGrid(processId.getValue(), STR_PROCESS_ID));
processIDco.setHeader(processId);
Grid.Column<ProjectPersist> serverNameCo = projectPersistGrid.addColumn(projectPersist -> {
String result = null;
for (String serverName : projectPersist.getServerNames()) {
for (String servName : projectPersist.getServerNames()) {
if (result != null) {
result = result + ":" + serverName;
result = result + ":" + servName;
} else {
result = serverName;
result = servName;
}
}
return result;
});
serverName = new TextField(strServerName);
serverName = new TextField(STR_SERVER_NAME);
serverName.setValueChangeMode(ValueChangeMode.EAGER);
serverName.addValueChangeListener(e -> {
refreshtGrid(serverName.getValue(), strServerName);
});
serverName.addValueChangeListener(e ->
refreshtGrid(serverName.getValue(), STR_SERVER_NAME)
);
serverNameCo.setHeader(serverName);
@ -152,7 +151,7 @@ public class DeploymentView extends VerticalLayout implements AddLog {
Grid.Column<ProjectPersist> statusCo = projectPersistGrid.addColumn(projectPersist -> projectPersist.getStatus());
status = new ComboBox(strProcessID);
status = new ComboBox(STR_PROCESS_ID);
status.setClassName("deployment-combobox");
ArrayList<String> tmp = new ArrayList<>();
@ -161,9 +160,9 @@ public class DeploymentView extends VerticalLayout implements AddLog {
tmp.add(ProjectPersist.ADEFINIR);
tmp.add(" ");
status.setItems(tmp);
status.addValueChangeListener(e -> {
refreshtGrid(status.getValue() != null ? status.getValue().toString() : " ", strStatus);
});
status.addValueChangeListener(e ->
refreshtGrid(status.getValue() != null ? status.getValue().toString() : " ", STR_STATUS)
);
statusCo.setHeader(status);
add(projectPersistGrid);
@ -180,7 +179,6 @@ public class DeploymentView extends VerticalLayout implements AddLog {
getDeploymentAction().getDeployer().setEnabled(false);
}
});
//add(new ConsoleDeploy());
}
private void refreshtGrid(String value, String type) {
@ -195,19 +193,19 @@ public class DeploymentView extends VerticalLayout implements AddLog {
if (value.equals("") || value.equals(" ") || type.equals(" ")) {
columnPredicate = asset -> (true);
} else {
if (type.equals(strArtefactID)) {
if (type.equals(STR_ARTEFACT_ID)) {
columnPredicate = asset -> (
asset.getArtifactID() != null && asset.getArtifactID().toUpperCase().contains(value.toUpperCase()));
} else if (type.equals(strGroupeId)) {
} else if (type.equals(STR_GROUPE_ID)) {
columnPredicate = asset -> (asset.getGroupID() != null && asset.getGroupID().toUpperCase().contains(value.toUpperCase()));
} else if (type.equals(strNameDeploy)) {
} else if (type.equals(STR_NAME_DEPLOY)) {
columnPredicate = asset -> (asset.getDeploymentName() != null && asset.getDeploymentName().toUpperCase().contains(value.toUpperCase()));
} else if (type.equals(strNameProject)) {
} else if (type.equals(STR_NAME_PROJECT)) {
columnPredicate = asset -> (asset.getProjectName() != null && asset.getProjectName().toString().toUpperCase().contains(value.toUpperCase()));
} else if (type.equals(strProcessID)) {
} else if (type.equals(STR_PROCESS_ID)) {
columnPredicate = asset -> (asset.getProcessID() != null && asset.getProcessID().toUpperCase().contains(value.toUpperCase()));
} else if (type.equals(strStatus)) {
columnPredicate = asset -> (asset.getStatus() != null && asset.getStatus().toUpperCase().equals(value.toUpperCase()));
} else if (type.equals(STR_STATUS)) {
columnPredicate = asset -> (asset.getStatus() != null && asset.getStatus().equalsIgnoreCase(value));
}
}
return columnPredicate;
@ -217,13 +215,9 @@ public class DeploymentView extends VerticalLayout implements AddLog {
Map<String, ProjectPersist> projectPersists = projectPersistService.getProjectsSession();
if (projectPersists != null) {
dataProvider = new ListDataProvider<>(projectPersists.values());
ListDataProvider<ProjectPersist> dataProvider = new ListDataProvider<>(projectPersists.values());
filterDataProvider = dataProvider.withConfigurableFilter();
projectPersistGrid.setDataProvider(filterDataProvider);
reinitFilter();
}

View file

@ -17,7 +17,7 @@ import org.chtijbug.drools.console.service.util.AppContext;
import org.chtijbug.drools.console.vaadincomponent.componentperso.DialogPerso;
import org.chtijbug.drools.console.vaadincomponent.leftMenu.Action.TemplatesAction;
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 java.util.ArrayList;
import java.util.List;
@ -81,8 +81,8 @@ public class TemplateView extends VerticalLayout {
});
}
public void setDataProvider(ComboBox<PlatformProjectResponse> spaceSelection){
PlatformProjectResponse response = spaceSelection.getValue();
public void setDataProvider(ComboBox<PlatformProjectData> spaceSelection){
PlatformProjectData response = spaceSelection.getValue();
List<Asset> tmp = kieRepositoryService.getListAssets(config.getKiewbUrl(), userConnected.getUserName(), userConnected.getUserPassword(), response.getSpaceName(), response.getName());
List<Asset> result = new ArrayList<>();
for (Asset asset : tmp) {
@ -97,17 +97,17 @@ public class TemplateView extends VerticalLayout {
reinitFilter();
}
public void refreshList(ComboBox<PlatformProjectResponse> spaceSelection) {
public void refreshList(ComboBox<PlatformProjectData> spaceSelection) {
spaceSelection.setItems(userConnected.getProjectResponses());
}
public void edit(ComboBox<PlatformProjectResponse> spaceSelection){
public void edit(ComboBox<PlatformProjectData> spaceSelection){
Set<Asset> selectedElements = assetListGrid.getSelectedItems();
if (selectedElements.toArray().length > 0) {
Optional<Asset> assetOptional = selectedElements.stream().findFirst();
if (assetOptional.isPresent()) {
String assetName = assetOptional.get().getTitle();
if (assetName != null) {
PlatformProjectResponse response = spaceSelection.getValue();
PlatformProjectData response = spaceSelection.getValue();
userConnectedService.addAssetToSession(assetName);
userConnectedService.addProjectToSession(response.getName());
userConnectedService.addSpaceToSession(response.getSpaceName());

View file

@ -18,4 +18,3 @@ spring.servlet.multipart.enabled=false
kafka.bootstrapAddress=${PYMMA_KAFKA_BOOTSTRAP:localhost:9092,localhost:9093,localhost:9094}
vaadin.urlMapping=/admin/*
server.servlet.context-path=/

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 $?

View file

@ -17,7 +17,7 @@
<packaging>pom</packaging>
<properties>
<jbpm.version>7.42.0.Final</jbpm.version>
<jbpm.version>7.43.1.Final</jbpm.version>
<node.version>v10.16.3</node.version>
<npm.version>6.11.3</npm.version>
<frontend-maven-plugin.version>1.8.0</frontend-maven-plugin.version>