package org.pegadi.server.service.impl; import no.dusken.common.model.Department; import no.dusken.common.service.DepartmentService; import org.apache.commons.lang.NotImplementedException; import org.springframework.dao.DataAccessException; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport; import org.springframework.jdbc.support.GeneratedKeyHolder; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public class DepartmentServiceImpl extends NamedParameterJdbcDaoSupport implements DepartmentService<Department> { private final DepartmentMapper departmentMapper = new DepartmentMapper(); @Override public Department getByName(String name) { try { return getNamedParameterJdbcTemplate().queryForObject("SELECT * FROM Department where name = :name", Collections.singletonMap("name", name), departmentMapper); } catch (DataAccessException e) { return null; } } @Override public Department getByExternalID(Long aLong) { throw new NotImplementedException(); } @Override public List<Department> findAll() { throw new NotImplementedException(); } @Override public Iterable<Department> findAll(Iterable<Long> longs) { throw new NotImplementedException(); } @Override public long count() { throw new NotImplementedException(); } @Override public void delete(Long aLong) { throw new NotImplementedException(); } @Override public void delete(Department entity) { throw new NotImplementedException(); } @Override public void delete(Iterable<? extends Department> entities) { throw new NotImplementedException(); } @Override public void deleteAll() { throw new NotImplementedException(); } @Override public List<Department> findAll(Sort sort) { throw new NotImplementedException(); } @Override public Page<Department> findAll(Pageable pageable) { throw new NotImplementedException(); } @Override public <S extends Department> S save(S entity) { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("name", entity.getName()); parameters.put("description", entity.getName()); String sql; if(entity.isNew()){ parameters.put("version", 0); sql = "INSERT INTO Department (name, description) values (:name, :description)"; GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder(); getNamedParameterJdbcTemplate().update(sql, new MapSqlParameterSource(parameters), generatedKeyHolder); return (S) findOne(generatedKeyHolder.getKey().longValue()); }else { parameters.put("id", entity.getId()); sql = "UPDATE Department set name=:name, description=:description WHERE id=:id"; getNamedParameterJdbcTemplate().update(sql, new MapSqlParameterSource(parameters)); return (S) findOne(entity.getId()); } } @Override public <S extends Department> List<S> save(Iterable<S> entities) { throw new NotImplementedException(); } @Override public Department findOne(Long id) { try { return getNamedParameterJdbcTemplate().queryForObject("SELECT * FROM Department where id = :id", Collections.singletonMap("id", id), departmentMapper); } catch (DataAccessException e) { return null; } } @Override public boolean exists(Long aLong) { throw new NotImplementedException(); } @Override public void flush() { throw new NotImplementedException(); } @Override public Department saveAndFlush(Department entity) { throw new NotImplementedException(); } @Override public void deleteInBatch(Iterable<Department> entities) { throw new NotImplementedException(); } @Override public void deleteAllInBatch() { throw new NotImplementedException(); } @Override public Department findOne(Specification spec) { throw new NotImplementedException(); } @Override public List<Department> findAll(Specification spec) { throw new NotImplementedException(); } @Override public Page<Department> findAll(Specification spec, Pageable pageable) { throw new NotImplementedException(); } @Override public List<Department> findAll(Specification spec, Sort sort) { throw new NotImplementedException(); } @Override public long count(Specification spec) { throw new NotImplementedException(); } private class DepartmentMapper implements RowMapper<Department> { @Override public Department mapRow(ResultSet rs, int rowNum) throws SQLException { final long id = rs.getLong("id"); Department department = new Department(){ @Override public Long getId() { return id; } }; department.setName(rs.getString("name")); return department; } } }