package com.brightgenerous.datasource.mybatis.guice.transaction; import java.util.List; import javax.inject.Inject; import com.brightgenerous.commons.ObjectUtils; import com.brightgenerous.datasource.mybatis.guice.bean.Header; import com.brightgenerous.datasource.mybatis.guice.bean.MultiKeyDetail; import com.brightgenerous.datasource.mybatis.guice.bean.SimpleKeyDetail; import com.brightgenerous.datasource.mybatis.guice.mapper.HeaderMapper; import com.brightgenerous.datasource.mybatis.guice.mapper.Key; import com.brightgenerous.datasource.mybatis.guice.mapper.MultiKeyDetailMapper; import com.brightgenerous.datasource.mybatis.guice.mapper.SimpleKeyDetailMapper; import com.brightgenerous.orm.Condition; public class BrigenTransaction { @Inject private HeaderMapper headerMapper; @Inject private MultiKeyDetailMapper multiKeyDetailMapper; @Inject private SimpleKeyDetailMapper simpleKeyDetailMapper; public boolean existsMapper() { return (headerMapper != null) && (multiKeyDetailMapper != null) && (simpleKeyDetailMapper != null); } public Header getHeader(Header key) { return getHeader(key, false); } public Header getHeaderDetails(Header key) { return getHeader(key, true); } private Header getHeader(Header key, boolean details) { Condition condition = new Condition(); condition.getFields().get(Key.HEADER_NO).setValue(key.getHeaderNo()); Header ret = ObjectUtils.getSingleOrException(headerMapper.selectAll(condition)); if ((ret != null) && details) { condition.getSorts().prependAsc(Key.DETAIL_NO); ret.setMultiKeyDetails(multiKeyDetailMapper.selectAll(condition)); ret.setSimpleKeyDetails(simpleKeyDetailMapper.selectAll(condition)); } return ret; } public List<Header> getHeaders(Condition condition) { return headerMapper.selectAll(condition); } public void add(Header header) { headerMapper.insert(header); if (header.getMultiKeyDetails() != null) { for (MultiKeyDetail mkd : header.getMultiKeyDetails()) { multiKeyDetailMapper.insert(mkd); } } if (header.getSimpleKeyDetails() != null) { for (SimpleKeyDetail skd : header.getSimpleKeyDetails()) { simpleKeyDetailMapper.insert(skd); } } } public List<MultiKeyDetail> getMultiKeyDetails(Condition condition) { return multiKeyDetailMapper.selectAll(condition); } public List<SimpleKeyDetail> getSimpleKeyDetails(Condition condition) { return simpleKeyDetailMapper.selectAll(condition); } public void editHeaderDetails(Header header) { editHeaderDetails(header, null); } public void editHeaderDetails(Header header, RuntimeException rex) { { // lock record by using for update Condition condition = new Condition(); condition.getFields().get(Key.HEADER_NO).setValue(header.getHeaderNo()); condition.setForUpdate(true); headerMapper.selectAll(condition); } multiKeyDetailMapper.deleteByHeader(header); simpleKeyDetailMapper.deleteByHeader(header); headerMapper.update(header); for (MultiKeyDetail mkd : header.getMultiKeyDetails()) { multiKeyDetailMapper.insert(mkd); } for (SimpleKeyDetail skd : header.getSimpleKeyDetails()) { simpleKeyDetailMapper.insert(skd); } if (rex != null) { throw rex; } } }