001    /**
002     * Copyright (c) 2000-2013 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    import com.liferay.portal.util.InitUtil;
022    
023    import java.io.IOException;
024    
025    import java.util.Map;
026    
027    /**
028     * @author Brian Wing Shun Chan
029     * @author Charles May
030     * @author Alexander Chow
031     */
032    public class DBBuilder {
033    
034            public static void main(String[] args) {
035                    Map<String, String> arguments = ArgumentsUtil.parseArguments(args);
036    
037                    InitUtil.initWithSpring(true);
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                    System.exit(0);
057            }
058    
059            public DBBuilder(
060                    String databaseName, String[] databaseTypes, String sqlDir) {
061    
062                    try {
063                            _databaseName = databaseName;
064                            _databaseTypes = databaseTypes;
065    
066                            if (!sqlDir.endsWith("/WEB-INF/sql")) {
067                                    _buildSQLFile(sqlDir, "portal");
068                                    _buildSQLFile(sqlDir, "portal-minimal");
069                                    _buildSQLFile(sqlDir, "portal-tables");
070                            }
071                            else {
072                                    _buildSQLFile(sqlDir, "tables");
073                            }
074    
075                            _buildSQLFile(sqlDir, "indexes");
076                            _buildSQLFile(sqlDir, "sequences");
077                            _buildSQLFile(sqlDir, "update-5.0.1-5.1.0");
078                            _buildSQLFile(sqlDir, "update-5.1.1-5.1.2");
079                            _buildSQLFile(sqlDir, "update-5.1.2-5.2.0");
080                            _buildSQLFile(sqlDir, "update-5.2.0-5.2.1");
081                            _buildSQLFile(sqlDir, "update-5.2.2-5.2.3");
082                            _buildSQLFile(sqlDir, "update-5.2.3-6.0.0");
083                            _buildSQLFile(sqlDir, "update-5.2.5-6.0.0");
084                            _buildSQLFile(sqlDir, "update-5.2.7-6.0.0");
085                            _buildSQLFile(sqlDir, "update-5.2.8-6.0.5");
086                            _buildSQLFile(sqlDir, "update-6.0.0-6.0.1");
087                            _buildSQLFile(sqlDir, "update-6.0.1-6.0.2");
088                            _buildSQLFile(sqlDir, "update-6.0.2-6.0.3");
089                            _buildSQLFile(sqlDir, "update-6.0.4-6.0.5");
090                            _buildSQLFile(sqlDir, "update-6.0.5-6.0.6");
091                            _buildSQLFile(sqlDir, "update-6.0.6-6.1.0");
092                            _buildSQLFile(sqlDir, "update-6.0.12-6.1.0");
093                            _buildSQLFile(sqlDir, "update-6.1.0-6.1.1");
094    
095                            _buildCreateFile(sqlDir);
096                    }
097                    catch (Exception e) {
098                            e.printStackTrace();
099                    }
100            }
101    
102            private void _buildCreateFile(String sqlDir) throws IOException {
103                    for (int i = 0; i < _databaseTypes.length; i++) {
104                            String databaseType = _databaseTypes[i];
105    
106                            if (databaseType.equals(DB.TYPE_HYPERSONIC) ||
107                                    databaseType.equals(DB.TYPE_INTERBASE) ||
108                                    databaseType.equals(DB.TYPE_JDATASTORE) ||
109                                    databaseType.equals(DB.TYPE_SAP)) {
110    
111                                    continue;
112                            }
113    
114                            DB db = DBFactoryUtil.getDB(_databaseTypes[i]);
115    
116                            if (db != null) {
117                                    if (!sqlDir.endsWith("/WEB-INF/sql")) {
118                                            db.buildCreateFile(sqlDir, _databaseName);
119                                    }
120                                    else {
121                                            db.buildCreateFile(sqlDir, _databaseName, DB.POPULATED);
122                                    }
123                            }
124                    }
125            }
126    
127            private void _buildSQLFile(String sqlDir, String fileName)
128                    throws IOException {
129    
130                    if (!FileUtil.exists(sqlDir + "/" + fileName + ".sql")) {
131                            return;
132                    }
133    
134                    for (int i = 0; i < _databaseTypes.length; i++) {
135                            DB db = DBFactoryUtil.getDB(_databaseTypes[i]);
136    
137                            if (db != null) {
138                                    db.buildSQLFile(sqlDir, fileName);
139                            }
140                    }
141            }
142    
143            private String _databaseName;
144            private String[] _databaseTypes;
145    
146    }