001 package org.apache.ojb.broker.metadata.torque;
002
003 /* Copyright 2002-2005 The Apache Software Foundation
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 import org.apache.ojb.broker.metadata.DescriptorRepository;
019 import org.apache.ojb.broker.metadata.FieldDescriptor;
020
021 import java.util.Iterator;
022 import java.util.Vector;
023
024 public class TorqueTableGenerator {
025
026 private TorqueFieldGenerator fieldGenerator;
027 private TorqueForeignKeyGenerator foreignKeyPreprocessor;
028 private TorqueIndexGenerator indexGenerator;
029
030 public TorqueTableGenerator(DescriptorRepository repository, boolean ignoreAutoIncrement) {
031 this.fieldGenerator = new TorqueFieldGenerator(ignoreAutoIncrement);
032 this.foreignKeyPreprocessor = new TorqueForeignKeyGenerator(repository);
033 this.foreignKeyPreprocessor.buildConstraintsMap();
034 this.indexGenerator = new TorqueIndexGenerator();
035 }
036
037 public void generateMappingTables(StringBuffer buffer, String indexTablespaceName) {
038 Iterator mappingTables = this.foreignKeyPreprocessor.getMappingTables().values().iterator();
039 while (mappingTables.hasNext()) {
040 TableDescriptor mappingTable = (TableDescriptor) mappingTables.next();
041 FieldDescriptor descriptors[] = (FieldDescriptor[]) (mappingTable.getColumns().toArray(new FieldDescriptor[0]));
042 if (descriptors != null && descriptors.length > 0) {
043 generateTableHeader(buffer, mappingTable, indexTablespaceName);
044 this.fieldGenerator.generateMappingFieldDescriptors(descriptors, buffer);
045 generateForeignKeys(mappingTable, buffer);
046 buffer.append(" </table>\n");
047 }
048 }
049 }
050
051 public void generateStandardTable(TableDescriptor tableDescriptor, StringBuffer buffer, String indexTablespaceName) {
052 generateTableHeader(buffer, tableDescriptor, indexTablespaceName);
053
054 this.fieldGenerator.generateFieldDescriptors((FieldDescriptor[]) tableDescriptor.getColumns().toArray(new FieldDescriptor[0]), buffer);
055 this.indexGenerator.generateIndices(tableDescriptor.getIndices(), buffer);
056 generateForeignKeys(tableDescriptor, buffer);
057
058 buffer.append(" </table>\n\n");
059 }
060
061 private void generateTableHeader(StringBuffer buffer, TableDescriptor tableDescriptor, String indexTablespaceName) {
062 buffer.append(" <table name=\"");
063 buffer.append(tableDescriptor.getName());
064 buffer.append("\" indexTablespace=\"");
065 buffer.append(indexTablespaceName);
066 buffer.append("\">\n");
067 }
068
069 private void generateForeignKeys(TableDescriptor tableDescriptor, StringBuffer buffer) {
070 Vector foreignKeys = this.foreignKeyPreprocessor.getForeignKeysForTable(tableDescriptor.getName());
071 if (foreignKeys != null) {
072 Iterator foreignKeyIterator = foreignKeys.iterator();
073 while (foreignKeyIterator.hasNext()) {
074 buffer.append(foreignKeyIterator.next());
075 }
076 }
077 }
078 }