*/
protected void processSequencing() {
if (! m_generatedValues.isEmpty()) {
DatasourceLogin login = m_session.getProject().getLogin();
Sequence defaultAutoSequence = null;
TableSequence defaultTableSequence = new TableSequence(DEFAULT_TABLE_GENERATOR);
NativeSequence defaultObjectNativeSequence = new NativeSequence(DEFAULT_SEQUENCE_GENERATOR, false);
NativeSequence defaultIdentityNativeSequence = new NativeSequence(DEFAULT_IDENTITY_GENERATOR, 1, true);
// Sequences keyed on generator names.
Hashtable<String, Sequence> sequences = new Hashtable<String, Sequence>();
for (SequenceGeneratorMetadata sequenceGenerator : m_sequenceGenerators.values()) {
String sequenceGeneratorName = sequenceGenerator.getName();
String seqName;
if (sequenceGenerator.getSequenceName() != null && (! sequenceGenerator.getSequenceName().equals(""))) {
seqName = sequenceGenerator.getSequenceName();
} else {
// TODO: Log a message.
seqName = sequenceGeneratorName;
}
Integer allocationSize = sequenceGenerator.getAllocationSize();
if (allocationSize == null) {
// Default value, same as annotation default.
// TODO: Log a message.
allocationSize = new Integer(50);
}
NativeSequence sequence = new NativeSequence(seqName, allocationSize, false);
sequences.put(sequenceGeneratorName, sequence);
if (sequenceGeneratorName.equals(DEFAULT_AUTO_GENERATOR)) {
// SequenceGenerator defined with DEFAULT_AUTO_GENERATOR.
// The sequence it defines will be used as a defaultSequence.
defaultAutoSequence = sequence;
} else if (sequenceGeneratorName.equals(DEFAULT_SEQUENCE_GENERATOR)) {
// SequenceGenerator defined with DEFAULT_SEQUENCE_GENERATOR.
// All sequences of GeneratorType SEQUENCE referencing
// non-defined generators will use a clone of the sequence
// defined by this generator.
defaultObjectNativeSequence = sequence;
}
}
for (TableGeneratorMetadata tableGenerator : m_tableGenerators.values()) {
String tableGeneratorName = tableGenerator.getGeneratorName();
String seqName;
if (tableGenerator.getPkColumnValue() != null && (! tableGenerator.getPkColumnValue().equals(""))) {
seqName = tableGenerator.getPkColumnValue();
} else {
// TODO: Log a message.
seqName = tableGeneratorName;
}
Integer allocationSize = tableGenerator.getAllocationSize();
if (allocationSize == null) {
// Default value, same as annotation default.
// TODO: Log a message.
allocationSize = new Integer(50);
}
Integer initialValue = tableGenerator.getInitialValue();
if (initialValue == null) {
// Default value, same as annotation default.
// TODO: Log a message.
initialValue = new Integer(0);
}
TableSequence sequence = new TableSequence(seqName, allocationSize, initialValue);
sequences.put(tableGeneratorName, sequence);
// Get the database table from the table generator.
sequence.setTable(tableGenerator.getDatabaseTable());
if (tableGenerator.getPkColumnName() != null && (! tableGenerator.getPkColumnName().equals(""))) {
sequence.setNameFieldName(tableGenerator.getPkColumnName());
}
if (tableGenerator.getValueColumnName() != null && (! tableGenerator.getValueColumnName().equals(""))) {
sequence.setCounterFieldName(tableGenerator.getValueColumnName());
}
if (tableGeneratorName.equals(DEFAULT_AUTO_GENERATOR)) {
// TableGenerator defined with DEFAULT_AUTO_GENERATOR.
// The sequence it defines will be used as a defaultSequence.
defaultAutoSequence = sequence;
} else if (tableGeneratorName.equals(DEFAULT_TABLE_GENERATOR)) {
// SequenceGenerator defined with DEFAULT_TABLE_GENERATOR.
// All sequences of GenerationType TABLE referencing non-
// defined generators will use a clone of the sequence
// defined by this generator.
defaultTableSequence = sequence;
}
}
// Finally loop through descriptors and set sequences as required
// into Descriptors and Login
boolean usesAuto = false;
for (Class entityClass : m_generatedValues.keySet()) {
MetadataDescriptor descriptor = m_allAccessors.get(entityClass.getName()).getDescriptor();
GeneratedValueMetadata generatedValue = m_generatedValues.get(entityClass);
String generatorName = generatedValue.getGenerator();
if (generatorName == null) {
// Value was loaded from XML (and it wasn't specified) so
// assign it the annotation default of ""
generatorName = "";
}
Sequence sequence = null;
if (! generatorName.equals("")) {
sequence = sequences.get(generatorName);
}
if (sequence == null) {
Enum strategy = generatedValue.getStrategy();
// A null strategy will default to AUTO.
if (strategy == null || strategy.name().equals(GenerationType.AUTO.name())) {
usesAuto = true;
} else if (strategy.name().equals(GenerationType.TABLE.name())) {
if (generatorName.equals("")) {
sequence = defaultTableSequence;
} else {
sequence = (Sequence)defaultTableSequence.clone();
sequence.setName(generatorName);
}
} else if (strategy.name().equals(GenerationType.SEQUENCE.name())) {
if (generatorName.equals("")) {
sequence = defaultObjectNativeSequence;
} else {
sequence = (Sequence)defaultObjectNativeSequence.clone();
sequence.setName(generatorName);
}
} else if (strategy.name().equals(GenerationType.IDENTITY.name())) {
if (generatorName.equals("")) {
sequence = defaultIdentityNativeSequence;
} else {
sequence = (Sequence)defaultIdentityNativeSequence.clone();
sequence.setName(generatorName);
}
}
}
if (sequence != null) {
descriptor.setSequenceNumberName(sequence.getName());
login.addSequence(sequence);
} else {
String seqName;
if (generatorName.equals("")) {