]> source.dussan.org Git - archiva.git/blob
0e25a028c6e3fe3cbf9877aea9d9da976a2462f5
[archiva.git] /
1 package org.apache.maven.archiva.database;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import com.ibatis.sqlmap.client.SqlMapClient;
23
24 import org.codehaus.plexus.ibatis.PlexusIbatisHelper;
25 import org.codehaus.plexus.logging.AbstractLogEnabled;
26 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
27 import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
28
29 import java.sql.Connection;
30 import java.sql.DatabaseMetaData;
31 import java.sql.ResultSet;
32 import java.sql.SQLException;
33
34 /**
35  * AbstractIbatisStore 
36  *
37  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
38  * @version $Id$
39  */
40 public abstract class AbstractIbatisStore
41     extends AbstractLogEnabled
42     implements Initializable
43 {
44     /**
45      * @plexus.requirement 
46      */
47     protected PlexusIbatisHelper ibatisHelper;
48
49     /**
50      * @plexus.configuration default-value="create"
51      */
52     private String createPrefix;
53
54     /**
55      * @plexus.configuration default-value="drop"
56      */
57     private String dropPrefix;
58
59     protected abstract String[] getTableNames();
60
61     public void initialize()
62         throws InitializationException
63     {
64         try
65         {
66             String tableNames[] = getTableNames();
67             for ( int i = 0; i < tableNames.length; i++ )
68             {
69                 String tableName = tableNames[i];
70                 initializeTable( tableName );
71             }
72         }
73         catch ( ArchivaDatabaseException e )
74         {
75             throw new InitializationException( "Unable to initialize the database: " + e.getMessage(), e );
76         }
77     }
78
79     protected void initializeTable( String tableName )
80         throws ArchivaDatabaseException
81     {
82         SqlMapClient sqlMap = ibatisHelper.getSqlMapClient();
83
84         try
85         {
86             sqlMap.startTransaction();
87
88             Connection con = sqlMap.getCurrentConnection();
89
90             DatabaseMetaData databaseMetaData = con.getMetaData();
91
92             ResultSet rs = databaseMetaData.getTables( con.getCatalog(), null, null, null );
93
94             // check if the index database exists in the database
95             while ( rs.next() )
96             {
97                 String dbTableName = rs.getString( "TABLE_NAME" );
98
99                 // if it does then we are already initialized
100                 if ( dbTableName.toLowerCase().equals( tableName.toLowerCase() ) )
101                 {
102                     return;
103                 }
104             }
105
106             // Create the tables
107
108             getLogger().info( "Creating table: " + tableName );
109             sqlMap.update( createPrefix + tableName, null );
110
111             sqlMap.commitTransaction();
112         }
113         catch ( SQLException e )
114         {
115             getLogger().error( "Error while initializing database, showing all linked exceptions in SQLException." );
116
117             while ( e != null )
118             {
119                 getLogger().error( e.getMessage(), e );
120
121                 e = e.getNextException();
122             }
123
124             throw new ArchivaDatabaseException( "Error while setting up database.", e );
125         }
126         finally
127         {
128             try
129             {
130                 sqlMap.endTransaction();
131             }
132             catch ( SQLException e )
133             {
134                 e.printStackTrace();
135             }
136         }
137     }
138
139     protected void dropTable( String tableName )
140         throws ArchivaDatabaseException
141     {
142         SqlMapClient sqlMap = ibatisHelper.getSqlMapClient();
143
144         try
145         {
146             sqlMap.startTransaction();
147
148             getLogger().info( "Dropping table: " + tableName );
149             sqlMap.update( dropPrefix + tableName, null );
150
151             sqlMap.commitTransaction();
152         }
153         catch ( SQLException e )
154         {
155             getLogger().error( "Error while dropping database, showing all linked exceptions in SQLException." );
156
157             while ( e != null )
158             {
159                 getLogger().error( e.getMessage(), e );
160
161                 e = e.getNextException();
162             }
163
164             throw new ArchivaDatabaseException( "Error while dropping database.", e );
165         }
166         finally
167         {
168             try
169             {
170                 sqlMap.endTransaction();
171             }
172             catch ( SQLException e )
173             {
174                 e.printStackTrace();
175             }
176         }
177     }
178     
179     
180 }