Skip to content

Commit

Permalink
projects CRUD
Browse files Browse the repository at this point in the history
  • Loading branch information
dyshechka committed May 27, 2017
1 parent 347aa6b commit c7bd96b
Show file tree
Hide file tree
Showing 6 changed files with 220 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package ru.martha.autotesting.controller;

import lombok.Getter;
import lombok.Setter;
import ru.martha.autotesting.entity.Project;
import ru.martha.autotesting.service.TesterService;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

@ManagedBean
@ViewScoped
public class ProjectsController implements Serializable {

@ManagedProperty("#{testerServiceImpl}")
@Setter
private TesterService testerService;

@Getter
private List<Project> projects;

@Getter
@Setter
private Project selectedProject;

@Setter
@Getter
private boolean isEditMode;

@Setter
@Getter
private boolean isNewProject;

@PostConstruct
private void init() {
projects = testerService.getAllProjects();
}

public void onProjectSelected() {
isEditMode = false;
}

public void createProject() {
selectedProject = new Project();
selectedProject.setCreationDate(new Date());
projects.add(selectedProject);
isNewProject = true;
isEditMode = true;
}

public void cancelCreateProject() {
selectedProject = null;
projects = testerService.getAllProjects();
isEditMode = false;
isNewProject = false;
}

public void saveProject() {
try {
testerService.createOrUpdateProject(selectedProject);
projects = testerService.getAllProjects();
isEditMode = false;
isNewProject = false;
} catch (Exception e) {
FacesMessage message = new FacesMessage("Произошла ошибка при сохранении");
message.setSeverity(FacesMessage.SEVERITY_ERROR);
FacesContext.getCurrentInstance().addMessage(null, message);
}
}

public void removeProject() {
try {
testerService.removeProject(selectedProject);
selectedProject = null;
projects = testerService.getAllProjects();
} catch (Exception e) {
FacesMessage message = new FacesMessage("Произошла ошибка при удалении");
message.setSeverity(FacesMessage.SEVERITY_ERROR);
FacesContext.getCurrentInstance().addMessage(null, message);
}
}
}
13 changes: 13 additions & 0 deletions src/main/java/ru/martha/autotesting/service/TesterService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package ru.martha.autotesting.service;

import ru.martha.autotesting.entity.Project;
import ru.martha.autotesting.entity.ProjectVersion;

import java.util.List;

public interface TesterService {
List<Project> getAllProjects();
List<ProjectVersion> getProjectVersions(Project project);
void createOrUpdateProject(Project project);
void removeProject(Project project);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package ru.martha.autotesting.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ru.martha.autotesting.entity.Project;
import ru.martha.autotesting.entity.ProjectVersion;
import ru.martha.autotesting.repository.ProjectsRepository;
import ru.martha.autotesting.service.TesterService;

import java.util.List;

@Service
@Transactional
public class TesterServiceImpl implements TesterService {

@Autowired
private ProjectsRepository projectsRepository;

@Override
public List<Project> getAllProjects() {
return projectsRepository.findAll();
}

@Override
public List<ProjectVersion> getProjectVersions(Project project) {
return projectsRepository.getOne(project.getId()).getVersions();
}

@Override
public void createOrUpdateProject(Project project) {
projectsRepository.save(project);
}

@Override
public void removeProject(Project project) {
projectsRepository.delete(project);
}
}
2 changes: 1 addition & 1 deletion src/main/webapp/accounts/accountsList.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
style="text-align: right">
<p:link href="#{request.contextPath}/logout" value="Выйти"/>
</p:panel>
<p:layout>
<p:layout styleClass="page-layout">
<p:layoutUnit position="west" style="max-width: 15%;">
<p:panel styleClass="no-border" style="text-align: right">
<p:commandButton value="Создать учетную запись"
Expand Down
76 changes: 74 additions & 2 deletions src/main/webapp/projects/projectsList.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,86 @@
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
>
xmlns:f="http://xmlns.jcp.org/jsf/core">

<h:head>
<title>Список проектов</title>
<h:outputStylesheet library="css" name="style.css"/>
</h:head>

<h:body>
<p:outputLabel value="Здесь будет список проектов"/>
<h:form>
<p:panel styleClass="no-padding no-border margin-bottom-15"
style="text-align: right">
<p:link href="#{request.contextPath}/logout" value="Выйти"/>
</p:panel>
<p:layout styleClass="page-layout">
<p:layoutUnit position="west" style="max-width: 15%;">
<p:panel styleClass="no-border no-padding margin-bottom-15" style="text-align: center;">
<p:commandButton value="Создать новый проект"
update="@form"
action="#{projectsController.createProject()}"/>
</p:panel>
<p:dataTable value="#{projectsController.projects}"
var="project"
selection="#{projectsController.selectedProject}"
selectionMode="single"
disabledSelection="#{projectsController.newProject}"
rowKey="#{project.id}"
emptyMessage="Проектов не найдено">
<p:ajax event="rowSelect" update="@form:content-pane"
listener="#{projectsController.onProjectSelected}"/>
<p:column headerText="Проекты">
<h:outputText value="#{project.name}"/>
<h:outputText value="#{project.creationDate}">
<f:convertDateTime pattern=" (dd.MM.yyyy)"/>
</h:outputText>
</p:column>
</p:dataTable>
</p:layoutUnit>
<p:layoutUnit position="center">
<p:panel id="content-pane" styleClass="no-padding no-border">
<p:panel rendered="#{projectsController.selectedProject != null}"
styleClass="no-border no-padding">
<p:panel styleClass="no-border no-padding margin-bottom-15">
<p:selectBooleanButton onLabel="Режим редактирования"
offLabel="Режим редактирования"
value="#{projectsController.editMode}"
rendered="#{!projectsController.newProject}">
<p:ajax update="content-pane"/>
</p:selectBooleanButton>
<p:commandButton value="Удалить"
action="#{projectsController.removeProject()}"
update="@form"
rendered="#{!projectsController.newProject}">
<p:confirm header="Удалить проект"
message="Вы уверены, что хотите удалить проект?"/>
</p:commandButton>
<p:commandButton value="Отмена"
action="#{projectsController.cancelCreateProject()}"
immediate="true"
rendered="#{projectsController.newProject}"
update="@form"/>
</p:panel>
<p:panelGrid columns="2" styleClass="no-padding no-border">
<p:outputLabel value="Название проекта" for="project-name"/>
<p:inputText id="project-name"
value="#{projectsController.selectedProject.name}"
readonly="#{!projectsController.editMode}"
required="true"/>
</p:panelGrid>
<p:commandButton value="Сохранить"
update="@form"
action="#{projectsController.saveProject()}"/>
</p:panel>
</p:panel>
</p:layoutUnit>
</p:layout>
<p:confirmDialog global="true">
<p:commandButton value="Да" type="button" styleClass="ui-confirmdialog-yes"/>
<p:commandButton value="Нет" type="button" styleClass="ui-confirmdialog-no"/>
</p:confirmDialog>
</h:form>
</h:body>

</html>
4 changes: 4 additions & 0 deletions src/main/webapp/resources/css/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
outline: none !important;
}

.page-layout {
min-height: 600px;
}

.ui-panelgrid > * > tr,
.ui-panelgrid > * > tr > td {
border: none !important;
Expand Down

0 comments on commit c7bd96b

Please sign in to comment.