001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.tools;
016    
017    import com.liferay.portal.kernel.dao.db.DB;
018    import com.liferay.portal.kernel.dao.db.DBFactoryUtil;
019    import com.liferay.portal.kernel.util.FileUtil;
020    import com.liferay.portal.kernel.util.StringUtil;
021    
022    import java.io.IOException;
023    
024    import java.util.Map;
025    
026    /**
027     * @author Brian Wing Shun Chan
028     * @author Charles May
029     * @author Alexander Chow
030     * @author Raymond Aug??
031     */
032    public class DBBuilder {
033    
034            public static void main(String[] args) {
035                    ToolDependencies.wireBasic();
036    
037                    Map<String, String> arguments = ArgumentsUtil.parseArguments(args);
038    
039                    String databaseName = arguments.get("db.database.name");
040    
041                    String databaseTypesString = arguments.get("db.database.types");
042    
043                    String[] databaseTypes = null;
044    
045                    if (databaseTypesString == null) {
046                            databaseTypes = DB.TYPE_ALL;
047                    }
048                    else {
049                            databaseTypes = StringUtil.split(databaseTypesString);
050                    }
051    
052                    String sqlDir = arguments.get("db.sql.dir");
053    
054                    new DBBuilder(databaseName, databaseTypes, sqlDir);
055            }
056    
057            public DBBuilder(
058                    String databaseName, String[] databaseTypes, String sqlDir) {
059    
060                    _databaseName = databaseName;
061                    _databaseTypes = databaseTypes;
062    
063                    try {
064                            if (!sqlDir.endsWith("/WEB-INF/sql")) {
065                                    _buildSQLFile(sqlDir, "portal");
066                                    _buildSQLFile(sqlDir, "portal-tables");
067                            }
068                            else {
069                                    _buildSQLFile(sqlDir, "tables");
070                            }
071    
072                            _buildSQLFile(sqlDir, "indexes");
073                            _buildSQLFile(sqlDir, "sequences");
074                            _buildSQLFile(sqlDir, "update-5.0.1-5.1.0");
075                            _buildSQLFile(sqlDir, "update-5.1.1-5.1.2");
076                            _buildSQLFile(sqlDir, "update-5.1.2-5.2.0");
077                            _buildSQLFile(sqlDir, "update-5.2.0-5.2.1");
078                            _buildSQLFile(sqlDir, "update-5.2.2-5.2.3");
079                            _buildSQLFile(sqlDir, "update-5.2.3-6.0.0");
080                            _buildSQLFile(sqlDir, "update-5.2.5-6.0.0");
081                            _buildSQLFile(sqlDir, "update-5.2.7-6.0.0");
082                            _buildSQLFile(sqlDir, "update-5.2.8-6.0.5");
083                            _buildSQLFile(sqlDir, "update-6.0.0-6.0.1");
084                            _buildSQLFile(sqlDir, "update-6.0.1-6.0.2");
085                            _buildSQLFile(sqlDir, "update-6.0.2-6.0.3");
086                            _buildSQLFile(sqlDir, "update-6.0.4-6.0.5");
087                            _buildSQLFile(sqlDir, "update-6.0.5-6.0.6");
088                            _buildSQLFile(sqlDir, "update-6.0.6-6.1.0");
089                            _buildSQLFile(sqlDir, "update-6.0.12-6.1.0");
090                            _buildSQLFile(sqlDir, "update-6.1.0-6.1.1");
091                            _buildSQLFile(sqlDir, "update-6.1.1-6.2.0");
092    
093                            _buildCreateFile(sqlDir);
094                    }
095                    catch (Exception e) {
096                            e.printStackTrace();
097                    }
098            }
099    
100            private void _buildCreateFile(String sqlDir) throws IOException {
101                    for (String databaseType : _databaseTypes) {
102                            if (databaseType.equals(DB.TYPE_HYPERSONIC) ||
103                                    databaseType.equals(DB.TYPE_INTERBASE) ||
104                                    databaseType.equals(DB.TYPE_JDATASTORE) ||
105                                    databaseType.equals(DB.TYPE_SAP)) {
106    
107                                    continue;
108                            }
109    
110                            DB db = DBFactoryUtil.getDB(databaseType);
111    
112                            if (db != null) {
113                                    if (!sqlDir.endsWith("/WEB-INF/sql")) {
114                                            db.buildCreateFile(sqlDir, _databaseName);
115                                    }
116                                    else {
117                                            db.buildCreateFile(sqlDir, _databaseName, DB.DEFAULT);
118                                    }
119                            }
120                    }
121            }
122    
123            private void _buildSQLFile(String sqlDir, String fileName)
124                    throws IOException {
125    
126                    if (!FileUtil.exists(sqlDir + "/" + fileName + ".sql")) {
127                            return;
128                    }
129    
130                    for (String _databaseType : _databaseTypes) {
131                            DB db = DBFactoryUtil.getDB(_databaseType);
132    
133                            if (db != null) {
134                                    db.buildSQLFile(sqlDir, fileName);
135                            }
136                    }
137            }
138    
139            private final String _databaseName;
140            private final String[] _databaseTypes;
141    
142    }