@Override
  @Transactional
  public TestingLabDTO update(TestingLabDTO dto) throws EntityRetrievalException {
    TestingLabEntity entity = this.getEntityById(dto.getId());

    if (entity == null) {
      throw new EntityRetrievalException("Entity with id " + dto.getId() + " does not exist");
    }

    if (dto.getAddress() != null) {
      try {
        entity.setAddress(addressDao.mergeAddress(dto.getAddress()));
      } catch (EntityCreationException ex) {
        logger.error("Could not create new address in the database.", ex);
        entity.setAddress(null);
      }
    } else {
      entity.setAddress(null);
    }

    entity.setWebsite(dto.getWebsite());
    entity.setAccredidationNumber(dto.getAccredidationNumber());

    if (dto.getName() != null) {
      entity.setName(dto.getName());
    }

    if (dto.getTestingLabCode() != null) {
      entity.setTestingLabCode(dto.getTestingLabCode());
    }

    if (dto.getDeleted() != null) {
      entity.setDeleted(dto.getDeleted());
    }

    if (dto.getLastModifiedUser() != null) {
      entity.setLastModifiedUser(dto.getLastModifiedUser());
    } else {
      entity.setLastModifiedUser(Util.getCurrentUser().getId());
    }

    if (dto.getLastModifiedDate() != null) {
      entity.setLastModifiedDate(dto.getLastModifiedDate());
    } else {
      entity.setLastModifiedDate(new Date());
    }

    update(entity);
    return new TestingLabDTO(entity);
  }
  @Override
  @Transactional
  public TestingLabDTO create(TestingLabDTO dto)
      throws EntityCreationException, EntityRetrievalException {

    TestingLabEntity entity = null;
    try {
      if (dto.getId() != null) {
        entity = this.getEntityById(dto.getId());
      }
    } catch (EntityRetrievalException e) {
      throw new EntityCreationException(e);
    }

    if (entity != null) {
      throw new EntityCreationException("An entity with this ID already exists.");
    } else {
      entity = new TestingLabEntity();

      if (dto.getAddress() != null) {
        entity.setAddress(addressDao.mergeAddress(dto.getAddress()));
      }

      entity.setName(dto.getName());
      entity.setWebsite(dto.getWebsite());
      entity.setAccredidationNumber(dto.getAccredidationNumber());
      entity.setTestingLabCode(dto.getTestingLabCode());

      if (dto.getDeleted() != null) {
        entity.setDeleted(dto.getDeleted());
      } else {
        entity.setDeleted(false);
      }

      if (dto.getLastModifiedUser() != null) {
        entity.setLastModifiedUser(dto.getLastModifiedUser());
      } else {
        entity.setLastModifiedUser(Util.getCurrentUser().getId());
      }

      if (dto.getLastModifiedDate() != null) {
        entity.setLastModifiedDate(dto.getLastModifiedDate());
      } else {
        entity.setLastModifiedDate(new Date());
      }

      if (dto.getCreationDate() != null) {
        entity.setCreationDate(dto.getCreationDate());
      } else {
        entity.setCreationDate(new Date());
      }

      create(entity);
      return new TestingLabDTO(entity);
    }
  }