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.RepositoryPersistor;
020    
021    import java.io.FileWriter;
022    import java.io.IOException;
023    import java.util.Iterator;
024    
025    public class TorqueRepositoryGenerator
026    {
027    
028        private TorqueTablePreprocessor tablePreprocessor;
029        private TorqueTableGenerator tableGenerator;
030    
031        public TorqueRepositoryGenerator(String xmlInputFile, boolean ignoreAutoIncrement) throws Exception
032        {
033            RepositoryPersistor persistor = new RepositoryPersistor();
034            DescriptorRepository repository = persistor.readDescriptorRepository(xmlInputFile);
035    
036            this.tablePreprocessor = new TorqueTablePreprocessor(repository);
037            this.tablePreprocessor.buildStandardTables();
038            this.tableGenerator = new TorqueTableGenerator(repository, ignoreAutoIncrement);
039        }
040    
041        public void generateTorqueRepository(String xmlOutputFile, String databaseName, String indexTablespaceName) throws Exception
042        {
043            Iterator tableDescriptorIterators = this.tablePreprocessor.getStandardTables().values().iterator();
044            StringBuffer buffer = new StringBuffer(4096);
045    
046            generateDatabaseHeader(databaseName, indexTablespaceName, buffer);
047    
048            while (tableDescriptorIterators.hasNext())
049            {
050                this.tableGenerator.generateStandardTable((TableDescriptor) tableDescriptorIterators.next(), buffer, indexTablespaceName);
051            }
052    
053            this.tableGenerator.generateMappingTables(buffer, indexTablespaceName);
054            buffer.append("</database>\n");
055            generateOutputFile(xmlOutputFile, buffer);
056        }
057    
058        private void generateDatabaseHeader(String databaseName, String indexTablespaceName, StringBuffer buffer)
059        {
060            buffer.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"yes\" ?>\n");
061            buffer.append("<!DOCTYPE database>\n\n");
062            buffer.append("<database name=\"");
063            buffer.append(databaseName);
064            buffer.append("\" indexTablespace=\"");
065            buffer.append(indexTablespaceName);
066            buffer.append("\">\n");
067        }
068    
069        private void generateOutputFile(String xmlOutputFile, StringBuffer buffer) throws IOException
070        {
071            FileWriter writer = new FileWriter(xmlOutputFile);
072            writer.write(buffer.toString());
073            writer.flush();
074            writer.close();
075        }
076    
077        public static void main(String args[]) throws Exception
078        {
079            if (args.length >= 4 && args.length <= 5)
080            {
081                boolean ignoreAutoIncrement = (args.length == 5 && args[4].equalsIgnoreCase("true"));
082                TorqueRepositoryGenerator generator = new TorqueRepositoryGenerator(args[0], ignoreAutoIncrement);
083                generator.generateTorqueRepository(args[1], args[2], args[3]);
084            }
085            else
086            {
087                System.out.println("[TorqueRepositoryGenerator] Usage: inputFile outputFile databaseName indexTablespaceName (ignoreAutoIncrement)");
088            }
089        }
090    
091    }