content: /*
   * Copyright 2002-2013 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
   *
   *      http://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.activejpa.examples.petclinic.service;
  
  import java.util.Collection;
  
  import org.activejpa.examples.petclinic.model.Owner;
  import org.activejpa.examples.petclinic.model.Pet;
  import org.activejpa.examples.petclinic.model.PetType;
  import org.activejpa.examples.petclinic.model.Vet;
  import org.activejpa.examples.petclinic.model.Visit;
  import org.springframework.cache.annotation.Cacheable;
  import org.springframework.dao.DataAccessException;
  import org.springframework.stereotype.Service;
  import org.springframework.transaction.annotation.Transactional;
  
  /**
   * Mostly used as a facade for all Petclinic controllers
   * Also a placeholder for @Transactional and @Cacheable annotations
   *
   * @author Michael Isvy
   */
  @Service
  public class ClinicServiceImpl implements ClinicService {
  
      @Override
      @Transactional(readOnly = true)
      public Collection<PetType> findPetTypes() throws DataAccessException {
      	return PetType.all();
      }
  
      @Override
      @Transactional(readOnly = true)
      public Owner findOwnerById(int id) throws DataAccessException {
      	return Owner.findById(id);
      }
  
      @Override
      @Transactional(readOnly = true)
      public Collection<Owner> findOwnerByLastName(String lastName) throws DataAccessException {
      	return Owner.where("lastName", lastName);
      }
  
      @Override
      @Transactional
      public void saveOwner(Owner owner) throws DataAccessException {
          owner.persist();
      }
  
      @Override
      @Transactional
      public void saveVisit(Visit visit) throws DataAccessException {
          visit.persist();
      }
  
  
      @Override
      @Transactional(readOnly = true)
      public Pet findPetById(int id) throws DataAccessException {
          return Pet.findById(id);
      }
  
      @Override
      @Transactional
      public void savePet(Pet pet) throws DataAccessException {
          pet.persist();
      }
  
      @Override
      @Transactional(readOnly = true)
      @Cacheable(value = "vets")
      public Collection<Vet> findVets() throws DataAccessException {
          return Vet.all();
      }
  
  }
  