diff --git a/tpbiz-material/tpbiz-material-api/src/main/java/com/mrtanawat/tpbiz/material/api/DuplicateCodeException.java b/tpbiz-material/tpbiz-material-api/src/main/java/com/mrtanawat/tpbiz/material/api/DuplicateCodeException.java new file mode 100644 index 0000000..4d8ecf9 --- /dev/null +++ b/tpbiz-material/tpbiz-material-api/src/main/java/com/mrtanawat/tpbiz/material/api/DuplicateCodeException.java @@ -0,0 +1,5 @@ +package com.mrtanawat.tpbiz.material.api; + +public class DuplicateCodeException extends Exception { + private static final long serialVersionUID = 544877625162280649L; +} diff --git a/tpbiz-material/tpbiz-material-api/src/main/java/com/mrtanawat/tpbiz/material/api/IMaterialTypeService.java b/tpbiz-material/tpbiz-material-api/src/main/java/com/mrtanawat/tpbiz/material/api/IMaterialTypeService.java index 0a68192..1d5e9cd 100644 --- a/tpbiz-material/tpbiz-material-api/src/main/java/com/mrtanawat/tpbiz/material/api/IMaterialTypeService.java +++ b/tpbiz-material/tpbiz-material-api/src/main/java/com/mrtanawat/tpbiz/material/api/IMaterialTypeService.java @@ -10,7 +10,7 @@ public interface IMaterialTypeService { * @param type * @return newly added material type with id injected */ - public MaterialType add(MaterialType type); + public MaterialType add(MaterialType type) throws DuplicateCodeException; /** * Update existing material type * @param type diff --git a/tpbiz-material/tpbiz-material-api/src/main/java/com/mrtanawat/tpbiz/material/api/IProviderService.java b/tpbiz-material/tpbiz-material-api/src/main/java/com/mrtanawat/tpbiz/material/api/IProviderService.java index b2a21b9..9921644 100644 --- a/tpbiz-material/tpbiz-material-api/src/main/java/com/mrtanawat/tpbiz/material/api/IProviderService.java +++ b/tpbiz-material/tpbiz-material-api/src/main/java/com/mrtanawat/tpbiz/material/api/IProviderService.java @@ -14,11 +14,11 @@ public interface IProviderService { * @param provider * @return newly added provide with id injected */ - public Provider add(Provider provider); + public Provider add(Provider provider) throws DuplicateCodeException; /** * Update provider * @param provider - * @throws ProviderNotExistException when cannot find provider + * @throws EntityNotExistException when cannot find provider */ - public void update(Provider provider) throws ProviderNotExistException; + public void update(Provider provider) throws EntityNotExistException; } diff --git a/tpbiz-material/tpbiz-material-api/src/main/java/com/mrtanawat/tpbiz/material/api/ProviderNotExistException.java b/tpbiz-material/tpbiz-material-api/src/main/java/com/mrtanawat/tpbiz/material/api/ProviderNotExistException.java deleted file mode 100644 index 8aa234a..0000000 --- a/tpbiz-material/tpbiz-material-api/src/main/java/com/mrtanawat/tpbiz/material/api/ProviderNotExistException.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.mrtanawat.tpbiz.material.api; - -public class ProviderNotExistException extends Exception { - - private static final long serialVersionUID = -414632033231804039L; - -} diff --git a/tpbiz-material/tpbiz-material-impl/src/main/java/com/mrtanawat/tpbiz/material/impl/DBHelper.java b/tpbiz-material/tpbiz-material-impl/src/main/java/com/mrtanawat/tpbiz/material/impl/DBHelper.java new file mode 100644 index 0000000..fff3b2c --- /dev/null +++ b/tpbiz-material/tpbiz-material-impl/src/main/java/com/mrtanawat/tpbiz/material/impl/DBHelper.java @@ -0,0 +1,17 @@ +package com.mrtanawat.tpbiz.material.impl; + +import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; + +public class DBHelper { + + public static boolean isExistInDB(SimpleJdbcTemplate jdbcTemplate, String tableName, String whereColumnName, String whereValue) + { + String sql = "SELECT COUNT(*) FROM " + tableName + + " WHERE "+ whereColumnName+ " = ?"; + int count = jdbcTemplate.queryForInt(sql, whereValue); + if(count>0) + return true; + return false; + } + +} diff --git a/tpbiz-material/tpbiz-material-impl/src/main/java/com/mrtanawat/tpbiz/material/impl/MaterialRowMapper.java b/tpbiz-material/tpbiz-material-impl/src/main/java/com/mrtanawat/tpbiz/material/impl/MaterialRowMapper.java new file mode 100644 index 0000000..7a4f7ac --- /dev/null +++ b/tpbiz-material/tpbiz-material-impl/src/main/java/com/mrtanawat/tpbiz/material/impl/MaterialRowMapper.java @@ -0,0 +1,21 @@ +package com.mrtanawat.tpbiz.material.impl; + +import java.sql.ResultSet; +import java.sql.SQLException; + +import org.springframework.jdbc.core.RowMapper; +import com.mrtanawat.tpbiz.material.entity.MaterialType; + +public class MaterialRowMapper implements RowMapper { + + @Override + public MaterialType mapRow(ResultSet resultSet, int rowNum) throws SQLException { + MaterialType materialType = new MaterialType(); + materialType.setId(resultSet.getInt("ID")); + materialType.setCode(resultSet.getString("CODE")); + materialType.setName(resultSet.getString("NAME")); + materialType.setRemarks(resultSet.getString("REMARKS")); + return materialType; + } + +} diff --git a/tpbiz-material/tpbiz-material-impl/src/main/java/com/mrtanawat/tpbiz/material/impl/MaterialTypeService.java b/tpbiz-material/tpbiz-material-impl/src/main/java/com/mrtanawat/tpbiz/material/impl/MaterialTypeService.java new file mode 100644 index 0000000..a29b74a --- /dev/null +++ b/tpbiz-material/tpbiz-material-impl/src/main/java/com/mrtanawat/tpbiz/material/impl/MaterialTypeService.java @@ -0,0 +1,73 @@ +package com.mrtanawat.tpbiz.material.impl; + +import java.util.List; + +import javax.sql.DataSource; + +import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; + +import com.mrtanawat.tpbiz.material.api.DuplicateCodeException; +import com.mrtanawat.tpbiz.material.api.EntityNotExistException; +import com.mrtanawat.tpbiz.material.api.IMaterialTypeService; +import com.mrtanawat.tpbiz.material.entity.MaterialType; + +public class MaterialTypeService implements IMaterialTypeService { + + private SimpleJdbcTemplate jdbcTemplate; + private MaterialRowMapper materialRowMapper; + private static final String MATERAIL_TYPE_TABLE = "material_types"; + + public MaterialTypeService() + { + this.materialRowMapper = new MaterialRowMapper(); + } + + public void setDataSource(DataSource dataSource) { + this.jdbcTemplate = new SimpleJdbcTemplate(dataSource); + } + + @Override + public MaterialType add(MaterialType type) throws DuplicateCodeException{ + if(DBHelper.isExistInDB(this.jdbcTemplate,MATERAIL_TYPE_TABLE,"CODE",type.getCode())) + throw new DuplicateCodeException(); + + String sql = "INSERT INTO "+ MATERAIL_TYPE_TABLE + +" (CODE, NAME, REMARKS) VALUES (?,?,?)"; + jdbcTemplate.update(sql, type.getCode(), + type.getName(), + type.getRemarks()); + + sql = "SELECT * FROM " + MATERAIL_TYPE_TABLE + + " WHERE ID = LAST_INSERT_ID()"; + type = jdbcTemplate.queryForObject(sql, this.materialRowMapper); + return type; + } + + @Override + public void update(MaterialType type) throws EntityNotExistException { + long typeId = type.getId(); + if(!DBHelper.isExistInDB(this.jdbcTemplate,MATERAIL_TYPE_TABLE,"ID",String.valueOf(typeId))) + throw new EntityNotExistException(); + + String sql = "UPDATE " + MATERAIL_TYPE_TABLE + + " SET NAME = ?, REMARKS = ? " + + " WHERE ID = ?"; + + jdbcTemplate.update(sql, type.getName(), + type.getRemarks(), + typeId); + + } + + @Override + public List list(int start, int limit) { + String sql = "SELECT * FROM " + MATERAIL_TYPE_TABLE + + " LIMIT ?, ? "; + + return jdbcTemplate.query(sql,this.materialRowMapper, + start, + limit); + + } + +} diff --git a/tpbiz-material/tpbiz-material-impl/src/main/java/com/mrtanawat/tpbiz/material/impl/ProviderService.java b/tpbiz-material/tpbiz-material-impl/src/main/java/com/mrtanawat/tpbiz/material/impl/ProviderService.java index 0ff0949..db32b4e 100644 --- a/tpbiz-material/tpbiz-material-impl/src/main/java/com/mrtanawat/tpbiz/material/impl/ProviderService.java +++ b/tpbiz-material/tpbiz-material-impl/src/main/java/com/mrtanawat/tpbiz/material/impl/ProviderService.java @@ -3,14 +3,16 @@ import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; import javax.sql.DataSource; +import com.mrtanawat.tpbiz.material.api.DuplicateCodeException; import com.mrtanawat.tpbiz.material.api.IProviderService; -import com.mrtanawat.tpbiz.material.api.ProviderNotExistException; +import com.mrtanawat.tpbiz.material.api.EntityNotExistException; import com.mrtanawat.tpbiz.material.entity.Provider; public class ProviderService implements IProviderService { private SimpleJdbcTemplate jdbcTemplate; private ProviderRowMapper providerRowMapper; + private static final String PROVIDER_TABLE = "mat_providers"; public ProviderService() { @@ -23,21 +25,46 @@ public void setDataSource(DataSource dataSource) { @Override public Provider findByCode(String code) { - String sql = "SELECT * FROM mat_providers WHERE CODE = ?"; + String sql = "SELECT * FROM " +PROVIDER_TABLE+ " WHERE CODE = ?"; Provider provider = jdbcTemplate.queryForObject(sql, this.providerRowMapper, code); return provider; } @Override - public Provider add(Provider provider) { - // TODO Auto-generated method stub - return null; + public Provider add(Provider provider) throws DuplicateCodeException { + + if(DBHelper.isExistInDB(this.jdbcTemplate,PROVIDER_TABLE,"CODE",provider.getCode())) + throw new DuplicateCodeException(); + + String sql = "INSERT INTO "+ PROVIDER_TABLE + +" (CODE, NAME, ADDRESS, PLACE, REMARKS) VALUES (?,?,?,?,?)"; + jdbcTemplate.update(sql, provider.getCode(), + provider.getName(), + provider.getAddress(), + provider.getPlace(), + provider.getRemark()); + + sql = "SELECT * FROM " + PROVIDER_TABLE + + " WHERE ID = LAST_INSERT_ID()"; + provider = jdbcTemplate.queryForObject(sql, this.providerRowMapper); + return provider; } @Override - public void update(Provider provider) throws ProviderNotExistException { - // TODO Auto-generated method stub - + public void update(Provider provider) throws EntityNotExistException { + //TODO do I need to check code? cause code not suppose to be able to change + long providerId = provider.getId(); + if(!DBHelper.isExistInDB(this.jdbcTemplate,PROVIDER_TABLE,"ID",String.valueOf(providerId))) + throw new EntityNotExistException(); + + String sql = "UPDATE " + PROVIDER_TABLE + + " SET NAME = ?, ADDRESS= ?, PLACE = ?, REMARKS = ? " + + " WHERE ID = ?"; + + jdbcTemplate.update(sql, provider.getName(), + provider.getAddress(), + provider.getPlace(), + provider.getRemark(), + providerId); } - } diff --git a/tpbiz-material/tpbiz-material-impl/src/test/java/com/mrtanawat/tpbiz/material/impl/MaterialTypeServiceTest.java b/tpbiz-material/tpbiz-material-impl/src/test/java/com/mrtanawat/tpbiz/material/impl/MaterialTypeServiceTest.java new file mode 100644 index 0000000..c54fd57 --- /dev/null +++ b/tpbiz-material/tpbiz-material-impl/src/test/java/com/mrtanawat/tpbiz/material/impl/MaterialTypeServiceTest.java @@ -0,0 +1,198 @@ +package com.mrtanawat.tpbiz.material.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.ExpectedException; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; + +import com.mrtanawat.tpbiz.material.api.IMaterialTypeService; +import com.mrtanawat.tpbiz.material.entity.MaterialType; + +@ContextConfiguration(locations="/beans.xml") +public class MaterialTypeServiceTest + extends AbstractTransactionalJUnit4SpringContextTests{ + + @Autowired + private IMaterialTypeService materialTypeService; + @Autowired + private MaterialRowMapper materialRowMapper; + + private static final String MATERAIL_TYPE_TABLE = "material_types"; + + @Test + public void addMaterialType() throws Exception { + + String code = "Mat Code"; + String name = "Mat Name"; + String remarks = "Mat remark"; + MaterialType material = new MaterialType(); + material.setCode(code); + material.setName(name); + material.setRemarks(remarks); + + MaterialType addedMaterial = materialTypeService.add(material); + + String sql = "SELECT * FROM " + MATERAIL_TYPE_TABLE + + " WHERE ID = ?"; + MaterialType materialTypeFromDb = simpleJdbcTemplate.queryForObject(sql, this.materialRowMapper, addedMaterial.getId()); + + Assert.assertEquals(materialTypeFromDb.getId(), addedMaterial.getId()); + Assert.assertEquals(materialTypeFromDb.getCode(), code); + Assert.assertEquals(materialTypeFromDb.getName(), name); + Assert.assertEquals(materialTypeFromDb.getRemarks(), remarks); + } + + @Test + public void addMaterialTypeReturnWithId() throws Exception { + + String code = "Mat Code"; + String name = "Mat Name"; + String remarks = "Mat remark"; + MaterialType material = new MaterialType(); + material.setCode(code); + material.setName(name); + material.setRemarks(remarks); + + MaterialType addedMaterial = materialTypeService.add(material); + + Assert.assertNotNull(addedMaterial.getId()); + } + + @Test + @ExpectedException(com.mrtanawat.tpbiz.material.api.DuplicateCodeException.class) + public void addMaterailWithExistingCode() throws Exception { + String code = "Mat Code"; + String name = "Mat Name"; + String remarks = "Mat remark"; + String sql = "INSERT INTO "+ MATERAIL_TYPE_TABLE + +" (CODE, NAME, REMARKS) VALUES (?,?,?)"; + simpleJdbcTemplate.update(sql, code, + name, + remarks); + + MaterialType material = new MaterialType(); + material.setCode(code); + material.setName(name); + material.setRemarks(remarks); + + materialTypeService.add(material); + } + + @Test + public void updateMaterialType() throws Exception { + String code = "Mat Code"; + String name = "Mat Name"; + String remarks = "Mat remark"; + + String sql = "INSERT INTO "+ MATERAIL_TYPE_TABLE + +" (CODE, NAME, REMARKS) VALUES (?,?,?)"; + simpleJdbcTemplate.update(sql, code, + name, + remarks); + + sql = "SELECT * FROM " + MATERAIL_TYPE_TABLE + + " WHERE ID = LAST_INSERT_ID()"; + MaterialType materialTypeFromDb = simpleJdbcTemplate.queryForObject(sql, this.materialRowMapper); + + String newName = "New Mat Name"; + String newRemarks = "New Mat remark"; + + materialTypeFromDb.setName(newName); + materialTypeFromDb.setRemarks(newRemarks); + materialTypeService.update(materialTypeFromDb); + + Assert.assertEquals(materialTypeFromDb.getName(), newName); + Assert.assertNotSame(materialTypeFromDb.getName(), name); + + Assert.assertEquals(materialTypeFromDb.getRemarks(), newRemarks); + Assert.assertNotSame(materialTypeFromDb.getRemarks(), remarks); + } + + @Test + @ExpectedException(com.mrtanawat.tpbiz.material.api.EntityNotExistException.class) + public void updateMaterialTypeNotExist() throws Exception{ + String code = "Mat Code"; + String name = "Mat Name"; + String remarks = "Mat remark"; + + MaterialType material = new MaterialType(); + material.setCode(code); + material.setName(name); + material.setRemarks(remarks); + + materialTypeService.update(material); + } + + @Test + public void listMaterialType() throws Exception{ + int materialTypeCount = 10; + List mockList = createMaterialTypeMockList(materialTypeCount); + for(MaterialType type: mockList) + { + String sql = "INSERT INTO "+ MATERAIL_TYPE_TABLE + +" (CODE, NAME, REMARKS) VALUES (?,?,?)"; + simpleJdbcTemplate.update(sql, type.getCode(), + type.getName(), + type.getRemarks()); + } + + List listFromDB = materialTypeService.list(0, materialTypeCount); + Assert.assertEquals(listFromDB.size(),materialTypeCount); + + //iterate through all the item in the list + for(MaterialType typeInDB: listFromDB) + { + Assert.assertTrue(listContainMaterialType(mockList, typeInDB)); + } + + } + + private Boolean listContainMaterialType(List typeList, MaterialType type) + { + for(MaterialType listItem: typeList) + { + if(compareMaterialType(listItem,type)) + { + return true; + } + } + return false; + } + + private Boolean compareMaterialType(MaterialType expect,MaterialType actual){ + if(expect.getCode().equals(actual.getCode()) + && expect.getName().equals(actual.getName()) + && expect.getRemarks().equals(actual.getRemarks())) + { + return true; + } + return false; + } + + private List createMaterialTypeMockList(int count){ + List materialList = new ArrayList(); + for(int i=0 ; i + + + + + + + + + +