66 lines
2.2 KiB
Plaintext
Executable File
66 lines
2.2 KiB
Plaintext
Executable File
package com.fp.general.keygen;
|
|
|
|
import java.io.Serializable;
|
|
import java.util.Properties;
|
|
|
|
import org.hibernate.HibernateException;
|
|
import org.hibernate.MappingException;
|
|
import org.hibernate.dialect.Dialect;
|
|
import org.hibernate.engine.spi.SessionImplementor;
|
|
import org.hibernate.id.Configurable;
|
|
import org.hibernate.id.IdentifierGenerator;
|
|
import org.hibernate.type.Type;
|
|
|
|
import com.fp.common.helper.BeanManager;
|
|
import com.fp.general.helper.PropertiesHelper;
|
|
import com.fp.sessionbeans.helper.Sequence;
|
|
|
|
public class SequenceKey extends AbstractKeyGen implements IdentifierGenerator, Configurable {
|
|
public static final String SEQUENCE_NAME = "name";
|
|
|
|
public static final String TYPE = "type";
|
|
|
|
public static final String FILL = "fill";
|
|
|
|
public static final String LENGTH = "length";
|
|
|
|
private String sequenceName = null;
|
|
|
|
private String fill = null;
|
|
|
|
private Integer length = null;
|
|
|
|
private Class<?> type = null;
|
|
|
|
@Override
|
|
public Serializable generate(SessionImplementor session, Object object) throws HibernateException {
|
|
try {
|
|
Sequence s = new Sequence();
|
|
Serializable val = (Serializable) BeanManager.convertObject(s.getNextValue(this.sequenceName), this.type);
|
|
if (this.isString(this.type) && (this.fill != null)) {
|
|
val = this.fill((String) val, this.fill, this.length);
|
|
}
|
|
return val;
|
|
} catch (Exception e) {
|
|
throw new HibernateException(e);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void configure(Type pType, Properties pParams, Dialect pD) throws MappingException {
|
|
this.sequenceName = PropertiesHelper.getString(SequenceKey.SEQUENCE_NAME, pParams, null);
|
|
try {
|
|
this.fill = PropertiesHelper.getString(SequenceKey.FILL, pParams, null);
|
|
this.length = PropertiesHelper.getInteger(SequenceKey.LENGTH, pParams);
|
|
} catch (Exception e) {
|
|
this.fill = null;
|
|
this.length = null;
|
|
}
|
|
try {
|
|
this.type = Class.forName(PropertiesHelper.getString(SequenceKey.TYPE, pParams, null));
|
|
} catch (ClassNotFoundException e) {
|
|
throw new MappingException(e);
|
|
}
|
|
}
|
|
|
|
} |