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

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

View file

@ -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,12 +81,10 @@ 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());
inputData = mapper.writeValueAsString(c.getInputData().getRealFact());
}
if (c.getOutputData() != null) {
//outputData = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(c.getOutputData().getRealFact());
outputData = mapper.writeValueAsString(c.getOutputData().getRealFact());
outputData = mapper.writeValueAsString(c.getOutputData().getRealFact());
}
if (c.getRuleExecution() != null) {
ruleName = c.getRuleExecution().getRuleName();
@ -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,8 +127,7 @@ 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));
csvWriter.writeAll(Collections.singletonList(datas));
} else {
csvWriter.writeNext(beginDate, endDate, c.getEventType().name(), String.valueOf(c.getEventNumber()),
ruleName, packageName, c.getRuleflowGroupName(), c.getProcessID()
@ -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=/