Skip to content

Commit

Permalink
Merge pull request #7 from puncha/develop
Browse files Browse the repository at this point in the history
Release v1.1.0
  • Loading branch information
PunChaFeng authored Sep 16, 2016
2 parents caf4039 + b853c6d commit 118c1a5
Show file tree
Hide file tree
Showing 106 changed files with 2,701 additions and 475 deletions.
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,10 @@ hs_err_pid*
bower_components/
node_modules/
out/

# Ignore javascript files generated by typescript compilers
src/main/webapp/resources/ng2/**/*.js
src/main/webapp/resources/ng2/**/*.js.map

# Ignore downloaded typings
src/main/webapp/resources/ng2/typings
18 changes: 16 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Pet Clinic by Spring Boot in Java v1.0.0
# Pet Clinic by Spring Boot in Java v1.1.0

------

Expand All @@ -11,6 +11,18 @@ Implement the Spring 4 Sample Pet Clinic project for practice.
3. CodeShip CI: [![Build Status](https://codeship.com/projects/4b274a90-45f7-0134-2d77-0aad117e5610/status)](https://codeship.com/projects/168779)
4. Heroku Demo: https://java-petclinic.herokuapp.com/

## Features
It contains three versions:
- SpringMVC + Jsp (backend rendering)
- SpringMVC Restful + AngularJs1 + Bootstrap4
- SpringMVC Restful + Angular2 + Bootstrap4 (TypeScript)

## Install
```bash
cd src/main/webapp/resources/ng2
npm i
```

## Run
```bash
./gradlew bootRun
Expand All @@ -22,7 +34,7 @@ Implement the Spring 4 Sample Pet Clinic project for practice.
```

## Cross platform desktop app
Install nodejs 6.x first and run:
Install NodeJs 6.x first and run:
```bash
cd src/main/electron_app/
npm i
Expand All @@ -36,6 +48,8 @@ node_modules/.bin/electron .
- Official Site: http://projects.spring.io/spring-roo/

## Change Logs
- v1.1.0:
- Angular2 version is added.
- v1.0.0:
- CSS is changed to Bootstrap 4 alpha3.
- Form validation is added.
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/tk/puncha/configuration/WebConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import org.springframework.web.servlet.view.XmlViewResolver;
import tk.puncha.handlers.MyErrorViewResolver;
import tk.puncha.viewResolvers.MyErrorViewResolver;
import tk.puncha.viewResolvers.AtomFeedViewResolver;
import tk.puncha.viewResolvers.ExcelViewResolver;
import tk.puncha.viewResolvers.JsonViewResolver;
Expand All @@ -39,6 +39,7 @@ public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/ng1/**").addResourceLocations("/resources/ng1/");
registry.addResourceHandler("/ng2/**").addResourceLocations("/resources/ng2/");
}

@Override
Expand Down
14 changes: 7 additions & 7 deletions src/main/java/tk/puncha/controllers/OwnerController.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ public void dataBinding(WebDataBinder binder) {
public ModelAndView index(@RequestParam(name = "search-first-name", required = false) String firstNameToSearch) {
List<Owner> owners;
if (firstNameToSearch == null || firstNameToSearch.isEmpty())
owners = ownerRepository.getAllOwners();
owners = ownerRepository.getAll();
else
owners = ownerRepository.getOwnersByFirstName(firstNameToSearch);
owners = ownerRepository.findByFirstName(firstNameToSearch);

ModelAndView modelView = new ModelAndView();
modelView.addObject("owners", owners);
Expand All @@ -52,7 +52,7 @@ public ModelAndView index(@RequestParam(name = "search-first-name", required = f

@GetMapping("{ownerId}")
public ModelAndView view(@PathVariable int ownerId) {
Owner owner = ownerRepository.getOwnerWithPetsById(ownerId);
Owner owner = ownerRepository.getByIdWithPets(ownerId);
ensureExist(owner);
return createFormModelView("owner/viewOrEdit", owner, FormMode.Readonly);
}
Expand All @@ -70,22 +70,22 @@ public String createOrUpdate(@Valid Owner owner, BindingResult bindingResult, Mo
}

if (owner.getId() == -1)
ownerRepository.insertOwner(owner);
ownerRepository.insert(owner);
else
ownerRepository.updateOwner(owner);
ownerRepository.update(owner);
return "redirect:/owners/" + owner.getId();
}

@GetMapping("{ownerId}/edit")
public ModelAndView editOwner(@PathVariable int ownerId) {
Owner owner = ownerRepository.getOwnerById(ownerId);
Owner owner = ownerRepository.getById(ownerId);
ensureExist(owner);
return createFormModelView("owner/viewOrEdit", owner, FormMode.Edit);
}

@GetMapping("{ownerId}/delete")
public String delete(@PathVariable int ownerId) {
ownerRepository.deleteOwner(ownerId);
ownerRepository.deleteById(ownerId);
return "redirect:/owners";
}

Expand Down
23 changes: 13 additions & 10 deletions src/main/java/tk/puncha/controllers/PetController.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import tk.puncha.models.PetType;
import tk.puncha.repositories.OwnerRepository;
import tk.puncha.repositories.PetRepository;
import tk.puncha.repositories.PetTypeRepository;
import tk.puncha.views.json.view.PetJsonView;

import javax.servlet.http.HttpSession;
Expand All @@ -34,15 +35,17 @@ public class PetController extends ControllerBase {
private static final Logger logger = LoggerFactory.getLogger(PetController.class);

private final PetRepository petRepository;
private final PetTypeRepository petTypeRepository;
private final OwnerRepository ownerRepository;
private final OwnerFormatter ownerFormatter;
private final PetTypeFormatter petTypeFormatter;


@Autowired
public PetController(OwnerRepository ownerRepository, PetRepository petRepository, OwnerFormatter ownerFormatter, PetTypeFormatter petTypeFormatter) {
public PetController(OwnerRepository ownerRepository, PetRepository petRepository, PetTypeRepository petTypeRepository, OwnerFormatter ownerFormatter, PetTypeFormatter petTypeFormatter) {
this.ownerRepository = ownerRepository;
this.petRepository = petRepository;
this.petTypeRepository = petTypeRepository;
this.ownerFormatter = ownerFormatter;
this.petTypeFormatter = petTypeFormatter;
}
Expand All @@ -57,34 +60,34 @@ void initPetBinder(WebDataBinder binder) {
@ModelAttribute("types")
List<PetType> getPetTypes() {
logger.debug("getPetTypes()");
return petRepository.getAllTypes();
return petTypeRepository.getAll();
}

@ModelAttribute("owners")
List<Owner> getOwners() {
logger.debug("getOwners()");
return ownerRepository.getAllOwners();
return ownerRepository.getAll();
}

@GetMapping(value = {"", "/index", "/default"}, produces = MediaType.TEXT_HTML_VALUE)
public ModelAndView htmlIndex() {
logger.debug("index()");
List<Pet> petViews = petRepository.getAllPets();
List<Pet> petViews = petRepository.getAll();
return new ModelAndView("pet/index", "pets", petViews);
}

@GetMapping("{id}")
public ModelAndView view(@PathVariable int id) {
logger.debug("view()");
Pet pet = petRepository.getPetById(id);
Pet pet = petRepository.getById(id);
ensureExist(pet);
return createFormModelView(pet, FormMode.Readonly);
}

@GetMapping("{id}/edit")
public ModelAndView edit(@PathVariable int id, HttpSession httpSession) {
logger.debug("edit()");
Pet pet = petRepository.getPetById(id);
Pet pet = petRepository.getById(id);
ensureExist(pet);
httpSession.setAttribute("id", pet.getId());
return createFormModelView(pet, FormMode.Edit);
Expand Down Expand Up @@ -112,9 +115,9 @@ public String processPetCreationForm(
}
if (petId != -1) {
pet.setId(petId);
petRepository.updatePet(pet);
petRepository.update(pet);
} else {
petId = petRepository.insertPet(pet);
petId = petRepository.insert(pet);
}
sessionStatus.setComplete();
return "redirect:/pets/" + petId;
Expand All @@ -123,7 +126,7 @@ public String processPetCreationForm(
@GetMapping("{id}/delete")
public String delete(@PathVariable int id) {
logger.debug("delete()");
petRepository.delete(id);
petRepository.deleteById(id);
return "redirect:/pets";
}

Expand All @@ -145,7 +148,7 @@ private ModelAndView createFormModelView(Pet pet, FormMode mode) {
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public List<Pet> getAllPets() {
return petRepository.getAllPets();
return petRepository.getAll();
}

}
18 changes: 6 additions & 12 deletions src/main/java/tk/puncha/controllers/VisitController.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import tk.puncha.models.Pet;
Expand All @@ -20,11 +19,6 @@ public class VisitController {
private final PetRepository petRepository;
private final VisitRepository visitRepository;

@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setDisallowedFields("id");
}

@Autowired
public VisitController(PetRepository petRepository, VisitRepository visitRepository) {
this.petRepository = petRepository;
Expand All @@ -33,13 +27,13 @@ public VisitController(PetRepository petRepository, VisitRepository visitReposit

@ModelAttribute("pet")
Pet getPetById(@PathVariable int petId) {
return petRepository.getPetById(petId);
return petRepository.getById(petId);
}

@RequestMapping("{visitId}/delete")
public String deleteVisit(@ModelAttribute Pet pet, @PathVariable int visitId) {
if (pet == null) throw new RuntimeException("Pet doesn't exist!");
visitRepository.delete(visitId);
visitRepository.deleteById(visitId);
return "redirect:/pets/{petId}";
}

Expand All @@ -51,12 +45,12 @@ public ModelAndView initCreationForm() {
@PostMapping("/new")
public String processCreationForm(Pet pet, @ModelAttribute @Valid Visit visit, BindingResult bingResult) {
if (bingResult.hasErrors()) {
return "visit/new";
}
return "visit/new";
}

pet.getVisits().add(visit);
visit.setPet(pet);
petRepository.updatePet(pet);
petRepository.update(pet);
return "redirect:/pets/{petId}";
}
}
}
14 changes: 7 additions & 7 deletions src/main/java/tk/puncha/dao/OwnerDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@


public interface OwnerDAO {
List<Owner> getAllOwners();
List<Owner> getAll();

List getOwnersByFirstName(String firstName);
List<Owner> findByFirstName(String firstName);

Owner getOwnerById(int ownerId);
Owner getById(int ownerId);

Owner getOwnerWithPetsById(int ownerId);
Owner getByIdWithPets(int ownerId);

int insertOwner(Owner owner);
int insert(Owner owner);

void updateOwner(Owner owner);
void update(Owner owner);

void deleteOwner(int id);
void deleteById(int id);
}
12 changes: 6 additions & 6 deletions src/main/java/tk/puncha/dao/PetDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@


public interface PetDAO {
List<Pet> getAllPets();
List<Pet> getAll();

Pet getPetById(int id);
Pet getById(int id);

void deletePetsByOwnerId(int ownerId);
int insert(Pet pet);

void updatePet(Pet pet);
void update(Pet pet);

int insertPet(Pet pet);
void deleteById(int id);

void delete(int id);
void deleteByOwnerId(int ownerId);
}
5 changes: 3 additions & 2 deletions src/main/java/tk/puncha/dao/PetTypeDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
import java.util.List;

public interface PetTypeDAO {
List<PetType> getAllTypes();

PetType getTypeById(int id);
List<PetType> getAll();

PetType getById(int id);
}
5 changes: 3 additions & 2 deletions src/main/java/tk/puncha/dao/VisitDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
import tk.puncha.models.Visit;

public interface VisitDAO {
void deleteVisit(int visitId);

int insertVisit(Visit visit);
int insert(Visit visit);

void deleteById(int visitId);
}
16 changes: 8 additions & 8 deletions src/main/java/tk/puncha/dao/hibernate/HibernateOwnerDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,15 @@ public class HibernateOwnerDAO implements OwnerDAO {
private EntityManager em;

@Override
public List<Owner> getAllOwners() {
public List<Owner> getAll() {
return em.createQuery("select distinct o from Owner o", Owner.class)
.setHint(HINT_FETCHGRAPH, em.getEntityGraph("graph.Owners.lazyPets"))
.getResultList();
}

@Override
@SuppressWarnings("unchecked")
public List<Owner> getOwnersByFirstName(String firstName) {
public List<Owner> findByFirstName(String firstName) {
Owner owner = new Owner();
owner.setFirstName(firstName);
return em.unwrap(Session.class).createCriteria(Owner.class)
Expand All @@ -44,30 +44,30 @@ public List<Owner> getOwnersByFirstName(String firstName) {
}

@Override
public Owner getOwnerById(int ownerId) {
public Owner getById(int ownerId) {
return em.find(Owner.class, ownerId);
}

public Owner getOwnerWithPetsById(int ownerId) {
public Owner getByIdWithPets(int ownerId) {
String query = "select owner from Owner owner left join fetch owner.pets where owner.id = :ownerId";
return em.createQuery(query, Owner.class)
.setParameter("ownerId", ownerId)
.getSingleResult();
.getResultList().stream().findFirst().orElse(null);
}

@Override
public int insertOwner(Owner owner) {
public int insert(Owner owner) {
em.persist(owner);
return owner.getId();
}

@Override
public void updateOwner(Owner owner) {
public void update(Owner owner) {
em.merge(owner);
}

@Override
public void deleteOwner(int id) {
public void deleteById(int id) {
Owner reference = em.getReference(Owner.class, id);
logger.error("reference got!");
em.remove(reference);
Expand Down
Loading

0 comments on commit 118c1a5

Please sign in to comment.