package com.founderdpt.comm.xworld.orm.mapping.generator.impl;
import java.util.List;
import javax.xml.xquery.XQException;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import com.founderdpt.comm.xworld.db.DptXMLDBSessionFactory;
import com.founderdpt.comm.xworld.db.IXQSession;
import com.founderdpt.comm.xworld.orm.XMLConfigClientTemplate;
import com.founderdpt.comm.xworld.orm.exception.GeneratorException;
import com.founderdpt.comm.xworld.orm.mapping.MappingManager;
import com.founderdpt.comm.xworld.orm.mapping.generator.IGeneratorID;
import com.founderdpt.comm.xworld.orm.mapping.model.XworldMapping;
import com.founderdpt.comm.xworld.orm.mapping.model.XworldMapping.Column;
import com.founderdpt.comm.xworld.orm.mapping.model.XworldMapping.Id;
import com.founderdpt.comm.xworld.orm.mapping.model.XworldMapping.Id.Generator;
import com.founderdpt.comm.xworld.orm.mapping.model.XworldMapping.Id.Generator.Param;
public class FSequenceGeneratorImpl implements IGeneratorID {
private static Logger log = Logger.getLogger(FSequenceGeneratorImpl.class);
@Override
public String generator(Class clazz) {
try {
XworldMapping mapping = MappingManager.get(clazz);
Id idObj = mapping.getId();
Generator generator = idObj.getGenerator();
List<XworldMapping.Id.Generator.Param> params = generator
.getParam();
String sequence_name = null;
if (params != null) {
for (Param param : params) {
String name = param.getName();
if ("sequence".equals(name)) {
sequence_name = param.getValue();
}
}
}
if (StringUtils.isBlank(sequence_name)) {
sequence_name = clazz.getSimpleName();
}
return generatorValue(sequence_name);
} catch (GeneratorException e) {
throw e;
} catch (Exception e) {
throw new GeneratorException("使用sequence生成ID错误", e);
}
}
public String generatorValue(String sequence_name) {
try {
IXQSession session = DptXMLDBSessionFactory.getXQSession(false);
String seq_query="let $x := getsequencevalue(\""+ sequence_name + "\",1) return $x";
if(log.isDebugEnabled()){
System.out.println("get sequence xquery:"+seq_query);
}
return session.executeQuery(seq_query);
} catch (Exception e) {
throw new GeneratorException("使用sequence生成ID错误", e);
}
}
@Override
public String generatorColumnValue(Column column,Class clazz) {
com.founderdpt.comm.xworld.orm.mapping.model.XworldMapping.Column.Generator generatorObj = column.getGenerator();
List<XworldMapping.Column.Generator.Param> params =generatorObj.getParam();
String sequence_name = null;
if(params!=null){
for (XworldMapping.Column.Generator.Param param : params) {
String name = param.getName();
if ("sequence".equals(name)) {
sequence_name = param.getValue();
}
}
}
if (StringUtils.isBlank(sequence_name)) {
String column_name = column.getName();
sequence_name = clazz.getSimpleName() + "_"
+ column_name ;
}
return generatorValue(sequence_name);
}
}