Merge branch 'develop' into 019-responsiveJsps#67

This commit is contained in:
davsotpon 2021-04-10 02:02:32 +02:00 committed by GitHub
commit 07ae9c730a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
38 changed files with 920 additions and 529 deletions

View file

@ -1,7 +1,5 @@
package org.springframework.cheapy.configuration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import javax.servlet.http.HttpServletRequest;
@ -14,9 +12,6 @@ import javax.servlet.http.HttpServletRequest;
@ControllerAdvice
public class ExceptionHandlerConfiguration
{
@Autowired
private BasicErrorController errorController;
// add any exceptions/validations/binding problems
@ExceptionHandler(Exception.class)
public String defaultErrorHandler(HttpServletRequest request, Exception ex) {

View file

@ -21,6 +21,7 @@ import org.springframework.security.crypto.password.PasswordEncoder;
*/
@SuppressWarnings("deprecation")
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@ -35,12 +36,17 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
http.authorizeRequests().antMatchers("/resources/**", "/webjars/**", "/h2-console/**").permitAll()
.antMatchers(HttpMethod.GET, "/", "/oups").permitAll()
.antMatchers("/users/new").permitAll()
.antMatchers("/clients/new").permitAll()
.antMatchers("/clients/edit").hasAnyAuthority("client")
.antMatchers("/clients/disable").hasAnyAuthority("client")
.antMatchers("/login/**").anonymous()
.antMatchers("/logout").authenticated()
.antMatchers("/usuarios/new").permitAll()
.antMatchers("/admin/**").hasAnyAuthority("admin")
.antMatchers("/usuarios/**").hasAnyAuthority("usuario")
.antMatchers("/administrators/**").hasAnyAuthority("admin")
.antMatchers("/owners/**").hasAnyAuthority("owner", "admin")
@ -48,7 +54,6 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
.antMatchers("/offers/**/new").hasAnyAuthority("admin", "client")
.antMatchers("/offers/**/activate").hasAnyAuthority("admin","client")
.antMatchers("/clients/new").permitAll()
.antMatchers("/offers").permitAll()
.antMatchers("/offersCreate").hasAuthority("client")

View file

@ -1,15 +1,29 @@
package org.springframework.cheapy.model;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "administrators")
public class Administrator extends User{
public class Administrator extends BaseEntity{
/**
*
*/
private static final long serialVersionUID = 1L;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "username", referencedColumnName = "username")
private User usuar;
public User getUsuar() {
return usuar;
}
public void setUsuar(User usuar) {
this.usuar = usuar;
}
}

View file

@ -1,7 +1,6 @@
package org.springframework.cheapy.model;
import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;

View file

@ -1,69 +0,0 @@
package org.springframework.cheapy.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotEmpty;
import org.springframework.core.style.ToStringCreator;
@Entity
@Table(name = "owners")
public class Owner extends Person {
/**
*
*/
private static final long serialVersionUID = 1L;
@Column(name = "address")
@NotEmpty
private String address;
@Column(name = "city")
@NotEmpty
private String city;
@Column(name = "telephone")
@NotEmpty
@Digits(fraction = 0, integer = 10)
private String telephone;
public String getAddress() {
return this.address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCity() {
return this.city;
}
public void setCity(String city) {
this.city = city;
}
public String getTelephone() {
return this.telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
@Override
public String toString() {
return new ToStringCreator(this)
.append("id", this.getId()).append("new", this.isNew()).append("lastName", this.getLastName())
.append("firstName", this.getFirstName()).append("address", this.address).append("city", this.city)
.append("telephone", this.telephone).toString();
}
}

View file

@ -36,4 +36,11 @@ public class User{
this.password = password;
}
public boolean getEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
}

View file

@ -12,9 +12,9 @@ import javax.validation.constraints.NotBlank;
@Table(name = "usuarios")
public class Usuario extends BaseEntity{
/** nombre, apellidos, dni, direccion, telefono, email, username
* (id,nombre, apellidos, dni, direccion, telefono, email, usuar)
*/
/* nombre, apellidos, dni, direccion, telefono, email, username
(id,nombre, apellidos, dni, direccion, telefono, email, usuar)*/
private static final long serialVersionUID = 1L;
@NotBlank
@ -89,11 +89,11 @@ public class Usuario extends BaseEntity{
this.email = email;
}
public User getUser() {
public User getUsuar() {
return usuar;
}
public void setUser(User username) {
public void setUsuar(User username) {
this.usuar = username;
}

View file

@ -1 +0,0 @@
package org.springframework.cheapy.model;

View file

@ -1,14 +1,23 @@
package org.springframework.cheapy.repository;
import java.util.List;
import org.springframework.cheapy.model.Client;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.Repository;
import org.springframework.transaction.annotation.Transactional;
public interface ClientRepository extends CrudRepository<Client, String> {
public interface ClientRepository extends Repository<Client, String> {
@Query("SELECT client FROM Client client WHERE username =:username")
@Transactional(readOnly = true)
Client findByUsername(String username);
@Query("SELECT client FROM Client client")
@Transactional(readOnly = true)
List<Client> findAllClient();
void save(Client client);
}

View file

@ -2,7 +2,6 @@ package org.springframework.cheapy.repository;
import java.util.List;
import org.springframework.cheapy.model.FoodOffer;
import org.springframework.cheapy.model.NuOffer;
import org.springframework.cheapy.model.StatusOffer;
import org.springframework.data.repository.Repository;

View file

@ -1,65 +0,0 @@
/*
* Copyright 2012-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.cheapy.repository;
import java.util.Collection;
import org.springframework.cheapy.model.Owner;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.Repository;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;
/**
* Repository class for <code>Owner</code> domain objects All method names are compliant
* with Spring Data naming conventions so this interface can easily be extended for Spring
* Data. See:
* https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation
*
* @author Ken Krebs
* @author Juergen Hoeller
* @author Sam Brannen
* @author Michael Isvy
*/
public interface OwnerRepository extends Repository<Owner, Integer> {
/**
* Retrieve {@link Owner}s from the data store by last name, returning all owners
* whose last name <i>starts</i> with the given name.
* @param lastName Value to search for
* @return a Collection of matching {@link Owner}s (or an empty Collection if none
* found)
*/
@Query("SELECT DISTINCT owner FROM Owner owner WHERE owner.lastName LIKE :lastName%")
@Transactional(readOnly = true)
Collection<Owner> findByLastName(@Param("lastName") String lastName);
/**
* Retrieve an {@link Owner} from the data store by id.
* @param id the id to search for
* @return the {@link Owner} if found
*/
@Query("SELECT owner FROM Owner owner WHERE id =:id")
@Transactional(readOnly = true)
Owner findById(@Param("id") Integer id);
/**
* Save an {@link Owner} to the data store, either inserting or updating it.
* @param owner the {@link Owner} to save
*/
void save(Owner owner);
}

View file

@ -2,7 +2,6 @@ package org.springframework.cheapy.repository;
import java.util.List;
import org.springframework.cheapy.model.FoodOffer;
import org.springframework.cheapy.model.SpeedOffer;
import org.springframework.cheapy.model.StatusOffer;
import org.springframework.data.jpa.repository.Query;

View file

@ -0,0 +1,22 @@
package org.springframework.cheapy.repository;
import java.util.List;
import org.springframework.cheapy.model.Usuario;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.Repository;
import org.springframework.transaction.annotation.Transactional;
public interface UsuarioRepository extends Repository<Usuario, String> {
@Query("SELECT usuario FROM Usuario usuario WHERE username =:username")
@Transactional(readOnly = true)
Usuario findByUsername(String username);
@Query("SELECT usuario FROM Usuario usuario")
@Transactional(readOnly = true)
List<Usuario> findAllUsuario();
void save(Usuario usuario);
}

View file

@ -15,16 +15,7 @@
*/
package org.springframework.cheapy.service;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.cheapy.model.Authorities;
import org.springframework.cheapy.model.User;
import org.springframework.cheapy.repository.AuthoritiesRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class AuthoritiesService {

View file

@ -1,5 +1,7 @@
package org.springframework.cheapy.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cheapy.model.Client;
import org.springframework.cheapy.repository.ClientRepository;
@ -26,4 +28,16 @@ public class ClientService {
return this.clientRepository.findByUsername(username);
}
@Transactional
public Client findByUsername(String username) throws DataAccessException {
return this.clientRepository.findByUsername(username);
}
public void saveClient(final Client client) throws DataAccessException {
this.clientRepository.save(client);
}
@Transactional
public List<Client> findAllClient() throws DataAccessException {
return this.clientRepository.findAllClient();
}
}

View file

@ -1,34 +0,0 @@
package org.springframework.cheapy.service;
import java.util.Collection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cheapy.model.Owner;
import org.springframework.cheapy.repository.OwnerRepository;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
@Service
public class OwnerService {
private OwnerRepository ownerRepository;
@Autowired
public OwnerService(final OwnerRepository ownerRepository) {
this.ownerRepository = ownerRepository;
}
public Owner findOwnerById(final int id) {
return this.ownerRepository.findById(id);
}
public Collection<Owner> findByLastName(final String lastname) { //
return this.ownerRepository.findByLastName(lastname);
}
public void saveOwner(final Owner owner) throws DataAccessException { //
this.ownerRepository.save(owner);
}
}

View file

@ -4,10 +4,7 @@ import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cheapy.model.Review;
import org.springframework.cheapy.model.StatusOffer;
import org.springframework.cheapy.model.TimeOffer;
import org.springframework.cheapy.repository.ReviewRepository;
import org.springframework.cheapy.repository.TimeOfferRepository;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;

View file

@ -3,7 +3,6 @@ package org.springframework.cheapy.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cheapy.model.NuOffer;
import org.springframework.cheapy.model.SpeedOffer;
import org.springframework.cheapy.model.StatusOffer;
import org.springframework.cheapy.repository.SpeedOfferRepository;

View file

@ -0,0 +1,47 @@
package org.springframework.cheapy.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cheapy.model.Usuario;
import org.springframework.cheapy.repository.UsuarioRepository;
import org.springframework.dao.DataAccessException;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UsuarioService {
private UsuarioRepository usuarioRepository;
@Autowired
public UsuarioService(final UsuarioRepository usuarioRepository) {
this.usuarioRepository = usuarioRepository;
}
@Transactional
public Usuario getCurrentUsuario() throws DataAccessException {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String username = authentication.getName();
return this.usuarioRepository.findByUsername(username);
}
@Transactional
public Usuario findByUsername(String username) throws DataAccessException {
return this.usuarioRepository.findByUsername(username);
}
@Transactional
public List<Usuario> findAllUsuario() throws DataAccessException {
return this.usuarioRepository.findAllUsuario();
}
@Transactional
public void saveUsuario(final Usuario usuario) throws DataAccessException {
this.usuarioRepository.save(usuario);
}
}

View file

@ -0,0 +1,92 @@
package org.springframework.cheapy.web;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.cheapy.model.Client;
import org.springframework.cheapy.model.Usuario;
import org.springframework.cheapy.service.ClientService;
import org.springframework.cheapy.service.UsuarioService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class AdministratorController {
private static final String VIEWS_USUARIO_CREATE_OR_UPDATE_FORM = "usuarios/createOrUpdateUsuarioForm";
private final UsuarioService usuarioService;
private final ClientService clientService;
public AdministratorController(final UsuarioService usuarioService, ClientService clientService) {
this.usuarioService = usuarioService;
this.clientService=clientService;
}
@GetMapping("/administrators/usuarios")
public String processFindUsuariosForm(Map<String, Object> model) {
List<Usuario> usuarioLs = this.usuarioService.findAllUsuario();
model.put("usuarioLs", usuarioLs);
return "usuarios/usuariosList";
}
@GetMapping("/administrators/clients")
public String processFindClientesForm(Map<String, Object> model) {
List<Client> clientLs = this.clientService.findAllClient();
model.put("clientLs", clientLs);
return "clients/clientsList";
}
@GetMapping("/administrators/usuarios/{username}")
public String processUsuarioShowForm(@PathVariable("username") String username, Map<String, Object> model) {
Usuario usuario = this.usuarioService.findByUsername(username);
model.put("usuario", usuario);
return "usuarios/usuariosShow";
}
@GetMapping("/administrators/clients/{username}")
public String processClientShowForm(@PathVariable("username") String username, Map<String, Object> model) {
Client client = this.clientService.findByUsername(username);
model.put("client", client);
return "clients/clientShow";
}
@GetMapping(value = "/administrators/usuarios/{username}/disable")
public String disableUsuario(@PathVariable("username") final String username, final ModelMap model) {
Usuario usuario = this.usuarioService.findByUsername(username);
model.put("usuario", usuario);
return "usuarios/usuariosDisable";
}
@PostMapping(value = "/administrators/usuarios/{username}/disable")
public String disableUsuarioForm(@PathVariable("username") final String username, final ModelMap model, final HttpServletRequest request) {
Usuario usuario = this.usuarioService.findByUsername(username);
usuario.getUsuar().setEnabled(false);
this.usuarioService.saveUsuario(usuario);
return "redirect:/administrators/usuarios";
}
@GetMapping(value = "/administrators/clients/{username}/disable")
public String disableClient(@PathVariable("username") final String username, final ModelMap model) {
Client client = this.clientService.findByUsername(username);
model.put("client", client);
return "clients/clientDisable";
}
@PostMapping(value = "/administrators/clients/{username}/disable")
public String disableClientForm(@PathVariable("username") final String username, final ModelMap model, final HttpServletRequest request) {
Client client = this.clientService.findByUsername(username);
client.getUsuar().setEnabled(false);
this.clientService.saveClient(client);
return "redirect:/administrators/clients";
}
}

View file

@ -0,0 +1,144 @@
package org.springframework.cheapy.web;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.springframework.beans.BeanUtils;
import org.springframework.cheapy.model.Client;
import org.springframework.cheapy.model.FoodOffer;
import org.springframework.cheapy.model.NuOffer;
import org.springframework.cheapy.model.SpeedOffer;
import org.springframework.cheapy.model.StatusOffer;
import org.springframework.cheapy.model.TimeOffer;
import org.springframework.cheapy.service.ClientService;
import org.springframework.cheapy.service.FoodOfferService;
import org.springframework.cheapy.service.NuOfferService;
import org.springframework.cheapy.service.SpeedOfferService;
import org.springframework.cheapy.service.TimeOfferService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class ClientController {
private static final String VIEWS_CREATE_OR_UPDATE_CLIENT = "clients/createOrUpdateClientForm";
private final ClientService clientService;
private final FoodOfferService foodOfferService;
private final SpeedOfferService speedOfferService;
private final NuOfferService nuOfferService;
private final TimeOfferService timeOfferService;
public ClientController(final ClientService clientService, FoodOfferService foodOfferService,
SpeedOfferService speedOfferService, NuOfferService nuOfferService, TimeOfferService timeOfferService) {
this.clientService = clientService;
this.foodOfferService=foodOfferService;
this.speedOfferService=speedOfferService;
this.nuOfferService=nuOfferService;
this.timeOfferService=timeOfferService;
}
@GetMapping("/clients/show")
public String processShowForm(Map<String, Object> model) {
Client client = this.clientService.getCurrentClient();
model.put("client", client);
return "clients/clientShow";
}
@GetMapping(value = "/clients/edit")
public String updateClient( final ModelMap model, HttpServletRequest request) {
Client client = this.clientService.getCurrentClient();
model.addAttribute("client", client);
return ClientController.VIEWS_CREATE_OR_UPDATE_CLIENT;
}
@PostMapping(value = "/clients/edit")
public String updateClient(@Valid final Client clientEdit, final BindingResult result,
final ModelMap model, HttpServletRequest request) {
Client clienteSesion = this.clientService.getCurrentClient();
if (result.hasErrors()) {
model.addAttribute("client", clientEdit);
return ClientController.VIEWS_CREATE_OR_UPDATE_CLIENT;
}
BeanUtils.copyProperties(clienteSesion, clientEdit, "name", "email", "address","init", "finish","telephone", "description","food","usuar");
clientEdit.getUsuar().setUsername(clienteSesion.getUsuar().getUsername());
clientEdit.getUsuar().setEnabled(true);
this.clientService.saveClient(clientEdit);
return "redirect:/clients/show";
}
@GetMapping(value = "/clients/disable")
public String disableClient(final ModelMap model) {
Client client = this.clientService.getCurrentClient();
model.put("client", client);
return "/clients/clientDisable";
}
@PostMapping(value = "/clients/disable")
public String disableClientForm(final ModelMap model, HttpServletRequest request) {
Client client = this.clientService.getCurrentClient();
List<FoodOffer> foodOffers=this.foodOfferService.findFoodOfferByUserId(client.getId());
List<SpeedOffer> speedOffers=this.speedOfferService.findSpeedOfferByUserId(client.getId());
List<NuOffer> nuOffers=this.nuOfferService.findNuOfferByUserId(client.getId());
List<TimeOffer> timeOffers=this.timeOfferService.findTimeOfferByUserId(client.getId());
foodOffers.stream().forEach(f->f.setStatus(StatusOffer.inactive));
speedOffers.stream().forEach(s->s.setStatus(StatusOffer.inactive));
nuOffers.stream().forEach(n->n.setStatus(StatusOffer.inactive));
timeOffers.stream().forEach(t->t.setStatus(StatusOffer.inactive));
client.getUsuar().setEnabled(false);
this.clientService.saveClient(client);
try {
request.logout();
} catch (ServletException e) {
}
return "redirect:/login";
}
}

View file

@ -13,9 +13,6 @@ import org.springframework.cheapy.service.FoodOfferService;
import org.springframework.cheapy.service.NuOfferService;
import org.springframework.cheapy.service.SpeedOfferService;
import org.springframework.cheapy.service.TimeOfferService;
import org.springframework.security.authentication.AnonymousAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

View file

@ -1,118 +0,0 @@
package org.springframework.cheapy.web;
import java.util.Collection;
import java.util.Map;
import javax.validation.Valid;
import org.springframework.cheapy.model.Owner;
import org.springframework.cheapy.service.OwnerService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class OwnerController {
private static final String VIEWS_OWNER_CREATE_OR_UPDATE_FORM = "owners/createOrUpdateOwnerForm";
private final OwnerService ownerService;
public OwnerController(final OwnerService ownerService) {
this.ownerService = ownerService;
}
@InitBinder
public void setAllowedFields(WebDataBinder dataBinder) {
dataBinder.setDisallowedFields("id");
}
@GetMapping("/owners/new")
public String initCreationForm(Map<String, Object> model) {
Owner owner = new Owner();
model.put("owner", owner);
return VIEWS_OWNER_CREATE_OR_UPDATE_FORM;
}
@PostMapping("/owners/new")
public String processCreationForm(@Valid Owner owner, BindingResult result) {
if (result.hasErrors()) {
return VIEWS_OWNER_CREATE_OR_UPDATE_FORM;
}
else {
this.ownerService.saveOwner(owner);
return "redirect:/owners/" + owner.getId();
}
}
@GetMapping("/owners/find")
public String initFindForm(Map<String, Object> model) {
model.put("owner", new Owner());
return "owners/findOwners";
}
@GetMapping("/owners")
public String processFindForm(Owner owner, BindingResult result, Map<String, Object> model) {
// allow parameterless GET request for /owners to return all records
if (owner.getLastName() == null) {
owner.setLastName(""); // empty string signifies broadest possible search
}
// find owners by last name
Collection<Owner> results = this.ownerService.findByLastName(owner.getLastName());
if (results.isEmpty()) {
// no owners found
result.rejectValue("lastName", "notFound", "not found");
return "owners/findOwners";
}
else if (results.size() == 1) {
// 1 owner found
owner = results.iterator().next();
return "redirect:/owners/" + owner.getId();
}
else {
// multiple owners found
model.put("selections", results);
return "owners/ownersList";
}
}
@GetMapping("/owners/{ownerId}/edit")
public String initUpdateOwnerForm(@PathVariable("ownerId") int ownerId, Model model) {
Owner owner = this.ownerService.findOwnerById(ownerId);
model.addAttribute(owner);
return VIEWS_OWNER_CREATE_OR_UPDATE_FORM;
}
@PostMapping("/owners/{ownerId}/edit")
public String processUpdateOwnerForm(@Valid Owner owner, BindingResult result,
@PathVariable("ownerId") int ownerId) {
if (result.hasErrors()) {
return VIEWS_OWNER_CREATE_OR_UPDATE_FORM;
}
else {
owner.setId(ownerId);
this.ownerService.saveOwner(owner);
return "redirect:/owners/{ownerId}";
}
}
@GetMapping("/owners/{ownerId}")
public ModelAndView showOwner(@PathVariable("ownerId") int ownerId) {
ModelAndView mav = new ModelAndView("owners/ownerDetails");
Owner owner = this.ownerService.findOwnerById(ownerId);
mav.addObject(owner);
return mav;
}
}

View file

@ -0,0 +1,83 @@
package org.springframework.cheapy.web;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.springframework.beans.BeanUtils;
import org.springframework.cheapy.model.Usuario;
import org.springframework.cheapy.service.UsuarioService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class UsuarioController {
private static final String VIEWS_USUARIO_CREATE_OR_UPDATE_FORM = "usuarios/createOrUpdateUsuarioForm";
private final UsuarioService usuarioService;
public UsuarioController(final UsuarioService usuarioService) {
this.usuarioService = usuarioService;
}
@GetMapping("/usuarios/show")
public String processShowForm(Map<String, Object> model) {
Usuario usuario = this.usuarioService.getCurrentUsuario();
model.put("usuario", usuario);
return "usuarios/usuariosShow";
}
@GetMapping(value = "/usuarios/edit")
public String updateUsuario(final ModelMap model, HttpServletRequest request) {
Usuario usuario = this.usuarioService.getCurrentUsuario();
model.addAttribute("usuario", usuario);
return UsuarioController.VIEWS_USUARIO_CREATE_OR_UPDATE_FORM;
}
@PostMapping(value = "/usuarios/edit")
public String updateUsuario(@Valid final Usuario usuarioEdit, final BindingResult result,
final ModelMap model, HttpServletRequest request) {
Usuario usuario = this.usuarioService.getCurrentUsuario();
BeanUtils.copyProperties(usuario, usuarioEdit, "nombre", "apellidos", "dni", "direccion", "telefono", "usuar");
usuarioEdit.getUsuar().setUsername(usuario.getNombre());
usuarioEdit.getUsuar().setEnabled(true);
this.usuarioService.saveUsuario(usuarioEdit);
return "redirect:/usuarios/show";
}
@GetMapping(value = "/usuarios/disable")
public String disableUsuario(final ModelMap model) {
Usuario usuario = this.usuarioService.getCurrentUsuario();
model.put("usuario", usuario);
return "usuarios/usuariosDisable";
}
@PostMapping(value = "/usuarios/disable")
public String disableUsuarioForm(final ModelMap model, final HttpServletRequest request) {
Usuario usuario = this.usuarioService.getCurrentUsuario();
usuario.getUsuar().setEnabled(false);
this.usuarioService.saveUsuario(usuario);
try {
request.logout();
} catch (ServletException e) {
e.printStackTrace();
}
return "redirect:/login";
}
}

View file

@ -1,33 +1,23 @@
INSERT INTO owners VALUES (1, 'Javi', 'Franklin', '110 W. Liberty St.', 'Madison', '6085551023');
INSERT INTO owners VALUES (2, 'Betty', 'Davis', '638 Cardinal Ave.', 'Sun Prairie', '6085551749');
INSERT INTO owners VALUES (3, 'Eduardo', 'Rodriquez', '2693 Commerce St.', 'McFarland', '6085558763');
INSERT INTO owners VALUES (4, 'Harold', 'Davis', '563 Friendly St.', 'Windsor', '6085553198');
INSERT INTO owners VALUES (5, 'Peter', 'McTavish', '2387 S. Fair Way', 'Madison', '6085552765');
INSERT INTO owners VALUES (6, 'Jean', 'Coleman', '105 N. Lake St.', 'Monona', '6085552654');
INSERT INTO owners VALUES (7, 'Jeff', 'Black', '1450 Oak Blvd.', 'Monona', '6085555387');
INSERT INTO owners VALUES (8, 'Maria', 'Escobito', '345 Maple St.', 'Madison', '6085557683');
INSERT INTO owners VALUES (9, 'David', 'Schroeder', '2749 Blackhawk Trail', 'Madison', '6085559435');
INSERT INTO owners VALUES (10, 'Carlos', 'Estaban', '2335 Independence La.', 'Waunakee', '6085555487');
INSERT INTO users (dtype,username,password,enabled) VALUES ('User','admin','admin', TRUE );
INSERT INTO users (username,password,enabled) VALUES ('admin','admin', TRUE );
INSERT INTO authorities VALUES ('admin','admin');
INSERT INTO users (dtype,username,password,enabled) VALUES ('User','manoli','manoli', TRUE );
INSERT INTO users (username,password,enabled) VALUES ('manoli','manoli', TRUE );
INSERT INTO authorities VALUES ('manoli','client');
INSERT INTO users (dtype,username,password,enabled) VALUES ('User','david','david', TRUE );
INSERT INTO users (username,password,enabled) VALUES ('david','david', TRUE );
INSERT INTO authorities VALUES ('david','client');
INSERT INTO users (dtype,username,password,enabled) VALUES ('User','paco','paco', TRUE );
INSERT INTO users (username,password,enabled) VALUES ('paco','paco', TRUE );
INSERT INTO authorities VALUES ('paco','usuario');
INSERT INTO users (dtype,username,password,enabled) VALUES ('User','lolo','lolo', TRUE );
INSERT INTO users (username,password,enabled) VALUES ('lolo','lolo', TRUE );
INSERT INTO authorities VALUES ('lolo','usuario');
INSERT INTO users (dtype,username,password,enabled) VALUES ('User','pepe','pepe', TRUE );
INSERT INTO users (username,password,enabled) VALUES ('pepe','pepe', TRUE );
INSERT INTO authorities VALUES ('pepe','usuario');
INSERT INTO usuarios VALUES (1, 'admin', 'admin', 'admin', 'C/admin', '000000000', 'admin@gmail.com','admin');
INSERT INTO usuarios VALUES (2, 'Paco', 'Naranjo', '21154416G', 'C/Esperanza', '666973647', 'Paco@gmail.com','paco');
INSERT INTO usuarios VALUES (3, 'Lolo', 'Lopez', '25486596L', 'C/Macarena', '690670547' ,'Lolo@gmail.com','lolo');
INSERT INTO usuarios VALUES (4, 'Pepe', 'Lopez', '12456776V', 'C/Macarena', '690670547', 'Pepe@gmail.com','pepe');
INSERT INTO administrators (id, username) VALUES (1, 'admin');
INSERT INTO usuarios (id, nombre, apellidos, dni, direccion, telefono, email, username) VALUES (2, 'Paco', 'Naranjo', '21154416G', 'C/Esperanza', '666973647', 'Paco@gmail.com','paco');
INSERT INTO usuarios (id, nombre, apellidos, dni, direccion, telefono, email, username) VALUES (3, 'Lolo', 'Lopez', '25486596L', 'C/Macarena', '690670547' ,'Lolo@gmail.com','lolo');
INSERT INTO usuarios (id, nombre, apellidos, dni, direccion, telefono, email, username) VALUES (4, 'Pepe', 'Lopez', '12456776V', 'C/Macarena', '690670547', 'Pepe@gmail.com','pepe');
INSERT INTO clients (id, name, email, address, init, finish, telephone, description, code, food, username) VALUES (1,'bar manoli','manoli@gmail.com','C/Betis','10:00','22:00','608726190', 'description 1', 'code1', 'ESPAÑOLA','manoli');
INSERT INTO clients (id, name, email, address, init, finish, telephone, description, code, food, username) VALUES (2,'bar david','david@gmail.com','C/Sevilla','09:30','22:00','608726190', 'description 2', 'code2', 'americana','david');

View file

@ -1,9 +0,0 @@
CREATE TABLE IF NOT EXISTS owners (
id INT(4) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(30),
last_name VARCHAR(30),
address VARCHAR(255),
city VARCHAR(80),
telephone VARCHAR(20),
INDEX(last_name)
) engine=InnoDB;

View file

@ -0,0 +1,25 @@
<%@ page session="false" trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="cheapy" tagdir="/WEB-INF/tags"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<cheapy:layout pageName="client">
<jsp:body>
<h2 class="text-center" style="font-family: 'Lobster'; font-size: 30px; color: rgb(0, 64, 128); padding:30px"><em>¿Está seguro de que quiere eliminar su cuenta?</em></h2>
<form:form modelAttribute="client" class="form-horizontal">
<div class="btns-edit2">
<button type="submit" style="font-family: 'Lobster'; font-size: 20px;">
<span class="glyphicon glyphicon glyphicon-trash" aria-hidden="true" style="padding: 5px"> </span>
Dar de baja</button>
</div>
</form:form>
</jsp:body>
</cheapy:layout>

View file

@ -0,0 +1,87 @@
<%@ page session="false" trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="cheapy" tagdir="/WEB-INF/tags" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<link href='https://fonts.googleapis.com/css?family=Lobster' rel='stylesheet'>
<cheapy:layout pageName="client">
<h2 style="text-align:center;padding:5px"><fmt:message key="client"/></h2>
<table class="table table-striped" id="clientTable">
<thead>
<tr>
<th><fmt:message key="clientInit"/></th>
<td><c:out value="${client.init}"/></td>
</tr>
<tr>
<th><fmt:message key="clientFinish"/></th>
<td><c:out value="${client.finish}"/></td>
</tr>
<tr>
<th><fmt:message key="nameClient"/></th>
<td><c:out value="${client.name}"/></td>
</tr>
<tr>
<th><fmt:message key="emailClient"/></th>
<td><c:out value="${client.email}%"/> </td>
</tr>
<tr>
<th><fmt:message key="addressClient"/></th>
<td><c:out value="${client.address}%"/> </td>
</tr><tr>
<th><fmt:message key="telephoneClient"/></th>
<td><c:out value="${client.telephone}%"/> </td>
</tr><tr>
<th><fmt:message key="descriptionClient"/></th>
<td><c:out value="${client.description}%"/> </td>
</tr><tr>
<th><fmt:message key="foodClient"/></th>
<td><c:out value="${client.food}%"/> </td>
</tr>
</thead>
</table>
<div class="btn-menu">
<sec:authorize access="hasAnyAuthority('client')">
<sec:authentication var="principal" property="principal" />
<div class="btns-edit">
<spring:url value="edit" var="editUrl"/>
<button type="button" role="link" onclick="window.location='${fn:escapeXml(editUrl)}'" style="font-family: 'Lobster'; font-size: 20px;">
<span class="glyphicon glyphicon glyphicon-edit" aria-hidden="true" style="padding: 5px"> </span>
Editar cliente</button>
<spring:url value="disable" var="disableUrl"/>
<button type="button" role="link" onclick="window.location='${fn:escapeXml(disableUrl)}'" style="font-family: 'Lobster'; font-size: 20px;">
<span class="glyphicon glyphicon glyphicon-edit" aria-hidden="true" style="padding: 5px"> </span>
Borrar cliente</button>
</div>
</sec:authorize>
<sec:authorize access="hasAnyAuthority('admin')">
<sec:authentication var="principal" property="principal" />
<div class="btns-edit">
<spring:url value="/administrators/clients/{username}/disable" var="deactivateUrl">
<spring:param name="username" value="${client.usuar.username}"/>
</spring:url>
<button type="button" role="link" onclick="window.location='${fn:escapeXml(deactivateUrl)}'" style="font-family: 'Lobster'; font-size: 20px;">
<span class="glyphicon glyphicon glyphicon-trash" aria-hidden="true" style="padding: 5px"> </span>
Desactivar cliente</button>
</div>
</sec:authorize>
</div>
</cheapy:layout>

View file

@ -0,0 +1,55 @@
<%@ page session="false" trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="cheapy" tagdir="/WEB-INF/tags" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<link href='https://fonts.googleapis.com/css?family=Lobster' rel='stylesheet'>
<cheapy:layout pageName="clients">
<h2 style="text-align:center;padding:5px"><fmt:message key="clients"/></h2>
<c:if test="${empty clientLs }">
<p id="vacio" >No hay ningun Cliente.</p>
</c:if>
<c:if test="${not empty clientLs }">
<table id="clientTable" class="table table-striped">
<thead>
<tr>
<th><fmt:message key="nameClient"/></th>
<th><fmt:message key="username"/></th>
<th><fmt:message key="enabled"/></th>
<th> </th>
</tr>
</thead>
<tbody>
<c:forEach items="${clientLs}" var="client">
<tr>
<td>
<c:out value="${client.name}"/>
</td>
<td>
<c:out value="${client.usuar.username}"/>
</td>
<td>
<c:out value="${client.usuar.enabled}"/>
</td>
<td>
<spring:url value="/administrators/clients/{username}" var="clientUrl">
<spring:param name="username" value="${client.usuar.username}"/>
</spring:url>
<div class="btn-detalles">
<button type="button" role="link" onclick="window.location='${fn:escapeXml(clientUrl)}'" style="font-family: 'Lobster'; font-size: 20px;">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true" style="padding: 5px"> </span>
<fmt:message key="details"/></button>
</div>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</c:if>
</cheapy:layout>

View file

@ -0,0 +1,51 @@
<%@ page session="false" trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="cheapy" tagdir="/WEB-INF/tags" %>
<link href='https://fonts.googleapis.com/css?family=Lobster' rel='stylesheet'>
<cheapy:layout pageName="clients">
<h2 style="text-align:center;padding:5px">
<c:if test="${client['new']}"><fmt:message key="new"/> </c:if> <fmt:message key="client"/>
</h2>
<form:form modelAttribute="client" class="form-horizontal" id="add-client-form">
<div class="form-group has-feedback">
<form:hidden path="code"/>
<cheapy:inputField label="Contraseña" placeholder="Restaurante pepito" name="usuar.password"/>
<cheapy:inputField label="Hora de inicio" placeholder="HH:mm" name="init"/>
<cheapy:inputField label="Hora de fin" placeholder="HH:mm" name="finish"/>
<cheapy:inputField label="Name" placeholder="Restaurante pepito" name="name"/>
<cheapy:inputField label="Email" placeholder="" name="email"/>
<cheapy:inputField label="Dirección" placeholder="" name="address"/>
<cheapy:inputField label="telephone" placeholder="" name="telephone"/>
<cheapy:inputField label="description" placeholder="" name="description"/>
<cheapy:inputField label="food" placeholder="food" name="food"/>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="btn-mod">
<c:choose>
<c:when test="${client['new']}">
<button class="btn btn-default" type="submit" style="font-family: 'Lobster'; font-size: 20px;">
<span class="glyphicon glyphicon-floppy-save" aria-hidden="true" style="padding: 5px"> </span>
Crear cliente</button>
</c:when>
<c:otherwise>
<button class="btn btn-default" type="submit" style="font-family: 'Lobster'; font-size: 20px;">
<span class="glyphicon glyphicon-floppy-save" aria-hidden="true" style="padding: 5px"> </span>
Modificar</button>
</c:otherwise>
</c:choose>
</div>
</div>
</div>
</form:form>
</cheapy:layout>

View file

@ -0,0 +1,45 @@
<%@ page session="false" trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="cheapy" tagdir="/WEB-INF/tags" %>
<link href='https://fonts.googleapis.com/css?family=Lobster' rel='stylesheet'>
<cheapy:layout pageName="usuarios">
<h2 style="text-align:center;padding:5px">
<c:if test="${usuario['new']}"><fmt:message key="new"/> </c:if> <fmt:message key="usuario"/>
</h2>
<form:form modelAttribute="usuario" class="form-horizontal" id="add-usuario-form">
<div class="form-group has-feedback">
<cheapy:inputField label="Nombre" name="nombre"/>
<cheapy:inputField label="Apellidos" name="apellidos"/>
<cheapy:inputField label="DNI" name="dni"/>
<cheapy:inputField label="Direccion" name="direccion"/>
<cheapy:inputField label="Telefono" name="telefono"/>
<cheapy:inputField label="Email" name="email"/>
<cheapy:inputField label="Password" name="usuar.password"/>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="btn-mod">
<c:choose>
<c:when test="${usuario['new']}">
<button class="btn btn-default" type="submit" style="font-family: 'Lobster'; font-size: 20px;">
<span class="glyphicon glyphicon-floppy-save" aria-hidden="true" style="padding: 5px"> </span>
Crear usuario</button>
</c:when>
<c:otherwise>
<button class="btn btn-default" type="submit" style="font-family: 'Lobster'; font-size: 20px;">
<span class="glyphicon glyphicon-floppy-save" aria-hidden="true" style="padding: 5px"> </span>
Modificar</button>
</c:otherwise>
</c:choose>
</div>
</div>
</div>
</form:form>
</cheapy:layout>

View file

@ -0,0 +1,26 @@
<%@ page session="false" trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="cheapy" tagdir="/WEB-INF/tags"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<cheapy:layout pageName="usuario">
<jsp:body>
<h2 class="text-center" style="font-family: 'Lobster'; font-size: 30px; color: rgb(0, 64, 128); padding:30px"><em>¿Está seguro de que quiere eliminar su cuenta?</em></h2>
<form:form modelAttribute="usuario" class="form-horizontal">
<div class="btns-edit2">
<button type="submit" style="font-family: 'Lobster'; font-size: 20px;">
<span class="glyphicon glyphicon glyphicon-trash" aria-hidden="true" style="padding: 5px"> </span>
Dar de baja</button>
</div>
</form:form>
</jsp:body>
</cheapy:layout>

View file

@ -0,0 +1,57 @@
<%@ page session="false" trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="cheapy" tagdir="/WEB-INF/tags" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<link href='https://fonts.googleapis.com/css?family=Lobster' rel='stylesheet'>
<cheapy:layout pageName="usuarios">
<h2 style="text-align:center;padding:5px"><fmt:message key="usuarios"/></h2>
<c:if test="${empty usuarioLs }">
<p id="vacio" >No hay ningun usuario.</p>
</c:if>
<c:if test="${not empty usuarioLs }">
<table id="usuarioTable" class="table table-striped">
<thead>
<tr>
<th><fmt:message key="nombre"/></th>
<th><fmt:message key="apellidos"/></th>
<th><fmt:message key="username"/></th>
<th><fmt:message key="enabled"/></th>
<th> </th>
</tr>
</thead>
<tbody>
<c:forEach items="${usuarioLs}" var="usuario">
<tr>
<td>
<c:out value="${usuario.nombre}"/>
</td>
<td>
<c:out value="${usuario.apellidos}"/>
</td>
<td>
<c:out value="${usuario.usuar.username}"/>
</td>
<td>
<c:out value="${usuario.usuar.enabled}"/>
</td>
<td>
<spring:url value="/administrators/usuarios/{username}" var="usuarioUrl">
<spring:param name="username" value="${usuario.usuar.username}"/>
</spring:url>
<div class="btn-detalles">
<button type="button" role="link" onclick="window.location='${fn:escapeXml(usuarioUrl)}'" style="font-family: 'Lobster'; font-size: 20px;">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true" style="padding: 5px"> </span>
<fmt:message key="details"/></button>
</div>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</c:if>
</cheapy:layout>

View file

@ -0,0 +1,74 @@
<%@ page session="false" trimDirectiveWhitespaces="true" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="cheapy" tagdir="/WEB-INF/tags" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<link href='https://fonts.googleapis.com/css?family=Lobster' rel='stylesheet'>
<cheapy:layout pageName="usuario">
<h2 style="text-align:center;padding:5px"><fmt:message key="usuario"/></h2>
<table class="table table-striped" id="usuarioTable">
<thead>
<tr>
<th><fmt:message key="nombre"/></th>
<td><c:out value="${usuario.nombre}"/></td>
</tr>
<tr>
<th><fmt:message key="apellidos"/></th>
<td><c:out value="${usuario.apellidos}"/></td>
</tr>
<tr>
<th><fmt:message key="dni"/></th>
<td><c:out value="${usuario.dni}"/></td>
</tr>
<tr>
<th><fmt:message key="direccion"/></th>
<td><c:out value="${usuario.direccion}"/> </td>
</tr>
<tr>
<th><fmt:message key="telefono"/></th>
<td><c:out value="${usuario.telefono}"/></td>
</tr>
<tr>
<th><fmt:message key="email"/></th>
<td><c:out value="${usuario.email}"/></td>
</tr>
</thead>
</table>
<div class="btn-menu">
<sec:authorize access="hasAnyAuthority('usuario')">
<sec:authentication var="principal" property="principal" />
<div class="btns-edit">
<spring:url value="edit" var="editUrl"/>
<button type="button" role="link" onclick="window.location='${fn:escapeXml(editUrl)}'" style="font-family: 'Lobster'; font-size: 20px;">
<span class="glyphicon glyphicon glyphicon-edit" aria-hidden="true" style="padding: 5px"> </span>
Editar usuario</button>
<spring:url value="disable" var="deactivateUrl"/>
<button type="button" role="link" onclick="window.location='${fn:escapeXml(deactivateUrl)}'" style="font-family: 'Lobster'; font-size: 20px;">
<span class="glyphicon glyphicon glyphicon-trash" aria-hidden="true" style="padding: 5px"> </span>
Desactivar usuario</button>
</div>
</sec:authorize>
<sec:authorize access="hasAnyAuthority('admin')">
<sec:authentication var="principal" property="principal" />
<div class="btns-edit">
<spring:url value="/administrators/usuarios/{username}/disable" var="deactivateUrl">
<spring:param name="username" value="${usuario.usuar.username}"/>
</spring:url>
<button type="button" role="link" onclick="window.location='${fn:escapeXml(deactivateUrl)}'" style="font-family: 'Lobster'; font-size: 20px;">
<span class="glyphicon glyphicon glyphicon-trash" aria-hidden="true" style="padding: 5px"> </span>
Desactivar usuario</button>
</div>
</sec:authorize>
</div>
</cheapy:layout>

View file

@ -23,19 +23,33 @@
<fmt:message key="listOffers"/> </button>
</div>
<sec:authorize access="hasAnyAuthority('client')">
<div class="btn-home">
<button type="button" role="link" onclick="window.location='/myOffers'" style="font-family: 'Lobster'; font-size: 20px;margin:5px;" class="btn-block">
<span class="glyphicon glyphicon-cutlery" aria-hidden="true" style="padding: 5px"> </span>
<fmt:message key="myOffers"/> </button>
</div>
<div class="btn-home">
<button type="button" role="link" onclick="window.location='/offersCreate'" style="font-family: 'Lobster'; font-size: 20px;margin:5px;" class="btn-block">
<span class="glyphicon glyphicon-cutlery" aria-hidden="true" style="padding: 5px"> </span>
<fmt:message key="createOffers"/> </button>
</div>
</sec:authorize>
</div>
<sec:authorize access="hasAnyAuthority('client')">
<div class="btn-home">
<button type="button" role="link" onclick="window.location='/myOffers'" style="font-family: 'Lobster'; font-size: 20px;margin:5px;" class="btn-block">
<span class="glyphicon glyphicon-cutlery" aria-hidden="true" style="padding: 5px"> </span>
<fmt:message key="myOffers"/> </button>
</div>
<div class="btn-home">
<button type="button" role="link" onclick="window.location='/offersCreate'" style="font-family: 'Lobster'; font-size: 20px;margin:5px;" class="btn-block">
<span class="glyphicon glyphicon-cutlery" aria-hidden="true" style="padding: 5px"> </span>
<fmt:message key="createOffers"/> </button>
</div>
<div class="btn-home">
<button type="button" role="link" onclick="window.location='/clients/show'" style="font-family: 'Lobster'; font-size: 20px;margin:5px;">
<span class="glyphicon glyphicon-cutlery" aria-hidden="true" style="padding: 5px"> </span>
<fmt:message key="clientShow"/> </button>
</div>
</sec:authorize>
</div>
<sec:authorize access="hasAnyAuthority('usuario')">
<div class="btn-home">
<button type="button" role="link" onclick="window.location='/usuarios/show'" style="font-family: 'Lobster'; font-size: 20px;margin:5px;">
<span class="glyphicon glyphicon-cutlery" aria-hidden="true" style="padding: 5px"> </span>
<fmt:message key="showUsuario"/> </button>
</div>
</sec:authorize>
</div>
</div>
</cheapy:layout>
</cheapy:layout>

View file

@ -39,6 +39,20 @@
<span>Mis ofertas</span>
</cheapy:menuItem>
</sec:authorize>
<sec:authorize access="hasAnyAuthority('admin')">
<cheapy:menuItem active="${name eq 'clientes'}" url="/administrators/clients" title="clients">
<span class="glyphicon " aria-hidden="true"></span>
<span>Clientes</span>
</cheapy:menuItem>
</sec:authorize>
<sec:authorize access="hasAnyAuthority('admin')">
<cheapy:menuItem active="${name eq 'usuarios'}" url="/administrators/usuarios" title="usuarios">
<span class="glyphicon " aria-hidden="true"></span>
<span>Usuarios</span>
</cheapy:menuItem>
</sec:authorize>
<!--
<cheapy:menuItem active="${name eq 'contactanos'}" url="/contactanos"
title="contactanos">

View file

@ -16,8 +16,6 @@
package org.springframework.cheapy.integration;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

View file

@ -1,162 +0,0 @@
/*
* Copyright 2012-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
package org.springframework.cheapy.web;
import static org.hamcrest.Matchers.hasProperty;
import static org.hamcrest.Matchers.is;
import static org.mockito.BDDMockito.given;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
import org.assertj.core.util.Lists;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.cheapy.model.Owner;
import org.springframework.cheapy.service.OwnerService;
import org.springframework.test.web.servlet.MockMvc;
/**
* Test class for {@link OwnerController}
*
* @author Colin But
*/
/*
@WebMvcTest(OwnerController.class)
class OwnerControllerTests {
/*private static final int TEST_OWNER_ID = 1;
@Autowired
private MockMvc mockMvc;
@MockBean
private OwnerService ownerService;
private Owner george;
@BeforeEach
void setup() {
george = new Owner();
george.setId(TEST_OWNER_ID);
george.setFirstName("George");
george.setLastName("Franklin");
george.setAddress("110 W. Liberty St.");
george.setCity("Madison");
george.setTelephone("6085551023");
given(this.ownerService.findOwnerById(TEST_OWNER_ID)).willReturn(george);
}
@Test
void testInitCreationForm() throws Exception {
mockMvc.perform(get("/owners/new")).andExpect(status().isOk()).andExpect(model().attributeExists("owner"))
.andExpect(view().name("owners/createOrUpdateOwnerForm"));
}
@Test
void testProcessCreationFormSuccess() throws Exception {
mockMvc.perform(post("/owners/new").param("firstName", "Joe").param("lastName", "Bloggs")
.param("address", "123 Caramel Street").param("city", "London").param("telephone", "01316761638"))
.andExpect(status().is3xxRedirection());
}
@Test
void testProcessCreationFormHasErrors() throws Exception {
mockMvc.perform(
post("/owners/new").param("firstName", "Joe").param("lastName", "Bloggs").param("city", "London"))
.andExpect(status().isOk()).andExpect(model().attributeHasErrors("owner"))
.andExpect(model().attributeHasFieldErrors("owner", "address"))
.andExpect(model().attributeHasFieldErrors("owner", "telephone"))
.andExpect(view().name("owners/createOrUpdateOwnerForm"));
}
@Test
void testInitFindForm() throws Exception {
mockMvc.perform(get("/owners/find")).andExpect(status().isOk()).andExpect(model().attributeExists("owner"))
.andExpect(view().name("owners/findOwners"));
}
@Test
void testProcessFindFormSuccess() throws Exception {
given(this.ownerService.findByLastName("")).willReturn(Lists.newArrayList(george, new Owner()));
mockMvc.perform(get("/owners")).andExpect(status().isOk()).andExpect(view().name("owners/ownersList"));
}
@Test
void testProcessFindFormByLastName() throws Exception {
given(this.ownerService.findByLastName(george.getLastName())).willReturn(Lists.newArrayList(george));
mockMvc.perform(get("/owners").param("lastName", "Franklin")).andExpect(status().is3xxRedirection())
.andExpect(view().name("redirect:/owners/" + TEST_OWNER_ID));
}
@Test
void testProcessFindFormNoOwnersFound() throws Exception {
mockMvc.perform(get("/owners").param("lastName", "Unknown Surname")).andExpect(status().isOk())
.andExpect(model().attributeHasFieldErrors("owner", "lastName"))
.andExpect(model().attributeHasFieldErrorCode("owner", "lastName", "notFound"))
.andExpect(view().name("owners/findOwners"));
}
@Test
void testInitUpdateOwnerForm() throws Exception {
mockMvc.perform(get("/owners/{ownerId}/edit", TEST_OWNER_ID)).andExpect(status().isOk())
.andExpect(model().attributeExists("owner"))
.andExpect(model().attribute("owner", hasProperty("lastName", is("Franklin"))))
.andExpect(model().attribute("owner", hasProperty("firstName", is("George"))))
.andExpect(model().attribute("owner", hasProperty("address", is("110 W. Liberty St."))))
.andExpect(model().attribute("owner", hasProperty("city", is("Madison"))))
.andExpect(model().attribute("owner", hasProperty("telephone", is("6085551023"))))
.andExpect(view().name("owners/createOrUpdateOwnerForm"));
}
@Test
void testProcessUpdateOwnerFormSuccess() throws Exception {
mockMvc.perform(post("/owners/{ownerId}/edit", TEST_OWNER_ID).param("firstName", "Joe")
.param("lastName", "Bloggs").param("address", "123 Caramel Street").param("city", "London")
.param("telephone", "01616291589")).andExpect(status().is3xxRedirection())
.andExpect(view().name("redirect:/owners/{ownerId}"));
}
@Test
void testProcessUpdateOwnerFormHasErrors() throws Exception {
mockMvc.perform(post("/owners/{ownerId}/edit", TEST_OWNER_ID).param("firstName", "Joe")
.param("lastName", "Bloggs").param("city", "London")).andExpect(status().isOk())
.andExpect(model().attributeHasErrors("owner"))
.andExpect(model().attributeHasFieldErrors("owner", "address"))
.andExpect(model().attributeHasFieldErrors("owner", "telephone"))
.andExpect(view().name("owners/createOrUpdateOwnerForm"));
}
@Test
void testShowOwner() throws Exception {
mockMvc.perform(get("/owners/{ownerId}", TEST_OWNER_ID)).andExpect(status().isOk())
.andExpect(model().attribute("owner", hasProperty("lastName", is("Franklin"))))
.andExpect(model().attribute("owner", hasProperty("firstName", is("George"))))
.andExpect(model().attribute("owner", hasProperty("address", is("110 W. Liberty St."))))
.andExpect(model().attribute("owner", hasProperty("city", is("Madison"))))
.andExpect(model().attribute("owner", hasProperty("telephone", is("6085551023"))))
.andExpect(view().name("owners/ownerDetails"));
}*/