}
}
Sequence defaultAutoSequence = null;
TableSequence defaultTableSequence = new TableSequence(MetadataConstants.DEFAULT_TABLE_GENERATOR);
NativeSequence defaultObjectNativeSequence = new NativeSequence(MetadataConstants.DEFAULT_SEQUENCE_GENERATOR, false);
NativeSequence defaultIdentityNativeSequence = new NativeSequence(MetadataConstants.DEFAULT_IDENTITY_GENERATOR, 1, true);
// Sequences keyed on generator names.
Hashtable<String, Sequence> sequences = new Hashtable<String, Sequence>();
for (MetadataSequenceGenerator sequenceGenerator : m_sequenceGenerators.values()) {
String sequenceGeneratorName = sequenceGenerator.getName();
String seqName = (sequenceGenerator.getSequenceName().equals("")) ? sequenceGeneratorName : sequenceGenerator.getSequenceName();
NativeSequence sequence = new NativeSequence(seqName, sequenceGenerator.getAllocationSize(), false);
sequences.put(sequenceGeneratorName, sequence);
if (sequenceGeneratorName.equals(MetadataConstants.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(MetadataConstants.DEFAULT_SEQUENCE_GENERATOR)) {
// SequenceGenerator deinfed 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 (MetadataTableGenerator tableGenerator : m_tableGenerators.values()) {
String tableGeneratorName = tableGenerator.getName();
String seqName = (tableGenerator.getPkColumnValue().equals("")) ? tableGeneratorName : tableGenerator.getPkColumnValue();
TableSequence sequence = new TableSequence(seqName, tableGenerator.getAllocationSize(), tableGenerator.getInitialValue());
sequences.put(tableGeneratorName, sequence);
//bug 2647: pull schema and catalog defaults from the persistence Unit if they are not defined.
String catalogName = tableGenerator.getCatalog();
String schemaName = tableGenerator.getSchema();
if (this.getPersistenceUnit()!=null){
catalogName = catalogName.length()>0? catalogName: this.getPersistenceUnit().getCatalog();
schemaName = schemaName.length()>0? schemaName: this.getPersistenceUnit().getSchema();
}
// Get the database table from the @TableGenerator values.
// In case tableGenerator.table().equals("") default sequence
// table name will be extracted from sequence and used, see
// TableSequence class.
sequence.setTable(new DatabaseTable(MetadataHelper.getFullyQualifiedTableName(tableGenerator.getTable(), sequence.getTableName(), catalogName, schemaName)));
// Process the @UniqueConstraints for this table.
for (String[] uniqueConstraint : tableGenerator.getUniqueConstraints()) {
sequence.getTable().addUniqueConstraints(uniqueConstraint);
}
if (! tableGenerator.getPkColumnName().equals("")) {
sequence.setNameFieldName(tableGenerator.getPkColumnName());
}
if (! tableGenerator.getValueColumnName().equals("")) {
sequence.setCounterFieldName(tableGenerator.getValueColumnName());
}
if (tableGeneratorName.equals(MetadataConstants.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(MetadataConstants.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_allDescriptors.get(entityClass.getName());
MetadataGeneratedValue generatedValue = m_generatedValues.get(entityClass);
String generatorName = generatedValue.getGenerator();
Sequence sequence = null;
if (! generatorName.equals("")) {
sequence = sequences.get(generatorName);
}
if (sequence == null) {
if (generatedValue.getStrategy().equals(MetadataConstants.TABLE)) {
if (generatorName.equals("")) {
sequence = defaultTableSequence;
} else {
sequence = (Sequence)defaultTableSequence.clone();
sequence.setName(generatorName);
}
} else if (generatedValue.getStrategy().equals(MetadataConstants.SEQUENCE)) {
if (generatorName.equals("")) {
sequence = defaultObjectNativeSequence;
} else {
sequence = (Sequence)defaultObjectNativeSequence.clone();
sequence.setName(generatorName);
}
} else if (generatedValue.getStrategy().equals(MetadataConstants.IDENTITY)) {
if (generatorName.equals("")) {
sequence = defaultIdentityNativeSequence;
} else {
sequence = (Sequence)defaultIdentityNativeSequence.clone();
sequence.setName(generatorName);
}
}
}
if (sequence != null) {
descriptor.setSequenceNumberName(sequence.getName());
login.addSequence(sequence);
} else {
// this must be generatedValue.getStrategy().equals(MetadataConstants.AUTO)
usesAuto = true;
String seqName;