import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Set;
import oracle.jdbc.OracleDriver;
/**
* Oradoc.java -
* @author naito
*/
public class Oradoc {
/** host */
private String _host = "localhost";
/** port */
private String _port = "1521";
/** SID */
private String _sid = null;
/** user */
private String _user = null;
/** password */
private String _pass = null;
public static void main( String[] args ) {
try {
DriverManager.registerDriver( new OracleDriver() );
Oracle oradoc = new Oradoc( args );
oradoc.start();
} catch( SQLException e ) {
e.printStackTrace();
}
}
/**
* コンストラクタ
* @param args 起動引数
*/
public Oradoc( String[] args ) {
// 接続ストリング
String str = null;
// 出力先
String destDir = System.getProperty( "user.dir", "." );
// タイトル
String title = "無題ドキュメント";
// ログ出力
boolean verbose = false;
boolean invalid = false;
String encoding = "Shift_JIS";
// 引数解析
int num = args.length;
for( int i = 0; i < num; i++ ) {
if( agrs[ i ].equals( "-host" ) && i + 1 < num ) {[
_host = args[ ++i ];
} else if( agrs[ i ].equals( "-port" ) && i + 1 < num ) {
_port = args[ ++i ];
} else if( agrs[ i ].equals( "-d" ) && i + 1 < num ) {
destDir = args[ ++i ];
} else if( agrs[ i ].equals( "-title" ) && i + 1 < num ) {
titile = args[ ++i ];
} else if( agrs[ i ].equals( "-verbose" ) ) {
verbose = true;
} else if( agrs[ i ].equals( "-invalid" ) ) {
invalid = true;
} else if( agrs[ i ].equals( "-encoding" ) && i + 1 < num ) {
encoding = args[ ++i ];
} else {
str = args[ i ];
}
}
// エラーチェック
if( str == null ) {
System.out.println( "Useage : Oradoc User/Password@SID [-host HOSTNAME] [-port PORT] [-d DESTDIR] [-title TITLE] [-verbose] [-encoding ENCODING]" );
System.exit( 1 );
}
// user/pass@SID 解析
if( str.matches( ".+/.+@.+" ) ) {
int idx = str.indexOf( "/" );
_user = str.substring( 0, idx );
int idx2 = str.indexOf( "@", idx + 1 );
_pass = str.substring( idx + 1, idx2 );
_sid = str.substring( idx2 + 1 );
}
// destDir, windowTitle, encoding 設定
HTMLManager.setDestDir( destDir );
HTMLManager.setWindowTitle( title );
HTMLManager.setEncoding( encoding );
// ログ出力フラグ設定
HTMLManager.setVerbose( verbose );
SQLManager.setVerbose( verbose );
SQLManager.setInvalid( invalid );
}
/**
* 処理を開始します。
*/
private void start() {
try {
// ******* DB 接続 *************
Connection conn = getConnection( _host, _port, _sid, _user, _pass );
if( conn == null ) return;
SQLManager.setConnection( conn );
// ******* HTML 作成 ***********
// index
HTMLManager.createIndexHTML();
// stylesheet
HTMLManager.createStyleSheet();
// ******* ObjectList 取得 *****
// 全OBJECT のリストを取得 - [objects]
ObjectItem[] objects = ( ObjectItem[] ) SQLManager.getObjects();
// OBJECT_TYPE ごとの Map Key:objectType value:ObjectItem の ArrayList
HashMap objectTypeMap = new HashMap();
// OBJECT_TYPE ごとに振り分け
for( int i = 0; i < objects.length; i++ ) {
String objectType = objects[ i ].objectType;
ArrayList list = ( ArrayList ) objectTypeMap.get( objectType );
if( list == null ) {
list = new ArrayList();
objectTypeMap.put( objectType, list );
}
list.add( objects[ i ] );
}
// OBJECT_TYPE のリスト - [objectTypes]
Set set = objectTypeMap.keySet();
String[] objectTypes = ( String[] ) set.toArray( new String[ set.size() ] );
Arrays.sort( objectTypes );
// ******* HTML 作成 ***********
// 概要
HTMLManager.createOverviewFrameHTML( objectTypes );
HTMLManager.createOverviewSummaryHTML( objectTypes );
// タイプ別
HTMLManager.createPackageFrameHTML( null, objects );
for( int i = 0; i < objectTypes.length; i++ ) {
ArrayList list = ( ArrayList )objectTypeMap.get( objectTypes[ i ] );
ObjectItem[] objectItems = ( ObjectItem[] ) list.toArray( new ObjectItem[ list.size() ] );
HTMLManager.createPackageFrameHTML( objectTypes[ i ], objectItems );
HTMLManager.createPackageSummaryHTML( objectTypes[ i ], objectItems );
}
// ******* タイプ別処理振り分け *************
// TABLE のリストを取得 - [ table ( key:tableName value: TableItem ) ]
HashMap tables = SQLManager.getTables();
// TABLECOLUMN のリストを取得 - [tableColumns ( key:tableName value:ArrayList of TableColumnItem ) ]
HashMap tableColumns = SQLManager.getTableColumns();
// VIEW のリストを取得 - [views ( key:tableName value:TableItem ) ]
HashMap views = SQLManager.getViews();
// INDEX のリストを取得 - [indexes ( key:indexName value:IndexItem )]
HashMap indexes = SQLManager.getIndexes();
// INDEXCOLUMN のリストを取得 -[indexColumns ( key:indexName value:ArrayList of columnName ) ]
HashMap indexColumns = SQLManager.getIndexColumns();
// SEQUENCE のリストを取得 * [ sequences ( key:sequenceName value:SequenceItem ) ]
HashMap sequences = SQLManager.getSequences();
// PROCEDURE のリストを取得
String[] procedures = SQLManager.getProcedures();
// FUNCTION のリストを取得
String[] functions = SQLManager.getFunctions();
// PACKAGE のリストを取得 - [ packages ( key:packageName value:ArrayList of procedureName ) ]
HashMap packages = SQLManager.getPackages();
HTMLManager.setProcedures( procedures, functions, packages );
// オブジェクト詳細
for( int i = 0; i < objects.length; i++ ) {
// TABLE
if( objects[ i ].objectType.equals( "TABLE" ) ) {
TableItem item = ( TableItem )tables.get( objects[ i ].objectName );
ArrayList list = ( ArrayList ) tableColumns.get( objects[ i ].objectName );
if( item == null || list == null ) continue;
item.setObjectItem( objects[ i ] );
item.columns = ( TableColumnItem[] ) list.toArray( new TableColumnItem[ list.size() ] );
item.constraints = SQLManager.getTableConsts( objects[ i ].objectName );
HTMLManager.createTableFrameHTML( item );
}
// VIEW
else if( objects[ i ].objectType.equals( "VIEW" ) ) {
ViewItem item = ( ViewItem ) views.get( objects[ i ].objectName );
if( item == null ) continue;
item.setObjectItem( objects[ i ] );
HTMLManager.createViewFrameHTML( item );
}
// SEQUENCE
else if( objects[ i ].objectType.equals( "SEQUENCE" ) {
SequenceItem item = ( SequenceIte ) sequence.get( objects[i].objectName );
if( item == null ) continue;
item.setObjectItem( objects[ i ] );
HTMLManager.createSequenceFrameHTML( item );
}
// PROCEDURE, FUNCTION
else if ( objects[ i ].objectType.equals( "PROCEDURE" ) || objects[ i ].objectType.equals( "FUNCTION" ) ) {
String[] source = SQLManager.getProcSource( objects[ i ].objectName, objects[ i ].objectType );
ProcArgItem[] args = SQLManager.getProcArgs( null, objects[ i ].objectName );
HTMLManager.createProcedureFrameHTML( objects[ i ], source, args );
}
// PACKAGE
else if ( objects[ i ].objectType.equals( "PACKAGE" ) {
String[] source = SQLManager.getProcSource( objects[ i ].objectName, objects[ i ].objectType );
ArrayList list = ( ArrayList ) packages.get( objects[ i ].objectName );
if( list == null ) {
HTMLManager.createPackageFrameHTML( objects[ i ], null, source );
} else {
String[] procs = ( String[] ) list.toArray( new String[ list.size() ] );
HTMLManager.createPackageFrameHTML( objects[ i ], procs, source );
}
}
// PACKAGE BODY
else if ( objects[ i ].objectType.equals( "PACKAGE BODY" ) {
ArrayList list = ( ArrayList ) packages.get( objects[ i ].objectName );
String[] procs = ( String[] )list.toArray( new String[ list.size() ] );
HTMLManager.createPkgBodyFrameHTML( objects[ i ], procs );
// inner PROCEDURE
HashMap sourceMap = SQLManager.getPkgProcSource( objects[ i ].objectName );
for( int j = 0; j < procs.length; j++ ) {
PkgProcItem item = ( PkgProcItem ) sourceMap.get( procs[ j ] );
ProcArgItem[] args = SQLManager.getProcArgs( objects[ i ].objectName, item.procName );
HTMLManager.createPkgProcFrameHTML( objects[ i ], item, args );
}
}
// Other
else {
HTMLManager.createObjectFrameHTML( objects[ i ] );
}
}
// ******* DB クローズ *********
if( conn != null ) {
conn.close();
}
} catch( SQLException e ) {
e.printStrackTrace();
} catch ( IOException e ) {
e.printStrackTrace();
}
}
/**
* Oracle サーバーに接続する
* @param host ホスト
* @param port ポート
* @param sid SID
* @param user ユーザ
* @param pass パスワード
* @return Connection
* @throws SQLException
*/
private Connection getConnection( String host, String port, String sid, String user, String pass ) throws SQLException {
if( sid != null && user != null && pass != null ) {
String url = "jdbc:oracle:thin:" + user + "/" + pass + "@" + host + ":" + port + ":" + sid;
return DriverManager.getConnection( url );
} else {
return null;
}
}
}
----
作成日:2007/12/10
更新日:2007/12/10
----
最終更新:2007年12月10日 11:01