Work on Finish the "drools-framewok-uberfire-security-service" module #97

Allow only users with a user group that gives access to the Workbench #96
This commit is contained in:
Nicolas Héron 2020-10-12 09:02:54 +02:00
commit 3f1187921e
18 changed files with 416 additions and 131 deletions

View file

@ -39,6 +39,7 @@ import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.core.*;
import org.springframework.kafka.support.serializer.JsonDeserializer;
import org.springframework.kafka.support.serializer.JsonSerializer;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.builders.PathSelectors;
@ -56,6 +57,7 @@ import java.util.Map;
@EnableKafka
@PropertySource("classpath:application.properties")
@EnableSwagger2
@EnableScheduling
public class DroolsSpringBootConsoleApplication extends SpringBootServletInitializer {

View file

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

View file

@ -4,9 +4,12 @@ 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.console.service.ProjectPersistService;
import org.chtijbug.drools.proxy.persistence.model.KieWorkbench;
import org.chtijbug.drools.proxy.persistence.model.User;
import org.chtijbug.drools.proxy.persistence.model.UserGroups;
import org.chtijbug.drools.proxy.persistence.repository.KieWorkbenchRepository;
import org.chtijbug.drools.proxy.persistence.repository.UserGroupsRepository;
import org.chtijbug.drools.proxy.persistence.repository.UserRepository;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import org.guvnor.rest.client.CreateProjectJobRequest;
@ -44,12 +47,17 @@ public class AssetServiceExpose {
@Autowired
private KieWorkbenchRepository kieWorkbenchRepository;
@Autowired
private UserGroupsRepository userGroupsRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private JobService jobService;
@Autowired
private ProjectPersistService projectPersistService;
@PostMapping(value = "/spaces",
consumes = {javax.ws.rs.core.MediaType.APPLICATION_JSON, javax.ws.rs.core.MediaType.APPLICATION_XML},
@ -85,6 +93,7 @@ public class AssetServiceExpose {
}
return new ResponseEntity<>(extractedResponse, clientHttpResponse.getHeaders(), clientHttpResponse.getStatusCode());
});
projectPersistService.createWorkSpaceGroupIfNeeded(request.getSpaceName(),kieWorkbench);
jobService.executeWrite(kieWorkbench.getExternalUrl()+"/rest", connectedUser.getLogin(), connectedUser.getPassword(), null, response.getBody().getJobId(), null);
Variant variant = Variant.mediaTypes(javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE).add().build().get(0);
return Response.status(Response.Status.CREATED).entity(response.getBody()).variant(variant).build();
@ -143,6 +152,8 @@ public class AssetServiceExpose {
Variant variant = Variant.mediaTypes(javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE).add().build().get(0);
UserGroups workspaceUsergroup = userGroupsRepository.findByName("wrk_" + spaceName);
projectPersistService.createProjectGroupIfNeeded(request.getName(),kieWorkbench,null,workspaceUsergroup);
return Response.status(Response.Status.CREATED).entity(response2.getBody()).variant(variant).build();
}
private RequestCallback requestCallback(final Object content, String username, String password) {

View file

@ -138,7 +138,44 @@ public class KieRepositoryService {
return null;
}
}
public UserConnected getUserContent(String url, String username, String password,String workbenchName) {
User user = userRepository.findByLogin(username);
String completeurl = url + chtijbugprefix+"content";
if (user != null && user.getPassword().equals(password)) {
if (user.getCustomer()!= null &&
user.getCustomer().getKieWorkbench()!= null
&& user.getCustomer().getKieWorkbench().getInternalUrl()!= null){
completeurl = user.getCustomer().getKieWorkbench().getInternalUrl()+"/rest/chtijbug/content";
}
logger.info("url moteur reco : {}" , completeurl);
ResponseEntity<UserLoginInformation> response = restTemplateKiewb
.execute(completeurl, HttpMethod.GET, requestCallback(null, username, password), clientHttpResponse -> {
UserLoginInformation extractedResponse = null;
if (clientHttpResponse.getBody() != null) {
Scanner s = new Scanner(clientHttpResponse.getBody()).useDelimiter("\\A");
String result = s.hasNext() ? s.next() : "";
extractedResponse = mapper.readValue(result, UserLoginInformation.class);
}
return new ResponseEntity<>(extractedResponse, clientHttpResponse.getHeaders(), clientHttpResponse.getStatusCode());
});
UserConnected userConnected = new UserConnected();
UserLoginInformation responseBody = response.getBody();
userConnected.setUserName(username);
userConnected.setUserPassword(password);
userConnected.setUserPassword(password);
userConnected.getProjectResponses().addAll(responseBody.getProjects());
userConnected.getRoles().addAll(responseBody.getRoles());
userConnected.setUserName(username);
userConnected.setKieWorkbenchName(workbenchName);
return userConnected;
} else {
return null;
}
}
public List<Asset> getListAssets(String url, String username, String password, String spaceName, String projectName) {
String completeurl = url + chtijbugprefix + spaceName + "/" + projectName + "/assets";
logger.info("url getListAssets : {}" , completeurl);

View file

@ -1,7 +1,6 @@
package org.chtijbug.drools.console.service;
import com.vaadin.flow.component.UI;
import com.vaadin.flow.server.VaadinSession;
import org.chtijbug.drools.ReverseProxyUpdate;
import org.chtijbug.drools.common.KafkaTopicConstants;
import org.chtijbug.drools.console.AddLog;
@ -20,10 +19,7 @@ import org.springframework.context.annotation.DependsOn;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Service
@DependsOn("applicationContext")
@ -41,6 +37,13 @@ public class ProjectPersistService {
private KieConfigurationData config;
@Autowired
private UserRepository userRepository;
@Autowired
private UserRolesRepository userRolesRepository;
@Autowired
private UserConnectedService userConnectedService;
@ -62,6 +65,8 @@ public class ProjectPersistService {
@Autowired
private KafkaTemplate<String, ReverseProxyUpdate> kafkaTemplateProxyUpdate;
@Autowired
private UserGroupsRepository userGroupsRepository;
public ProjectPersistService() {
@ -69,58 +74,102 @@ public class ProjectPersistService {
}
public ProjectPersist saveorUpdateProject(PlatformProjectData platformProjectData, KieWorkbench kieWorkbench) {
ProjectPersist projectPersist = projectRepository.findByProjectNameAndBranch(new KieProject(platformProjectData.getSpaceName(), platformProjectData.getName()), platformProjectData.getBranch());
public void saveIfnotExist(List<PlatformProjectData> platformProjectResponses, String workbenchName) {
if (projectPersist == null) {
projectPersist = platformProjectResponseToProjectPersist(platformProjectData);
projectPersist.setKieWorkbench(kieWorkbench);
projectPersist.setProjectVersion(platformProjectData.getVersion());
projectPersist.setArtifactID(platformProjectData.getArtifactId());
projectPersist.setGroupID(platformProjectData.getGroupId());
projectPersist.setClassNameList(new ArrayList<>());
for (String className : platformProjectData.getJavaClasses()) {
projectPersist.getClassNameList().add(className);
KieWorkbench kieWorkbench = workbenchRepository.findByName(workbenchName);
for (PlatformProjectData platformProjectResponse : platformProjectResponses) {
ProjectPersist projectPersist = projectRepository.findByProjectNameAndBranch(new KieProject(platformProjectResponse.getSpaceName(), platformProjectResponse.getName()), platformProjectResponse.getBranch());
if (projectPersist == null) {
projectPersist = platformProjectResponseToProjectPersist(platformProjectResponse);
projectPersist.setKieWorkbench(kieWorkbench);
projectPersist = projectRepository.save(projectPersist);
addProjectToSession(projectPersist, true);
} else {
projectPersist.setKieWorkbench(kieWorkbench);
projectPersist.getClassNameList().clear();
for (String className : platformProjectResponse.getJavaClasses()) {
projectPersist.getClassNameList().add(className);
projectRepository.save(projectPersist);
}
addProjectToSession(projectPersist, false);
}
}
}
projectPersist = projectRepository.save(projectPersist);
public Map<String, ProjectPersist> getProjectsSession() {
return (Map<String, ProjectPersist>) VaadinSession.getCurrent().getAttribute(projectVariable);
}
public void addProjectToSession(ProjectPersist projectPersist, boolean isModifiable) {
Map<String, ProjectPersist> projectPersists = getProjectsSession();
if (projectPersists == null) {
projectPersists = new HashMap<>();
}
if (isModifiable) {
projectPersists.put(projectPersist.getProjectName().toString() + "-" + projectPersist.getBranch(), projectPersist);
} else {
projectPersist.setKieWorkbench(kieWorkbench);
projectPersist.setProjectVersion(platformProjectData.getVersion());
projectPersist.setArtifactID(platformProjectData.getArtifactId());
projectPersist.setGroupID(platformProjectData.getGroupId());
projectPersist.setClassNameList(new ArrayList<>());
for (String className : platformProjectData.getJavaClasses()) {
projectPersist.getClassNameList().add(className);
ProjectPersist tmp = projectPersists.get(projectPersist.getProjectName().toString() + "-" + projectPersist.getBranch());
if (tmp == null) {
projectPersists.put(projectPersist.getProjectName().toString() + "-" + projectPersist.getBranch(), projectPersist);
}
projectRepository.save(projectPersist);
}
return projectPersist;
}
public void createProjectGroupIfNeeded(String projectName, KieWorkbench kieWorkbench,ProjectPersist projectPersist,UserGroups workspaceUserGroup ) {
UserGroups userGroups = userGroupsRepository.findByName("prj_" + projectName);
if (userGroups == null) {
UserGroups projectGroup = new UserGroups(UUID.randomUUID().toString(), "prj_" + projectName);
projectGroup.setKieWorkbench(kieWorkbench);
projectGroup.setProjectName(projectName);
projectGroup.setProjectPersist(projectPersist);
projectGroup.setWorkspaceUserGroup(workspaceUserGroup);
userGroupsRepository.save(projectGroup);
User groupUser = new User(UUID.randomUUID().toString(), "prj_user_" + projectName, "adminadmin99#");
groupUser.getUserGroups().add(projectGroup);
groupUser.getUserRoles().add(userRolesRepository.findByName("analyst"));
userRepository.save(groupUser);
}else{
userGroups.setWorkspaceUserGroup(workspaceUserGroup);
userGroupsRepository.save(userGroups);
}
}
public UserGroups createWorkSpaceGroupIfNeeded(String workSpaceName, KieWorkbench kieWorkbench) {
UserGroups userGroupsWorkSpace = userGroupsRepository.findByName("wrk_" + workSpaceName);
if (userGroupsWorkSpace == null) {
userGroupsWorkSpace = new UserGroups(UUID.randomUUID().toString(), "wrk_" + workSpaceName);
userGroupsWorkSpace.setKieWorkbench(kieWorkbench);
userGroupsWorkSpace.setSpaceName(workSpaceName);
userGroupsRepository.save(userGroupsWorkSpace);
User groupUser = new User(UUID.randomUUID().toString(), "wrk_user_" + workSpaceName, "pymma#");
groupUser.getUserGroups().add(userGroupsWorkSpace);
groupUser.getUserRoles().add(userRolesRepository.findByName("analyst"));
userRepository.save(groupUser);
}
VaadinSession.getCurrent().setAttribute(projectVariable, projectPersists);
return userGroupsWorkSpace;
}
public Map<String, ProjectPersist> findProjectsConnectedUser() {
//VaadinSession.getCurrent().get
boolean isAdmin =false;
UserConnected userConnected = userConnectedService.getUserConnected();
User user = userRepository.findByLogin(userConnected.getUserName());
for (UserRoles userRoles : user.getUserRoles()){
if ("admin".equals(userRoles.getName())){
isAdmin=true;
}
}
List<ProjectPersist> projectPersists = new ArrayList<>();
if (isAdmin) {
projectPersists = projectRepository.findAll();
}else {
List<UserGroups> userGroups = user.getUserGroups();
}
Map<String, ProjectPersist> map = new HashMap<>();
for (ProjectPersist projectPersist : projectPersists){
map.put(projectPersist.getProjectName().toString() + "-" + projectPersist.getBranch(),projectPersist);
}
return map;
}
public boolean associate(ProjectPersist projectPersist, List<RuntimePersist> runtimePersists) {
projectPersist.setStatus(ProjectPersist.Deployable);
projectPersist.setContainerID(projectPersist.getDeploymentName() + "-" + projectPersist.getProjectName());
@ -148,7 +197,6 @@ public class ProjectPersistService {
reverseProxyUpdate.getServerNames().add(hostName);
}
projectRepository.save(projectPersist);
addProjectToSession(projectPersist, true);
kafkaTemplateProxyUpdate.send(KafkaTopicConstants.REVERSE_PROXY, reverseProxyUpdate);
return true;
}
@ -175,7 +223,6 @@ public class ProjectPersistService {
}
public void waitForJobToBeEnded(String url, String username, String password, ProjectPersist projectPersist, AddLog workOnGoingView, UI ui) {
UserConnected userConnected = userConnectedService.getUserConnected();
@ -195,7 +242,6 @@ public class ProjectPersistService {
jobService.executeWrite(url, username, password, workOnGoingView, result.getJobId(), ui);
for (String serverName : projectPersist.getServerNames()) {
@ -224,7 +270,6 @@ public class ProjectPersistService {
}
public ProjectRepository getProjectRepository() {
return projectRepository;
}

View file

@ -112,7 +112,6 @@ public class DefineProject extends VerticalLayout {
if (createMode) {
projectPersist.setStatus(ProjectPersist.DEFINI);
}
projectPersistService.addProjectToSession(projectPersist,true);
projectPersistService.getProjectRepository().save(projectPersist);
deploymentView.setDataProvider();
dialog.close();

View file

@ -3,9 +3,13 @@ package org.chtijbug.drools.console.vaadincomponent.leftMenu.Action;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import org.chtijbug.drools.console.service.ProjectPersistService;
import org.chtijbug.drools.console.service.util.AppContext;
import org.chtijbug.drools.console.vaadincomponent.componentperso.ComboBoxPerso;
import org.chtijbug.drools.console.view.TemplateView;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
import java.util.Map;
public class TemplatesAction extends VerticalLayout {
@ -15,16 +19,20 @@ public class TemplatesAction extends VerticalLayout {
private Button edit;
private ComboBoxPerso<PlatformProjectData> spaceSelection;
private ComboBoxPerso<ProjectPersist> spaceSelection;
private ProjectPersistService projectPersistService;
public TemplatesAction(TemplateView templateView){
setClassName("leftMenu-global-action");
projectPersistService = AppContext.getApplicationContext().getBean(ProjectPersistService.class);
Map<String, ProjectPersist> map = projectPersistService.findProjectsConnectedUser();
spaceSelection = new ComboBoxPerso<>("Project",VaadinIcon.SEARCH.create());
spaceSelection.getComboBox().setItems(templateView.getUserConnectedService().getUserConnected().getProjectResponses());
spaceSelection.getComboBox().setItemLabelGenerator(PlatformProjectData::getName);
spaceSelection.getComboBox().setItems(map.values());
spaceSelection.getComboBox().setItemLabelGenerator(ProjectPersist::getKieProjectName);
spaceSelection.getComboBox().addValueChangeListener(valueChangeEvent -> {
templateView.setDataProvider(spaceSelection.getComboBox());
});

View file

@ -130,7 +130,7 @@ public class FormulaireComposant extends VerticalLayout {
if(connected!=null) {
connected.setConnected(true);
userConnectedService.addUserToSession(connected);
projectPersistService.saveIfnotExist(connected.getProjectResponses(),configKie.getName());
//projectPersistService.saveIfnotExist(connected.getProjectResponses(),configKie.getName());
return true;
}else {

View file

@ -213,7 +213,7 @@ public class DeploymentView extends VerticalLayout implements AddLog {
public void setDataProvider() {
Map<String, ProjectPersist> projectPersists = projectPersistService.getProjectsSession();
Map<String, ProjectPersist> projectPersists = projectPersistService.findProjectsConnectedUser();
if (projectPersists != null) {
ListDataProvider<ProjectPersist> dataProvider = new ListDataProvider<>(projectPersists.values());
filterDataProvider = dataProvider.withConfigurableFilter();

View file

@ -10,14 +10,17 @@ import com.vaadin.flow.data.provider.ListDataProvider;
import com.vaadin.flow.data.value.ValueChangeMode;
import com.vaadin.flow.function.SerializablePredicate;
import org.chtijbug.drools.console.service.KieRepositoryService;
import org.chtijbug.drools.console.service.ProjectPersistService;
import org.chtijbug.drools.console.service.UserConnectedService;
import org.chtijbug.drools.console.service.model.UserConnected;
import org.chtijbug.drools.console.service.model.kie.KieConfigurationData;
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.drools.proxy.persistence.model.ProjectPersist;
import org.chtijbug.drools.proxy.persistence.model.UserGroups;
import org.chtijbug.drools.proxy.persistence.repository.UserGroupsRepository;
import org.chtijbug.guvnor.server.jaxrs.jaxb.Asset;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectData;
import java.util.ArrayList;
import java.util.List;
@ -37,6 +40,10 @@ public class TemplateView extends VerticalLayout {
private UserConnectedService userConnectedService;
private UserGroupsRepository userGroupsRepository;
private ProjectPersistService projectPersistService;
private ListDataProvider<Asset> dataProvider;
private Grid<Asset> assetListGrid;
@ -56,7 +63,9 @@ public class TemplateView extends VerticalLayout {
this.kieRepositoryService = AppContext.getApplicationContext().getBean(KieRepositoryService.class);
this.userConnectedService = AppContext.getApplicationContext().getBean(UserConnectedService.class);
this.userGroupsRepository = AppContext.getApplicationContext().getBean(UserGroupsRepository.class);
this.userConnected = userConnectedService.getUserConnected();
this.projectPersistService = AppContext.getApplicationContext().getBean(ProjectPersistService.class);
this.config = AppContext.getApplicationContext().getBean(KieConfigurationData.class);
assetListGrid = new Grid();
@ -81,36 +90,52 @@ public class TemplateView extends VerticalLayout {
});
}
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) {
if (asset.getTitle().endsWith(".template")
|| asset.getTitle().endsWith(".gdst")) {
result.add(asset);
public void setDataProvider(ComboBox<ProjectPersist> spaceSelection){
ProjectPersist response = spaceSelection.getValue();
if (response!= null) {
UserGroups projectGroups = userGroupsRepository.findUserGroupsByProjectPersist(response);
String workspaceName = projectGroups.getWorkspaceUserGroup().getSpaceName();
List<Asset> tmp = kieRepositoryService.getListAssets(config.getKiewbUrl(),
userConnected.getUserName(),
userConnected.getUserPassword(),
workspaceName,
projectGroups.getProjectName());
List<Asset> result = new ArrayList<>();
for (Asset asset : tmp) {
if (asset.getTitle().endsWith(".template")
|| asset.getTitle().endsWith(".gdst")) {
result.add(asset);
}
}
dataProvider = new ListDataProvider<>(result);
filterDataProvider = dataProvider.withConfigurableFilter();
assetListGrid.setDataProvider(filterDataProvider);
reinitFilter();
}else{
List<Asset> result = new ArrayList<>();
dataProvider = new ListDataProvider<>(result);
filterDataProvider = dataProvider.withConfigurableFilter();
assetListGrid.setDataProvider(filterDataProvider);
reinitFilter();
}
dataProvider=new ListDataProvider<>(result);
filterDataProvider = dataProvider.withConfigurableFilter();
assetListGrid.setDataProvider(filterDataProvider);
reinitFilter();
}
public void refreshList(ComboBox<PlatformProjectData> spaceSelection) {
spaceSelection.setItems(userConnected.getProjectResponses());
public void refreshList(ComboBox<ProjectPersist> spaceSelection) {
spaceSelection.setItems(projectPersistService.findProjectsConnectedUser().values());
}
public void edit(ComboBox<PlatformProjectData> spaceSelection){
public void edit(ComboBox<ProjectPersist> 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) {
PlatformProjectData response = spaceSelection.getValue();
//latformProjectData response = spaceSelection.getValue();
userConnectedService.addAssetToSession(assetName);
userConnectedService.addProjectToSession(response.getName());
userConnectedService.addSpaceToSession(response.getSpaceName());
UserGroups projectGroups = userGroupsRepository.findUserGroupsByProjectPersist(spaceSelection.getValue());
String workspaceName=projectGroups.getWorkspaceUserGroup().getSpaceName();
userConnectedService.addProjectToSession(projectGroups.getProjectName());
userConnectedService.addSpaceToSession(workspaceName);
DialogPerso dialog = new DialogPerso();
dialog.add(new EditTemplateView(dialog, assetName));