package nc.md.persist.framework.imp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import nc.bs.logging.Logger;
import nc.bs.ml.NCLangResOnserver;
import nc.md.data.access.NCObject;
import nc.md.data.criterion.QueryCondition;
import nc.md.model.IBusinessEntity;
import nc.md.model.MetaDataException;
import nc.vo.pub.AggregatedValueObject;
import nc.vo.pub.BusinessException;
import nc.vo.pub.CircularlyAccessibleValueObject;
import nc.vo.pub.SuperVO;
public class MDBaseDAO {
public String saveBill(Object billVo, boolean deleteDrEqualOneFromDB) throws MetaDataException {
checkBillVO(billVo);
NCObject ncObj = MDPersistUtil.getNCObject(billVo);
return saveBill(new NCObject[] { ncObj }, deleteDrEqualOneFromDB)[0];
}
String[] handleBill(NCObject[] ncObjs, boolean bDelete,
boolean deleteFromDB) throws MetaDataException{
if (ncObjs == null || ncObjs.length == 0)
throw new MetaDataException(NCLangResOnserver.getInstance().getStrByID("mdbusi", "mdBaseDAO-0001"));
VOPersister persister = new VOPersister((IBusinessEntity) ncObjs[0].getRelatedBean());
return persister.saveVOS(ncObjs, bDelete, deleteFromDB);
}
String[] handleBill(CircularlyAccessibleValueObject[] billVos, boolean isDeleted, boolean deleteDrEqualOneFromDB)
throws MetaDataException {
if (billVos == null || billVos.length == 0)
throw new MetaDataException(NCLangResOnserver.getInstance().getStrByID("mdbusi", "mdBaseDAO-0000"));
checkBillVO(billVos[0]);
NCObject[] ncObjs = MDPersistUtil.getNCObject(billVos);
return handleBill(ncObjs,isDeleted,deleteDrEqualOneFromDB);
}
public String[] saveBill(CircularlyAccessibleValueObject[] billVos, boolean deleteDrEqualOneFromDB)
throws MetaDataException {
if (billVos == null || billVos.length == 0)
throw new MetaDataException(NCLangResOnserver.getInstance().getStrByID("mdbusi", "mdBaseDAO-0000"));
checkBillVO(billVos[0]);
NCObject[] ncObjs = MDPersistUtil.getNCObject(billVos);
return saveBill(ncObjs, deleteDrEqualOneFromDB);
}
public String[] saveBill(NCObject[] ncObjs, boolean deleteDrEqualOneFromDB)
throws MetaDataException {
return handleBill(ncObjs,false,deleteDrEqualOneFromDB);
}
public void deleteBill(Object billVo) throws MetaDataException {
checkBillVO(billVo);
NCObject ncObj = MDPersistUtil.getNCObject(billVo);
deleteBill(new NCObject[] { ncObj });
}
public void deleteBill(NCObject[] ncObjs) throws MetaDataException {
handleBill(ncObjs,true,false);
}
public void deleteBillFromDB(Object billVo) throws MetaDataException {
checkBillVO(billVo);
NCObject ncObj = MDPersistUtil.getNCObject(billVo);
deleteBillFromDB(new NCObject[] { ncObj });
}
public void deleteBillFromDB(CircularlyAccessibleValueObject[] billVos) throws MetaDataException {
if (billVos == null || billVos.length == 0)
throw new MetaDataException(NCLangResOnserver.getInstance().getStrByID("mdbusi", "mdBaseDAO-0002"));
NCObject[] ncObjs = MDPersistUtil.getNCObject(billVos);
VOPersister persister = new VOPersister((IBusinessEntity) ncObjs[0].getRelatedBean());
persister.deleteVOS(ncObjs);
}
public void deleteBillFromDB(NCObject[] billVos) throws MetaDataException {
if (billVos == null || billVos.length == 0)
throw new MetaDataException(NCLangResOnserver.getInstance().getStrByID("mdbusi", "mdBaseDAO-0003"));
VOPersister persister = new VOPersister((IBusinessEntity) billVos[0].getRelatedBean());
persister.deleteVOS(billVos);
}
private void checkBillVO(Object billVo) throws MetaDataException {
if (billVo == null)
throw new MetaDataException(NCLangResOnserver.getInstance().getStrByID("mdbusi", "mdBaseDAO-0001"));
if (billVo instanceof AggregatedValueObject) {
if (((AggregatedValueObject) billVo).getParentVO() == null)
throw new MetaDataException(NCLangResOnserver.getInstance().getStrByID("mdbusi", "mdBaseDAO-0004"));
}
}
public NCObject queryBillOfNCObjectByPK(Class voClass, String billPK, boolean ignoreDrEqual1)
throws MetaDataException {
return new VOQueryPersister(voClass.getName(), ignoreDrEqual1).queryBillImp(billPK, false);
}
public NCObject[] queryBillOfNCObjectByPKs(Class voClass, String[] billPKs,
String[] filtAttrNames, boolean bLazyLoad) throws MetaDataException {
return new VOQueryPersister(voClass.getName()).queryBillsImp(billPKs, filtAttrNames, bLazyLoad);
}
public NCObject[] queryBillOfNCObjectByCond(Class voClass, String whereCondStr,
boolean bLazyLoad, String[] orderPaths) throws MetaDataException {
return new VOQueryPersister(voClass.getName()).queryBillsImp(whereCondStr, bLazyLoad,
orderPaths);
}
public Collection queryBillOfVOByCond(Class voClass, String whereCondStr, boolean ignoreDrEqual1,
boolean bLazyLoad, String[] orderPaths) throws MetaDataException {
NCObject[] ncObjs = new VOQueryPersister(voClass.getName(), ignoreDrEqual1).queryBillsImp(
whereCondStr, bLazyLoad, orderPaths);
List resList = new ArrayList();
if (ncObjs != null) {
for (int i = 0; i < ncObjs.length; i++) {
resList.add(ncObjs[i].getContainmentObject());
}
}
return resList;
}
public <E> Collection<E> queryBillOfVOByCond(Class<E> voClass, String[] tableNames,
String whereCondStr, boolean ignoreDrEqual1, boolean lazyLoad, String[] orderPaths)
throws MetaDataException {
NCObject[] ncObjs = new VOQueryPersister(voClass.getName(), ignoreDrEqual1).queryBillsImp(
tableNames, whereCondStr, lazyLoad, orderPaths);
List<E> resList = new ArrayList<E>();
if (ncObjs != null) {
for (int i = 0; i < ncObjs.length; i++) {
Object obj = ncObjs[i].getContainmentObject();
if (voClass.isInstance(obj)) {
resList.add(voClass.cast(ncObjs[i].getContainmentObject()));
}
}
}
return resList;
}
public <E> Collection<E> queryBillOfVOByFromAndCond(Class<E> voClass, String fromSql,
String whereCondStr, boolean lazyLoad, String[] orderPaths) throws MetaDataException {
NCObject[] ncObjs = new VOQueryPersister(voClass.getName()).queryBillsImp(fromSql,
whereCondStr, lazyLoad, orderPaths);
List<E> resList = new ArrayList<E>();
if (ncObjs != null) {
for (int i = 0; i < ncObjs.length; i++) {
Object obj = ncObjs[i].getContainmentObject();
if (voClass.isInstance(obj)) {
resList.add(voClass.cast(ncObjs[i].getContainmentObject()));
}
}
}
return resList;
}
public Collection queryBillOfVOByCond(Class voClass, String whereCondStr, boolean ignoreDrEqual1,
String[] subEntityPaths, String[] orderPaths) throws MetaDataException {
NCObject[] ncObjs = new VOQueryPersister(voClass.getName(), ignoreDrEqual1).queryBillsImp(
whereCondStr, subEntityPaths, orderPaths);
List resList = new ArrayList();
if (ncObjs != null) {
for (int i = 0; i < ncObjs.length; i++) {
resList.add(ncObjs[i].getContainmentObject());
}
}
return resList;
}
public NCObject[] queryBillOfVOByCond(Class voClass, String whereCondStr, String[] filtAttrNames,
boolean ignoreDrEqual1, boolean bLazyLoad) throws MetaDataException {
return new VOQueryPersister(voClass.getName(), ignoreDrEqual1).queryBillsImp(whereCondStr,
filtAttrNames, bLazyLoad);
}
public Collection queryBillOfVOByCond(QueryCondition condition, boolean bLazyLoad,
String[] orderPaths) throws MetaDataException {
List<String> sqls = condition.getQuerysession().getGeneratedSQL();
if (sqls == null || sqls.size() != 1)
throw new MetaDataException(
NCLangResOnserver.getInstance().getStrByID("mdbusi", "mdBaseDAO-0005")
+ condition.toString());
String keyAttrName = ((IBusinessEntity) condition.getEntityBean()).getKeyAttribute().getName();
String strWhere = new StringBuffer(keyAttrName).append(" in (").append(sqls.get(0)).append(")")
.toString();
return queryBillOfVOByCond(condition.getBeanClass(), strWhere, false, bLazyLoad, orderPaths);
}
public Object queryBillOfVOByPK(Class voClass, String billPK, boolean bLazyLoad)
throws MetaDataException {
NCObject ncObj = new VOQueryPersister(voClass.getName()).queryBillImp(billPK, bLazyLoad);
if (ncObj == null)
return null;
if (AggregatedValueObject.class.isAssignableFrom(voClass))
return ncObj.getContainmentObject();
else
return ncObj.getModelConsistObject();
}
public Collection queryBillOfVOByPKs(Class voClass, String[] billPKs, boolean bLazyLoad)
throws MetaDataException {
Collection<NCObject> col = new VOQueryPersister(voClass.getName()).queryBillsImp(billPKs,
bLazyLoad);
if (col == null || col.size() == 0)
return null;
Collection result = new ArrayList<Object>();
if (AggregatedValueObject.class.isAssignableFrom(voClass)) {
for (NCObject ncObj : col) {
result.add(ncObj.getContainmentObject());
}
} else {
for (NCObject ncObj : col) {
result.add(ncObj.getModelConsistObject());
}
}
return result;
}
public Object[] queryBillOfVOByPKsWithOrder(Class voClass, String[] billPKs, boolean bLazyLoad)
throws MetaDataException {
Collection<NCObject> col = new VOQueryPersister(voClass.getName()).queryBillsImp(billPKs,
bLazyLoad);
return getObjectWithorder(col, billPKs, voClass);
}
public Object[] queryBillOfVOByPKsWithOrder(Class voClass, String[] billPKs,
String[] subEntityName) throws MetaDataException {
Collection<NCObject> col = new VOQueryPersister(voClass.getName()).queryBillsImp(billPKs,
subEntityName);
return getObjectWithorder(col, billPKs, voClass);
}
private Object[] getObjectWithorder(Collection<NCObject> col, String[] billPKs, Class voClass) {
if (col == null || col.size() == 0)
return new Object[billPKs.length];
Object[] result = new Object[billPKs.length];
Map<String, Object> id_value_map = new HashMap<String, Object>();
if (AggregatedValueObject.class.isAssignableFrom(voClass)) {
for (NCObject ncObj : col) {
if (ncObj != null) {
try {
((AggregatedValueObject) ncObj.getContainmentObject()).getParentVO().getPrimaryKey();
id_value_map.put(((AggregatedValueObject) ncObj.getContainmentObject()).getParentVO()
.getPrimaryKey(), ncObj.getContainmentObject());
} catch (BusinessException e) {
Logger.error("", e);
}
}
}
} else {
for (NCObject ncObj : col) {
if (ncObj != null) {
id_value_map.put(((SuperVO) ncObj.getModelConsistObject()).getPrimaryKey(),
ncObj.getModelConsistObject());
}
}
}
for (int i = 0; i < result.length; i++) {
result[i] = id_value_map.get(billPKs[i]);
}
return result;
}
public void deleteBillByPK(Class voClass, String[] pks) throws MetaDataException {
new VOPersister(voClass.getName()).deleteBillByPK(pks);
}
public void updateBillWithAttrs(NCObject[] billVos, String[] filtAttrNames)
throws MetaDataException {
if (billVos == null || billVos.length == 0)
throw new MetaDataException(NCLangResOnserver.getInstance().getStrByID("mdbusi", "mdBaseDAO-0006"));
VOPersister persister = new VOPersister((IBusinessEntity) billVos[0].getRelatedBean());
persister.update(billVos, filtAttrNames);
}
}