001: /*
002: * File : $Source: /usr/local/cvs/opencms/src-setup/org/opencms/setup/update6to7/oracle/CmsUpdateDBProjectId.java,v $
003: * Date : $Date: 2008-02-27 12:05:48 $
004: * Version: $Revision: 1.2 $
005: *
006: * This library is part of OpenCms -
007: * the Open Source Content Management System
008: *
009: * Copyright (c) 2002 - 2008 Alkacon Software GmbH (http://www.alkacon.com)
010: *
011: * This library is free software; you can redistribute it and/or
012: * modify it under the terms of the GNU Lesser General Public
013: * License as published by the Free Software Foundation; either
014: * version 2.1 of the License, or (at your option) any later version.
015: *
016: * This library is distributed in the hope that it will be useful,
017: * but WITHOUT ANY WARRANTY; without even the implied warranty of
018: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: * Lesser General Public License for more details.
020: *
021: * For further information about Alkacon Software GmbH, please see the
022: * company website: http://www.alkacon.com
023: *
024: * For further information about OpenCms, please see the
025: * project website: http://www.opencms.org
026: *
027: * You should have received a copy of the GNU Lesser General Public
028: * License along with this library; if not, write to the Free Software
029: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
030: */
031:
032: package org.opencms.setup.update6to7.oracle;
033:
034: import org.opencms.setup.CmsSetupDBWrapper;
035: import org.opencms.setup.CmsSetupDb;
036:
037: import java.io.IOException;
038: import java.sql.SQLException;
039: import java.util.HashMap;
040: import java.util.Map;
041:
042: /**
043: * Oracle implementation to update the project ids to uuids.<p>
044: *
045: * @author Roland Metzler
046: * @author Peter Bonrad
047: *
048: * @version $Revision: 1.2 $
049: *
050: * @since 7.0.0
051: */
052: public class CmsUpdateDBProjectId extends
053: org.opencms.setup.update6to7.generic.CmsUpdateDBProjectId {
054:
055: /** Constant for the sql primary key of the CMS_PROJECTRESOURCES table.<p> */
056: private static final String COLUMN_PROJECT_ID_RESOURCE_PATH = "PROJECT_ID,RESOURCE_PATH";
057:
058: /** Constant for the SQL query properties.<p> */
059: private static final String QUERY_PROPERTY_FILE = "oracle/cms_projectid_queries.properties";
060:
061: /** Constant for the replacement in the sql query. */
062: private static final String REPLACEMENT_TABLEINDEX_SPACE = "${indexTablespace}";
063:
064: /**
065: * Constructor.<p>
066: *
067: * @throws IOException if the sql queries properties file could not be read
068: */
069: public CmsUpdateDBProjectId() throws IOException {
070:
071: super ();
072: loadQueryProperties(QUERY_PROPERTIES_PREFIX
073: + QUERY_PROPERTY_FILE);
074: }
075:
076: /**
077: * @see org.opencms.setup.update6to7.generic.CmsUpdateDBProjectId#addPrimaryKey(org.opencms.setup.CmsSetupDb, java.lang.String, java.lang.String)
078: */
079: protected void addPrimaryKey(CmsSetupDb dbCon, String tablename,
080: String primaryKey) throws SQLException {
081:
082: String indexTablespace = (String) m_poolData
083: .get("indexTablespace");
084:
085: System.out.println(new Exception().getStackTrace()[0]
086: .toString());
087: if (dbCon.hasTableOrColumn(tablename, null)) {
088: String query = readQuery(QUERY_ADD_PRIMARY_KEY);
089: Map replacer = new HashMap();
090: replacer.put(REPLACEMENT_TABLENAME, tablename);
091: replacer.put(REPLACEMENT_PRIMARY_KEY, primaryKey);
092: replacer.put(REPLACEMENT_TABLEINDEX_SPACE, indexTablespace);
093: dbCon.updateSqlStatement(query, replacer, null);
094: } else {
095: System.out.println("table " + tablename
096: + " does not exists");
097: }
098: }
099:
100: /**
101: * @see org.opencms.setup.update6to7.generic.CmsUpdateDBProjectId#addUUIDColumnToTable(org.opencms.setup.CmsSetupDb, java.lang.String, java.lang.String)
102: */
103: protected void addUUIDColumnToTable(CmsSetupDb dbCon,
104: String tablename, String column) throws SQLException {
105:
106: System.out.println(new Exception().getStackTrace()[0]
107: .toString());
108: if (!dbCon.hasTableOrColumn(tablename, column)) {
109: String query = readQuery(QUERY_ADD_TEMP_UUID_COLUMN); // Get the query
110: // if the table is not one of the ONLINE or OFFLINE resources add the new column in the first position
111: if (!RESOURCES_TABLES_LIST.contains(tablename)) {
112: //query += " FIRST";
113: }
114: Map replacer = new HashMap(); // Build the replacements
115: replacer.put(REPLACEMENT_TABLENAME, tablename);
116: replacer.put(REPLACEMENT_COLUMN, column);
117: dbCon.updateSqlStatement(query, replacer, null); // execute the query
118: } else {
119: System.out.println("column " + column + " in table "
120: + tablename + " already exists");
121: }
122: }
123:
124: /**
125: * @see org.opencms.setup.update6to7.generic.CmsUpdateDBProjectId#checkColumnTypeProjectId(int)
126: */
127: protected boolean checkColumnTypeProjectId(int type) {
128:
129: return type == java.sql.Types.NUMERIC;
130: }
131:
132: /**
133: * @see org.opencms.setup.update6to7.generic.CmsUpdateDBProjectId#createHistProjectsTable(org.opencms.setup.CmsSetupDb)
134: */
135: protected void createHistProjectsTable(CmsSetupDb dbCon)
136: throws SQLException {
137:
138: System.out.println(new Exception().getStackTrace()[0]
139: .toString());
140: if (!dbCon.hasTableOrColumn(HISTORY_PROJECTS_TABLE, null)) {
141: String createStatement = readQuery(QUERY_CREATE_HISTORY_PROJECTS_TABLE);
142:
143: String indexTablespace = (String) m_poolData
144: .get("indexTablespace");
145: HashMap replacer = new HashMap();
146: replacer.put(REPLACEMENT_TABLEINDEX_SPACE, indexTablespace);
147:
148: dbCon.updateSqlStatement(createStatement, replacer, null);
149: transferDataToHistoryTable(dbCon);
150: } else {
151: System.out.println("table " + HISTORY_PROJECTS_TABLE
152: + " already exists");
153: }
154: }
155:
156: /**
157: * @see org.opencms.setup.update6to7.generic.CmsUpdateDBProjectId#createTempTable(org.opencms.setup.CmsSetupDb)
158: */
159: protected void createTempTable(CmsSetupDb dbCon)
160: throws SQLException {
161:
162: System.out.println(new Exception().getStackTrace()[0]
163: .toString());
164: if (!dbCon.hasTableOrColumn(TEMPORARY_TABLE_NAME, null)) {
165: String createStatement = readQuery(QUERY_CREATE_TEMP_TABLE_UUIDS);
166:
167: String indexTablespace = (String) m_poolData
168: .get("indexTablespace");
169: HashMap replacer = new HashMap();
170: replacer.put(REPLACEMENT_TABLEINDEX_SPACE, indexTablespace);
171:
172: dbCon.updateSqlStatement(createStatement, replacer, null);
173: } else {
174: System.out.println("table " + TEMPORARY_TABLE_NAME
175: + " already exists");
176: }
177: }
178:
179: /**
180: * @see org.opencms.setup.update6to7.generic.CmsUpdateDBProjectId#getColumnProjectIdResourcePath()
181: */
182: protected String getColumnProjectIdResourcePath() {
183:
184: return COLUMN_PROJECT_ID_RESOURCE_PATH;
185: }
186:
187: /**
188: * @see org.opencms.setup.update6to7.generic.CmsUpdateDBProjectId#needsUpdating(org.opencms.setup.CmsSetupDb, java.lang.String)
189: */
190: protected boolean needsUpdating(CmsSetupDb dbCon, String tablename)
191: throws SQLException {
192:
193: System.out.println(new Exception().getStackTrace()[0]
194: .toString());
195: boolean result = true;
196:
197: String query = readQuery(QUERY_DESCRIBE_TABLE);
198: Map replacer = new HashMap();
199: replacer.put(REPLACEMENT_TABLENAME, tablename);
200: CmsSetupDBWrapper db = null;
201: try {
202: db = dbCon.executeSqlStatement(query, replacer);
203:
204: while (db.getResultSet().next()) {
205: String fieldname = db.getResultSet().getString(
206: "COLUMN_NAME");
207: if (fieldname.equals(COLUMN_PROJECT_ID)
208: || fieldname
209: .equals(COLUMN_PROJECT_LASTMODIFIED)) {
210: try {
211: String fieldtype = db.getResultSet().getString(
212: "DATA_TYPE");
213: // If the type is varchar then no update needs to be done.
214: if (fieldtype.indexOf("VARCHAR") > -1) {
215: return false;
216: }
217: } catch (SQLException e) {
218: result = true;
219: }
220: }
221: }
222: } finally {
223: if (db != null) {
224: db.close();
225: }
226: }
227:
228: return result;
229: }
230: }
|