2010年12月31日金曜日

H2 DatabaseとHadoopでHDFS上のパスのグループを返す関数を作成する

H2 DatabaseとHadoopでHDFS上のパスのグループを返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists hdfs_get_group as $$ 
import java.io.*;
import java.util.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.fs.*;
import java.net.*;
@CODE
String hdfs_get_group(String uri, String path)
throws Exception
{
if( uri == null ){
throw new Exception("uri is not specified.");
}
if( path == null ){
throw new Exception("path is not specified.");
}

FileSystem fs = FileSystem.get(
URI.create(uri), new Configuration());

FileStatus file = fs.getFileStatus(new Path(path));

return file.getGroup();
}
$$


実行例
select 
hdfs_get_group('hdfs://192.168.1.81:9000/',
'/opt/hadoop-data/test.txt')
;


※以下のjarをCLASSPATH環境変数に追加
hadoop-common-0.21.0.jar
hadoop-hdfs-0.21.0.jar
log4j-1.2.15.jar

動作環境
JDK6 Update22, Hadoop 0.21.0, H2 Database 1.2.147 (2010-11-21)

関連情報
CentOS5.5にHadoop0.21.0をインストールする
http://serverarekore.blogspot.com/2010/10/centos55hadoop0210.html

2010年12月30日木曜日

H2 DatabaseとHadoopでHDFS上のパスのオーナーを返す関数を作成する

H2 DatabaseとHadoopでHDFS上のパスのオーナーを返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists hdfs_get_owner as $$ 
import java.io.*;
import java.util.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.fs.*;
import java.net.*;
@CODE
String hdfs_get_owner(String uri, String path)
throws Exception
{
if( uri == null ){
throw new Exception("uri is not specified.");
}
if( path == null ){
throw new Exception("path is not specified.");
}

FileSystem fs = FileSystem.get(
URI.create(uri), new Configuration());

FileStatus file = fs.getFileStatus(new Path(path));

return file.getOwner();
}
$$


実行例
select 
hdfs_get_owner('hdfs://192.168.1.81:9000/',
'/opt/hadoop-data/test.txt')
;


※以下のjarをCLASSPATH環境変数に追加
hadoop-common-0.21.0.jar
hadoop-hdfs-0.21.0.jar
log4j-1.2.15.jar

動作環境
JDK6 Update22, Hadoop 0.21.0, H2 Database 1.2.147 (2010-11-21)

関連情報
CentOS5.5にHadoop0.21.0をインストールする
http://serverarekore.blogspot.com/2010/10/centos55hadoop0210.html

2010年12月29日水曜日

H2 DatabaseとHadoopでHDFS上のパスがディレクトリかどうか調べる関数を作成する

H2 DatabaseとHadoopでHDFS上のパスがディレクトリかどうか調べる関数を作成するには、以下のスクリプトを実行します。

create alias if not exists hdfs_is_directory as $$ 
import java.io.*;
import java.util.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.fs.*;
import java.net.*;
@CODE
Boolean hdfs_is_directory(String uri, String path)
throws Exception
{
if( uri == null ){
throw new Exception("uri is not specified.");
}
if( path == null ){
throw new Exception("path is not specified.");
}

FileSystem fs = FileSystem.get(
URI.create(uri), new Configuration());

FileStatus file = fs.getFileStatus(new Path(path));

return file.isDirectory();
}
$$


実行例
select 
hdfs_is_directory('hdfs://192.168.1.81:9000/',
'/opt/hadoop-data/test.txt'),
hdfs_is_directory('hdfs://192.168.1.81:9000/',
'/opt/hadoop-data/test1')
;


※以下のjarをCLASSPATH環境変数に追加
hadoop-common-0.21.0.jar
hadoop-hdfs-0.21.0.jar
log4j-1.2.15.jar

動作環境
JDK6 Update22, Hadoop 0.21.0, H2 Database 1.2.147 (2010-11-21)

関連情報
CentOS5.5にHadoop0.21.0をインストールする
http://serverarekore.blogspot.com/2010/10/centos55hadoop0210.html

2010年12月28日火曜日

H2 DatabaseとApache POIでExcelブックにシートを追加する関数を作成する

H2 DatabaseとApache POIでExcelブックにシートを追加する関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_update_add_sheet as $$ 
import java.io.*;
import java.sql.*;
import java.text.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
int poi_update_add_sheet(
String inFile, String outFile, String sheetName)
throws Exception
{
if( inFile == null ){
return -1;
}
if( outFile == null ){
return -1;
}
if( sheetName == null ){
return -1;
}

Workbook workbook = WorkbookFactory.create(new FileInputStream(inFile));
for(int wi=0;wi<workbook.getNumberOfSheets();wi++){
Sheet sheet = workbook.getSheetAt(wi);
sheet.setSelected(false);
}
Sheet sheet = workbook.createSheet(sheetName);
sheet.setSelected(true);
workbook.setActiveSheet(workbook.getSheetIndex(sheet));
workbook.write(new FileOutputStream(outFile));
return 0;
}
$$


実行例
select poi_update_add_sheet('c:\share\test1.xlsx', 
'c:\share\test1h.xlsx', '追加');


入力Excelファイル(test1.xlsx)


出力Excelファイル(test1h.xlsx)


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月27日月曜日

H2 DatabaseとApache POIでExcelブックのシートにクエリー結果を保存する関数を作成する

H2 DatabaseとApache POIでExcelブックのシートにクエリー結果を保存する関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_update_set_queryresult as $$ 
import java.io.*;
import java.sql.*;
import java.text.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
int poi_update_set_queryresult(java.sql.Connection conn,
String inFile, String outFile, String sheetName,
int oy, int ox, String query, Boolean header)
throws Exception
{
if( inFile == null ){
return -1;
}
if( outFile == null ){
return -1;
}
if( query == null ){
return -1;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(inFile));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return -1;
}

int columns = 0;
PreparedStatement stmt = conn.prepareStatement(query);
ResultSet rset = null;
Row rowobj = null;
Cell cell = null;
try
{
rset = stmt.executeQuery();
ResultSetMetaData rsmd = rset.getMetaData();
columns = rsmd.getColumnCount();
if( header ){
rowobj = sheet.getRow(oy);
if( rowobj == null ){
rowobj = sheet.createRow(oy);
}
for(int lx=0;lx<columns;lx++){
cell = rowobj.getCell(ox+lx);
if( cell == null ){
cell = rowobj.createCell(ox+lx);
}
cell.setCellValue(rsmd.getColumnName(lx+1));
}
oy++;
}
while(rset.next()){
rowobj = sheet.getRow(oy);
if( rowobj == null ){
rowobj = sheet.createRow(oy);
}
for(int lx=0;lx<columns;lx++){
cell = rowobj.getCell(ox+lx);
if( cell == null ){
cell = rowobj.createCell(ox+lx);
}
if( rsmd.getColumnType(lx+1) == Types.DATE ){
DataFormat df = workbook.getCreationHelper().createDataFormat();
short dfn = df.getFormat("yyyy/mm/dd");
CellStyle cs = workbook.createCellStyle();
cs.setDataFormat(dfn);
cell.setCellValue(new java.util.Date(
rset.getDate(lx+1).getTime()));
cell.setCellStyle(cs);
} else {
cell.setCellValue(rset.getString(lx+1));
}
}
oy++;
}
}
finally
{
if( rset != null ){ rset.close(); }
stmt.close();
}

workbook.write(new FileOutputStream(outFile));
return 0;
}
$$


実行例
select poi_update_set_queryresult('c:\share\test1.xlsx', 
'c:\share\test1g.xlsx', 'シート1', 3, 1,
'SELECT * FROM INFORMATION_SCHEMA.TABLES', TRUE);


入力Excel(test1.xlsx)


出力Excel(test1g.xlsx)


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月26日日曜日

Ubuntuでhttpfs2を使用して、URL上のファイルをマウントする

Ubuntuでhttpfs2を使用して、URL上のファイルをマウントするには、以下の手順を実行します。

1.httpfs2のインストール
sudo apt-get install httpfs2

2.URLをマウント
http://localhost/icons/README.htmlを~/testにマウント
mkdir ~/test
httpfs2 http://localhost/icons/README.html ~/test
cat ~/test/README.html

3.アンマウント
fusermount -u ~/test
または
sudo umount httpfs2

動作環境
Ubuntu 10.10

H2 DatabaseとApache POIでExcelブックのセルにハイパーリンクをセットして保存する関数を作成する

H2 DatabaseとApache POIでExcelブックのセルにハイパーリンクをセットして保存する関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_update_set_hyperlink as $$ 
import java.io.*;
import java.sql.*;
import java.text.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
int poi_update_set_hyperlink(
String inFile, String outFile, String sheetName,
int row, int column, String label, String url)
throws Exception
{
if( inFile == null ){
return -1;
}
if( outFile == null ){
return -1;
}
if( label == null ){
return -1;
}
if( url == null ){
return -1;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(inFile));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return -1;
}

Row rowobj = sheet.getRow(row);
if( rowobj == null ){
rowobj = sheet.createRow(row);
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
cell = rowobj.createCell(column);
}
// ハイパーリンクを作成
Hyperlink hyperlink = workbook.getCreationHelper().createHyperlink(
Hyperlink.LINK_URL);
hyperlink.setLabel(label);
hyperlink.setAddress(url);
sheet.getRow(row).getCell(column).setCellValue(label);
sheet.getRow(row).getCell(column).setHyperlink(hyperlink);

// 一重下線と青色を設定
Font font = workbook.createFont();
font.setFontHeightInPoints((short)10);
font.setFontName("MS ゴシック");
font.setUnderline(Font.U_SINGLE);
font.setColor(IndexedColors.BLUE.getIndex());
CellStyle cs = workbook.createCellStyle();
cs.setFont(font);
sheet.getRow(row).getCell(column).setCellStyle(cs);

workbook.write(new FileOutputStream(outFile));
return 0;
}
$$


実行例
select poi_update_set_hyperlink('c:\share\test1.xlsx', 
'c:\share\test1f.xlsx', 'シート1', 2, 0,
'hyperlink', 'http://serverarekore.blogspot.com');


入力Excel(test1.xlsx)


出力Excel(test1f.xlsx)


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月25日土曜日

H2 DatabaseとApache POIでExcelブックのセルにコメントをセットして保存する関数を作成する

H2 DatabaseとApache POIでExcelブックのセルにコメントをセットして保存する関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_update_set_comment as $$ 
import java.io.*;
import java.sql.*;
import java.text.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
int poi_update_set_comment(
String inFile, String outFile, String sheetName,
int row, int column, String author, String comment)
throws Exception
{
if( inFile == null ){
return -1;
}
if( outFile == null ){
return -1;
}
if( author == null ){
author = "";
}
if( comment == null ){
return -1;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(inFile));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return -1;
}

Row rowobj = sheet.getRow(row);
if( rowobj == null ){
rowobj = sheet.createRow(row);
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
cell = rowobj.createCell(column);
}
// コメントの作成
CreationHelper ch = workbook.getCreationHelper();
ClientAnchor anchor = ch.createClientAnchor();
Drawing drawing = sheet.createDrawingPatriarch();
Comment commentObj = drawing.createCellComment(anchor);
commentObj.setString(ch.createRichTextString(comment));
commentObj.setAuthor(author);
cell.setCellComment(commentObj);

workbook.write(new FileOutputStream(outFile));
return 0;
}
$$


実行例
select poi_update_set_comment('c:\share\test1.xlsx', 'c:\share\test1e.xlsx', 'シート1', 2, 0, 'test1', 'コメントです');


入力Excel(test1.xlsx)


出力Excel(test1e.xlsx)


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月24日金曜日

H2 DatabaseとApache POIでExcelブックのセルに日付をセットして保存する関数を作成する

H2 DatabaseとApache POIでExcelブックのセルに日付をセットして保存する関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_update_set_date_value as $$ 
import java.io.*;
import java.sql.*;
import java.text.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
int poi_update_set_date_value(
String inFile, String outFile, String sheetName,
int row, int column, java.sql.Date value)
throws Exception
{
if( inFile == null ){
return -1;
}
if( outFile == null ){
return -1;
}
if( value == null ){
return -1;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(inFile));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return -1;
}

Row rowobj = sheet.getRow(row);
if( rowobj == null ){
rowobj = sheet.createRow(row);
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
cell = rowobj.createCell(column);
}

DataFormat df = workbook.getCreationHelper().createDataFormat();
short dfn = df.getFormat("yyyy/mm/dd");
CellStyle cs = workbook.createCellStyle();
cs.setDataFormat(dfn);
cell.setCellValue(new java.util.Date(value.getTime()));
cell.setCellStyle(cs);
workbook.write(new FileOutputStream(outFile));
return 0;
}
$$


実行例
select poi_update_set_date_value('c:\share\test1.xlsx', 'c:\share\test1d.xlsx', 'シート1', 2, 0, current_date);


入力Excel(text1.xlsx)


出力Excel(text1d.xlsx)


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月23日木曜日

H2 DatabaseとApache POIでExcelブックのセルにdouble型数値をセットして保存する関数を作成する

H2 DatabaseとApache POIでExcelブックのセルにdouble型数値をセットして保存する関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_update_set_double_value as $$ 
import java.io.*;
import java.sql.*;
import java.text.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
int poi_update_set_double_value(
String inFile, String outFile, String sheetName,
int row, int column, Double value)
throws Exception
{
if( inFile == null ){
return -1;
}
if( outFile == null ){
return -1;
}
if( value == null ){
return -1;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(inFile));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return -1;
}

Row rowobj = sheet.getRow(row);
if( rowobj == null ){
rowobj = sheet.createRow(row);
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
cell = rowobj.createCell(column);
}
cell.setCellValue(value);
workbook.write(new FileOutputStream(outFile));
return 0;
}
$$


実行例
select poi_update_set_double_value('c:\share\test1.xlsx', 'c:\share\test1c.xlsx', 'シート1', 2, 0, 1024);


入力Excelファイル(test1.xlsx)


出力Excelファイル(test1c.xlsx)


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月22日水曜日

H2 DatabaseとApache POIでExcelブックのセルに文字列値をセットして保存する関数を作成する

H2 DatabaseとApache POIでExcelブックのセルに文字列値をセットして保存する関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_update_set_string_value as $$ 
import java.io.*;
import java.sql.*;
import java.text.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
int poi_update_set_string_value(
String inFile, String outFile, String sheetName,
int row, int column, String value)
throws Exception
{
if( inFile == null ){
return -1;
}
if( outFile == null ){
return -1;
}
if( value == null ){
return -1;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(inFile));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return -1;
}

Row rowobj = sheet.getRow(row);
if( rowobj == null ){
rowobj = sheet.createRow(row);
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
cell = rowobj.createCell(column);
}
cell.setCellValue(value);
workbook.write(new FileOutputStream(outFile));
return 0;
}
$$


実行例
select poi_update_set_string_value('c:\share\test1.xlsx', 'c:\share\test1b.xlsx', 'シート1', 2, 0, '更新');


入力Excelファイル(test1.xlsx)


出力Excelファイル(test1b.xlsx)


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月21日火曜日

H2 DatabaseとApache POIでExcelブックのセル範囲の値を結果セットとして返す関数を作成する

H2 DatabaseとApache POIでExcelブックのセル範囲の値を結果セットとして返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_get_data as $$ 
import java.io.*;
import java.sql.*;
import java.text.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
SimpleResultSet poi_get_data(
String file, String sheetName,
int row, int column, int dy, int dx,
String dateFormat)
throws Exception
{
if( file == null ){
return null;
}
if( dateFormat == null ){
return null;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return null;
}

SimpleResultSet rs = new SimpleResultSet();
for(int lx=0;lx<dx;lx++){
rs.addColumn("C" + lx, Types.VARCHAR, 2048, 0);
}

for(int ly=0;ly<dy;ly++){
Object values[] = new Object[dx];
for(int lx=0;lx<dx;lx++){
Row rowobj = sheet.getRow(row+ly);
if( rowobj == null ){
return null;
}
Cell cell = rowobj.getCell(column+lx);
if( cell == null ){
return null;
}
String value = null;
switch(cell.getCellType()){
case Cell.CELL_TYPE_NUMERIC:
CellStyle cs = cell.getCellStyle();
if( cs != null ){
String df = cs.getDataFormatString();
if( df.indexOf('y') != -1
|| df.indexOf('m') != -1
|| df.indexOf('d') != -1){
java.util.Date dt = cell.getDateCellValue();
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
value = sdf.format(dt);
} else {
value = "" + cell.getNumericCellValue();
}
}
break;
case Cell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_ERROR:
value = "" + (int)cell.getErrorCellValue();
break;
case Cell.CELL_TYPE_FORMULA:
value = cell.getCellFormula();
break;
case Cell.CELL_TYPE_BOOLEAN:
value = "" + cell.getBooleanCellValue();
}
values[lx] = value;
}
rs.addRow(values);
}
return rs;
}
$$


実行例
select * from poi_get_data('c:\share\test2.xlsx', 'Sheet1', 3, 1, 3, 3, 'yyyy/mm/dd');


実行例結果画面


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月20日月曜日

H2 DatabaseとApache POIでExcelブックのセルの値を文字列に変換して返す関数を作成する

H2 DatabaseとApache POIでExcelブックのセルの値を文字列に変換して返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_get_cell_string as $$ 
import java.io.*;
import java.sql.*;
import java.text.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
String poi_get_cell_string(
String file, String sheetName,
int row, int column, String dateFormat)
throws Exception
{
if( file == null ){
return null;
}
if( dateFormat == null ){
return null;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return null;
}
Row rowobj = sheet.getRow(row);
if( rowobj == null ){
return null;
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
return null;
}
switch(cell.getCellType()){
case Cell.CELL_TYPE_NUMERIC:
CellStyle cs = cell.getCellStyle();
if( cs == null ){
return null;
}
String df = cs.getDataFormatString();
if( df.indexOf('y') != -1
|| df.indexOf('m') != -1
|| df.indexOf('d') != -1){
java.util.Date dt = cell.getDateCellValue();
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
return sdf.format(dt);
}
return "" + cell.getNumericCellValue();
case Cell.CELL_TYPE_STRING:
return cell.getStringCellValue();
case Cell.CELL_TYPE_ERROR:
return "" + (int)cell.getErrorCellValue();
case Cell.CELL_TYPE_FORMULA:
return cell.getCellFormula();
case Cell.CELL_TYPE_BOOLEAN:
return "" + cell.getBooleanCellValue();
}
return null;
}
$$


実行例
select poi_get_cell_string('c:\share\test2.xlsx', 'Sheet1', 3, 1, 'yyyy/mm/dd');


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月19日日曜日

H2 DatabaseとApache POIでExcelブックのセルの表示形式を返す関数を作成する

H2 DatabaseとApache POIでExcelブックのセルの表示形式を返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_get_cellstyle_dataformat as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
String poi_get_cellstyle_dataformat(
String file, String sheetName,
int row, int column)
throws Exception
{
if( file == null ){
return null;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return null;
}
Row rowobj = sheet.getRow(row);
if( rowobj == null ){
return null;
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
return null;
}
CellStyle cs = cell.getCellStyle();
if( cs == null ){
return null;
}

return cs.getDataFormatString();
}
$$


実行例
select poi_get_cellstyle_dataformat('c:\share\test2.xlsx', 'Sheet1', 9, 1);


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月18日土曜日

H2 DatabaseとApache POIでExcelブックのリッチテキストセルの文字列を返す関数を作成する

H2 DatabaseとApache POIでExcelブックのリッチテキストセルの文字列を返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_get_richstring_cell_value as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
String poi_get_richstring_cell_value(
String file, String sheetName,
int row, int column)
throws Exception
{
if( file == null ){
return null;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return null;
}
Row rowobj = sheet.getRow(row);
if( rowobj == null ){
return null;
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
return null;
}
if( cell.getCellType() != Cell.CELL_TYPE_STRING ){
return null;
}
RichTextString rts = cell.getRichStringCellValue();
if( rts == null ){
return null;
}

return rts.getString();
}
$$


実行例
select poi_get_richstring_cell_value('c:\share\test2.xlsx', 'Sheet1', 9, 1);


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月17日金曜日

H2 DatabaseとApache POIでExcelブックのセルのハイパーリンクのアドレスを返す関数を作成する

H2 DatabaseとApache POIでExcelブックのセルのハイパーリンクのアドレスを返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_get_hyperlink_address as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
String poi_get_hyperlink_address(
String file, String sheetName,
int row, int column)
throws Exception
{
if( file == null ){
return null;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return null;
}
Row rowobj = sheet.getRow(row);
if( rowobj == null ){
return null;
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
return null;
}
Hyperlink hl = cell.getHyperlink();
if( hl == null ){
return null;
}
return hl.getAddress();
}
$$


実行例
select poi_get_hyperlink_address('c:\share\test2.xlsx', 'Sheet1', 16, 1);


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月16日木曜日

H2 DatabaseとApache POIでExcelブックのセルのハイパーリンクのラベルを返す関数を作成する

H2 DatabaseとApache POIでExcelブックのセルのハイパーリンクのラベルを返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_get_hyperlink_label as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
String poi_get_hyperlink_label(
String file, String sheetName,
int row, int column)
throws Exception
{
if( file == null ){
return null;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return null;
}
Row rowobj = sheet.getRow(row);
if( rowobj == null ){
return null;
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
return null;
}
Hyperlink hl = cell.getHyperlink();
if( hl == null ){
return null;
}
return hl.getLabel();
}
$$


実行例
select poi_get_hyperlink_label('c:\share\test2.xlsx', 'Sheet1', 16, 1);


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月15日水曜日

H2 DatabaseとApache POIでExcelブックのセルのハイパーリンクのタイプを返す関数を作成する

H2 DatabaseとApache POIでExcelブックのセルのハイパーリンクのタイプを返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_get_hyperlink_type as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
String poi_get_hyperlink_type(
String file, String sheetName,
int row, int column)
throws Exception
{
if( file == null ){
return null;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return null;
}
Row rowobj = sheet.getRow(row);
if( rowobj == null ){
return null;
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
return null;
}
Hyperlink hl = cell.getHyperlink();
if( hl == null ){
return null;
}
String result = null;
switch(hl.getType()){
case Hyperlink.LINK_URL:
result = "LINK_URL";
break;
case Hyperlink.LINK_DOCUMENT:
result = "LINK_DOCUMENT";
break;
case Hyperlink.LINK_EMAIL:
result = "LINK_EMAIL";
break;
case Hyperlink.LINK_FILE:
result = "LINK_FILE";
break;
}
return result;
}
$$


実行例
select poi_get_hyperlink_type('c:\share\test2.xlsx', 'Sheet1', 10, 1);


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月14日火曜日

H2 DatabaseとApache POIでExcelブックのセルのコメントを返す関数を作成する

H2 DatabaseとApache POIでExcelブックのセルのコメントを返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_get_cell_comment as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
String poi_get_cell_comment(
String file, String sheetName,
int row, int column)
throws Exception
{
if( file == null ){
return null;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return null;
}
Row rowobj = sheet.getRow(row);
if( rowobj == null ){
return null;
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
return null;
}
Comment comment = cell.getCellComment();
if( comment == null ){
return null;
}
RichTextString rtstr = comment.getString();
if( rtstr == null ){
return null;
}
return rtstr.getString();
}
$$


実行例
select poi_get_cell_comment('c:\share\test2.xlsx', 'Sheet1', 12, 1);


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月13日月曜日

H2 DatabaseとApache POIでExcelブックのセルの数式を返す関数を作成する

H2 DatabaseとApache POIでExcelブックのセルの数式を返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_get_cell_formula as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
String poi_get_cell_formula(
String file, String sheetName,
int row, int column)
throws Exception
{
if( file == null ){
return null;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return null;
}
Row rowobj = sheet.getRow(row);
if( rowobj == null ){
return null;
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
return null;
}
if( cell.getCellType() != Cell.CELL_TYPE_FORMULA ){
return null;
}
return cell.getCellFormula();
}
$$


実行例
select poi_get_cell_formula('c:\share\test2.xlsx', 'Sheet1', 6, 3);


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月12日日曜日

H2 DatabaseとApache POIでExcelブックのセルの日付を返す関数を作成する

H2 DatabaseとApache POIでExcelブックのセルの日付を返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_get_date_cell_value as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
Date poi_get_date_cell_value(
String file, String sheetName,
int row, int column)
throws Exception
{
if( file == null ){
return null;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return null;
}
Row rowobj = sheet.getRow(row);
if( rowobj == null ){
return null;
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
return null;
}
if( cell.getCellType() != Cell.CELL_TYPE_NUMERIC ){
return null;
}
java.util.Date dt = null;
try
{
dt = cell.getDateCellValue();
}
catch(NumberFormatException nfex)
{
return null;
}
return new java.sql.Date(dt.getTime());
}
$$


実行例
select poi_get_date_cell_value('c:\share\test2.xlsx', 'Sheet1', 3, 1);


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月11日土曜日

H2 DatabaseとApache POIでExcelブックのセルの数値を返す関数を作成する

H2 DatabaseとApache POIでExcelブックのセルの数値を返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_get_numeric_cell_value as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
Double poi_get_numeric_cell_value(
String file, String sheetName,
int row, int column)
throws Exception
{
if( file == null ){
return null;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return null;
}
Row rowobj = sheet.getRow(row);
if( rowobj == null ){
return null;
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
return null;
}
if( cell.getCellType() != Cell.CELL_TYPE_NUMERIC ){
return null;
}
return new Double(cell.getNumericCellValue());
}
$$


実行例
select poi_get_numeric_cell_value('c:\share\test1.xlsx', 'シート1', 1, 1);


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月10日金曜日

H2 DatabaseとApache POIでExcelブックのセルの文字列値を返す関数を作成する

H2 DatabaseとApache POIでExcelブックのセルの文字列値を返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_get_string_cell_value as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
String poi_get_string_cell_value(
String file, String sheetName,
int row, int column)
throws Exception
{
if( file == null ){
return null;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
Sheet sheet = workbook.getSheet(sheetName);
if( sheet == null ){
return null;
}
Row rowobj = sheet.getRow(row);
if( rowobj == null ){
return null;
}
Cell cell = rowobj.getCell(column);
if( cell == null ){
return null;
}
if( cell.getCellType() != Cell.CELL_TYPE_STRING ){
return null;
}
return cell.getStringCellValue();
}
$$


実行例
select poi_get_string_cell_value('c:\share\test1.xlsx', 'シート1', 0, 1);


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月9日木曜日

H2 DatabaseとApache POIでExcelブックのシートの名前を列挙する関数を作成する

H2 DatabaseとApache POIでExcelブックのシートの名前を列挙する関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_list_sheets as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
ResultSet poi_list_sheets(String file)
throws Exception
{
if( file == null ){
return null;
}
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));

// ブックに含まれるシートの名前を列挙する
SimpleResultSet rs = new SimpleResultSet();
rs.addColumn("SHEET_INDEX", Types.INTEGER, 512, 0);
rs.addColumn("NAME", Types.VARCHAR, 2048, 0);

for(int wi=0;wi<workbook.getNumberOfSheets();wi++){
rs.addRow(wi, workbook.getSheetName(wi));
}
return rs;
}
$$


実行例
select * from poi_list_sheets('c:\share\test1.xlsx');


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月8日水曜日

H2 DatabaseとApache POIでExcelブックのシート数を返す関数を作成する

H2 DatabaseとApache POIでExcelブックのシート数を返す関数を作成するには、以下のスクリプトを実行します。

create alias if not exists poi_number_of_sheets as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.poi.ss.usermodel.*;
@CODE
int poi_number_of_sheets(String file)
throws Exception
{
// ブックに含まれるシート数を返す
Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
return workbook.getNumberOfSheets();
}
$$


実行例
select poi_number_of_sheets('c:\share\test1.xlsx');


※システム環境変数CLASSPATHにtools.jarと以下のPOI関連のjarを追加しておくこと。
・poi-3.7-20101029.jar
・poi-ooxml-3.7-20101029.jar
・poi-ooxml-schemas-3.7-20101029.jar
・commons-logging-1.1.jar
・log4j-1.2.13.jar;
・geronimo-stax-api_1.0_spec-1.0.jar
・xmlbeans-2.3.0.jar
・dom4j-1.6.1.jar

動作環境
JDK6 Update 22, H2 Database 1.2.147 (2010-11-21), Apache POI 3.7

2010年12月7日火曜日

Liferayのカレンダーポートレットのデフォルト表示形式を変更する

Liferayのカレンダーポートレットのデフォルト表示形式を変更するには、以下の手順を実行します。

1.カレンダーポートレットのスパナ型のアイコンをクリックして編集メニューをクリックします。


2.「設定」タブの「表示設定」タブを選択して、デフォルトタブから好みの表示形式を選択します。選択後、「保存」ボタンをクリックします。


3.カレンダーの設定ダイアログの×ボタンをクリックして閉じます。


4.カレンダーポートレットのデフォルトの表示形式が変わっていることを確認します。


動作環境
liferay 6.0.5, PostgreSQL 8.4.4

2010年12月5日日曜日

H2 DatabaseとHadoopでHDFS上のファイルを列挙する関数を作成する

H2 DatabaseとHadoopでHDFS上のファイルを列挙する関数を作成するには、以下のスクリプトを実行します。

create alias if not exists hdfs_list_files as $$ 
import java.io.*;
import java.util.*;
import java.sql.*;
import org.h2.tools.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.fs.*;
import java.net.*;
@CODE
ResultSet hdfs_list_files(String uri, String path)
throws Exception
{
if( uri == null ){
throw new Exception("uri is not specified.");
}
if( path == null ){
throw new Exception("path is not specified.");
}

FileSystem fs = FileSystem.get(
URI.create(uri), new Configuration());

SimpleResultSet rs = new SimpleResultSet();
rs.addColumn("PATH", Types.VARCHAR, 1024, 0);

FileStatus files[] = fs.listStatus(new Path(path));
for(FileStatus file : files ){
rs.addRow(file.getPath());
}

return rs;
}
$$


実行例
select * from hdfs_list_files('hdfs://192.168.1.81:9000/', '/opt/hadoop-data');


※以下のjarをCLASSPATH環境変数に追加
hadoop-common-0.21.0.jar
hadoop-hdfs-0.21.0.jar
log4j-1.2.15.jar

動作環境
JDK6 Update22, Hadoop 0.21.0, H2 Database 1.2.147 (2010-11-21)

関連情報
CentOS5.5にHadoop0.21.0をインストールする
http://serverarekore.blogspot.com/2010/10/centos55hadoop0210.html

Hadoopで他のテンポラリディレクトリのためのベースパスを指定する

Hadoopで他のテンポラリディレクトリのためのベースパスを指定する

Hadoopで他のテンポラリディレクトリのためのベースパスを指定するには、
$HADOOP_HOME/conf/core-site.xmlに以下のプロパティを追加します。
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-data</value>
</property>

動作環境
JDK6 Update22, Hadoop 0.21.0

関連情報
CentOS5.5にHadoop0.21.0をインストールする
http://serverarekore.blogspot.com/2010/10/centos55hadoop0210.html

Liferayのカレンダーポートレットでイベントを追加する

Liferayのカレンダーポートレットでイベントを追加するには、以下の手順を実行します。

1.カレンダーポートレットの「イベントの追加」ボタンをクリックします。


2.開始日時やタイトルなどを入力後、保存ボタンをクリックします。


カテゴリの設定については、Liferayでカテゴリを追加するを参照。





3.イベントが追加されたことを確認します。

2010年12月4日土曜日

Liferayでカレンダーポートレットを追加する

Liferayでカレンダーポートレットを追加するには、以下の手順を実行します。

1.管理者としてログインする(test@liferay.comなど)

2.画面上部の追加 -> 詳細...メニューを選択します。



3.コラボレーション項目をクリックして、「カレンダー」の追加リンクを
クリックします。その後にメニュー右上部の×ボタンをクリックします。


4.カレンダーポートレットが追加されたことを確認します。


動作環境
liferay 6.0.5, PostgreSQL 8.4.4

2010年12月3日金曜日

H2 DatabaseとsardineでWebDAVサーバ上のファイルをリネームする関数を作成する

H2 DatabaseとsardineでWebDAVサーバ上のファイルをリネームする関数を作成するには、以下のスクリプトを実行します。

create alias if not exists sardine_move as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import com.googlecode.sardine.*;
import com.googlecode.sardine.util.*;
@CODE
int sardine_move(String url,
String user, String password,
String src, String dst)
throws Exception
{
if( url == null ){
throw new Exception("url is not specified.");
}
user = (user == null)?"":user;
password = (password == null)?"":password;
if( src == null ){
throw new Exception("src is not specified.");
}
if( dst == null ){
throw new Exception("dst is not specified.");
}

Sardine sardine = SardineFactory.begin(user, password);
sardine.move(url+SardineUtil.encode(src),
url + SardineUtil.encode(dst));
return 0;
}
$$

実行例
select sardine_move(
'http://192.168.1.208:8080/repository/default/',
'user', 'password',
'サンプル2.JPG', '移動したサンプル.JPG'
);


関連情報
H2 Database上でsardineでWebDAVサーバと連携するユーザ定義関数のまとめ

2010年12月2日木曜日

H2 DatabaseとsardineでWebDAVサーバ上のファイルをコピーする関数を作成する

H2 DatabaseとsardineでWebDAVサーバ上のファイルをコピーする関数を作成するには、以下のスクリプトを実行します。

create alias if not exists sardine_copy as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import com.googlecode.sardine.*;
import com.googlecode.sardine.util.*;
@CODE
int sardine_copy(String url,
String user, String password,
String src, String dst)
throws Exception
{
if( url == null ){
throw new Exception("url is not specified.");
}
user = (user == null)?"":user;
password = (password == null)?"":password;
if( src == null ){
throw new Exception("src is not specified.");
}
if( dst == null ){
throw new Exception("dst is not specified.");
}

Sardine sardine = SardineFactory.begin(user, password);
sardine.copy(url+SardineUtil.encode(src),
url + SardineUtil.encode(dst));
return 0;
}
$$

実行例
select sardine_copy(
'http://192.168.1.208:8080/repository/default/',
'user', 'password',
'サンプル.JPG', 'サンプル2.JPG'
);


※システム環境変数CLASSPATHにtools.jarとSardine関連のjar
(sardine.jar, httpcore-4.0.1.jar, httpclient-4.0.1.jar,
commons-codec-1.4.jar, commons-logging-1.1.1.jar)を追加しておくこと。

動作環境
JDK6 Update 22, H2 Database 1.2.146 (2010-11-08), sardine-129

関連情報
H2 Database上でsardineでWebDAVサーバと連携するユーザ定義関数のまとめ

2010年12月1日水曜日

H2 DatabaseとsardineでWebDAVサーバ上のファイルを削除する関数を作成する

H2 DatabaseとsardineでWebDAVサーバ上のファイルを削除する関数を作成するには、以下のスクリプトを実行します。

create alias if not exists sardine_delete as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import com.googlecode.sardine.*;
@CODE
int sardine_delete(String url,
String user, String password)
throws Exception
{
if( url == null ){
throw new Exception("url is not specified.");
}
user = (user == null)?"":user;
password = (password == null)?"":password;

Sardine sardine = SardineFactory.begin(user, password);
sardine.delete(url);
return 0;
}
$$

実行例
select sardine_delete(
'http://192.168.1.208:8080/repository/default/sf2.jpg',
'user', 'password'
);


※システム環境変数CLASSPATHにtools.jarとSardine関連のjar
(sardine.jar, httpcore-4.0.1.jar, httpclient-4.0.1.jar,
commons-codec-1.4.jar, commons-logging-1.1.1.jar)を追加しておくこと。

動作環境
JDK6 Update 22, H2 Database 1.2.146 (2010-11-08), sardine-129

関連情報
H2 Database上でsardineでWebDAVサーバと連携するユーザ定義関数のまとめ

2010年11月30日火曜日

H2 DatabaseとsardineでBLOBをWebDAVサーバ上のファイルとしてアップロードする関数を作成する

H2 DatabaseとsardineでBLOBをWebDAVサーバ上のファイルとしてアップロードする関数を作成するには、以下のスクリプトを実行します。

create alias if not exists sardine_put_binary as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import com.googlecode.sardine.*;
@CODE
int sardine_put_binary(String url,
String user, String password, Blob blob)
throws Exception
{
if( url == null ){
throw new Exception("url is not specified.");
}
user = (user == null)?"":user;
password = (password == null)?"":password;

Sardine sardine = SardineFactory.begin(user, password);
InputStream bis = null;
try
{
bis = blob.getBinaryStream();
sardine.put(url, bis);
}
finally
{
if( bis != null )bis.close();
}

return 0;
}
$$

実行例
drop table if exists blobtest;
create table blobtest (c1 numeric(4), c2 blob);
insert into blobtest values (1,
sardine_get_binary(
'http://192.168.1.208:8080/repository/default/SF.JPG',
'user', 'password')
);
select sardine_put_binary(
'http://192.168.1.208:8080/repository/default/sf2.jpg',
'user', 'password', c2)
from blobtest
where c1 = 1;


※システム環境変数CLASSPATHにtools.jarとSardine関連のjar
(sardine.jar, httpcore-4.0.1.jar, httpclient-4.0.1.jar,
commons-codec-1.4.jar, commons-logging-1.1.1.jar)を追加しておくこと。

動作環境
JDK6 Update 22, H2 Database 1.2.146 (2010-11-08), sardine-129

関連情報
H2 Database上でsardineでWebDAVサーバと連携するユーザ定義関数のまとめ

2010年11月29日月曜日

H2 DatabaseとsardineでCLOBをWebDAVサーバ上のファイルとしてアップロードする関数を作成する

H2 DatabaseとsardineでCLOBをWebDAVサーバ上のファイルとしてアップロードする関数を作成するには、以下のスクリプトを実行します。

create alias if not exists sardine_put_ascii as $$ 
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import com.googlecode.sardine.*;
@CODE
int sardine_put_ascii(String url,
String user, String password, Clob clob)
throws Exception
{
if( url == null ){
throw new Exception("url is not specified.");
}
user = (user == null)?"":user;
password = (password == null)?"":password;

Sardine sardine = SardineFactory.begin(user, password);
InputStream ais = null;
try
{
ais = clob.getAsciiStream();
sardine.put(url, ais);
}
finally
{
if( ais != null )ais.close();
}

return 0;
}
$$


実行例
drop table if exists clobtest;
create table clobtest (c1 numeric(4), c2 clob);
insert into clobtest values (1,
sardine_get_ascii(
'http://192.168.1.208:8080/repository/default/test.txt',
'user', 'password')
);
select sardine_put_ascii(
'http://192.168.1.208:8080/repository/default/test2.txt',
'user', 'password', c2)
from clobtest
where c1 = 1;


※システム環境変数CLASSPATHにtools.jarとSardine関連のjar
(sardine.jar, httpcore-4.0.1.jar, httpclient-4.0.1.jar,
commons-codec-1.4.jar, commons-logging-1.1.1.jar)を追加しておくこと。

動作環境
JDK6 Update 22, H2 Database 1.2.146 (2010-11-08), sardine-129

関連情報
H2 Database上でsardineでWebDAVサーバと連携するユーザ定義関数のまとめ

2010年11月28日日曜日

H2 DatabaseとsardineでWebDAVサーバ上のファイルをBLOBとして返す関数を作成する

H2 DatabaseとsardineでWebDAVサーバ上のファイルをBLOBとして返す関数を作成するには、以下の手順を実行します。

1.以下のソースファイルをantなどでコンパイルします。
SardineGetBinaryFunction.java
package com.serverarekore.h2;
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import com.googlecode.sardine.*;

public class SardineGetBinaryFunction
{
static public InputStream sardine_get_binary(String url,
String user, String password)
throws Exception
{
if( url == null ){
throw new Exception("url is not specified.");
}
user = (user == null)?"":user;
password = (password == null)?"":password;

Sardine sardine = SardineFactory.begin(user, password);
InputStream ris = null;

if( sardine.exists(url) == false ){
return null;
}

InputStream is = sardine.getInputStream(url);

final File tf = File.createTempFile("lobtmp", null);
FileOutputStream fos = new FileOutputStream(tf.getAbsolutePath());

byte buf[] = new byte[8192];
int rs = -1;
try
{
while( (rs = is.read(buf)) != -1 ){
fos.write(buf, 0, rs);
}
}
finally
{
if( fos != null )fos.close();
if( is != null )is.close();
}

ris = new InputStream(){
private final InputStream fis = new FileInputStream(tf);
private boolean deleted = false;
private final File fn = tf;
public int autoDelete(int sz) throws IOException
{
if(sz < 0 ){
close();
}
return sz;
}
public void close() throws IOException
{
if( !deleted ){
fis.close();
fn.delete();
deleted = true;
}
}
public int read(byte buf[], int off, int len) throws IOException
{
return deleted?-1:autoDelete(fis.read(buf, off, len));
}

public int read(byte buf[]) throws IOException
{
return deleted?-1:autoDelete(fis.read(buf));
}

public int read() throws IOException
{
return deleted?-1:autoDelete(fis.read());
}
};

return ris;
}
}


build.xmlのサンプル
<project name="H2Functions" default="compile" basedir=".">
<path id="lib.classpath">
<fileset dir="lib">
<include name="*.jar"/>
</fileset>
<pathelement location="c:/Program Files/H2/bin/h2-1.3.146.jar"/>
</path>
<target name="compile">
<echo message="project: ${ant.project.name}"/>
<mkdir dir="build/" />
<javac srcdir="src/" destdir="build/"
deprecation="on" debug="on">
<classpath>
<path refid="lib.classpath"/>
</classpath>
</javac>
<jar destfile="c:/share/jars/SardineGetBinary.jar"
basedir="build"/>
</target>
<target name="clean">
<delete dir="build" />
</target>
</project>


2.システム環境変数CLASSPATHにコンパイルしてできたSardineGetBinary.jarを追加し、
H2 Databaseのサービスを再起動。

3.H2 Consoleから以下のコマンドを実行して、ファンクション作成。
create alias sardine_get_binary for 
"com.serverarekore.h2.SardineGetBinaryFunction.sardine_get_binary";

4.以下のようなコマンドでWebDAVサーバ上のファイルをBLOBに格納できます。
drop table if exists blobtest;
create table blobtest (c1 numeric(4), c2 blob);
insert into blobtest values (1,
sardine_get_binary(
'http://192.168.1.208:8080/repository/default/SF.JPG',
'user', 'password')
);

※システム環境変数CLASSPATHにtools.jarとSardine関連のjar
(sardine.jar, httpcore-4.0.1.jar, httpclient-4.0.1.jar,
commons-codec-1.4.jar, commons-logging-1.1.1.jar)を追加しておくこと。

動作環境
JDK6 Update 22, H2 Database 1.2.146 (2010-11-08), sardine-129

関連情報
H2 Database上でsardineでWebDAVサーバと連携するユーザ定義関数のまとめ

2010年11月27日土曜日

H2 DatabaseとsardineでWebDAVサーバ上のファイルをCLOBとして返す関数を作成する

H2 DatabaseとsardineでWebDAVサーバ上のファイルをCLOBとして返す関数を作成するには、以下の手順を実行します。

1.以下のソースファイルをantなどでコンパイルします。
SardineGetAsciiFunction.java
package com.serverarekore.h2;
import java.io.*;
import java.sql.*;
import org.h2.tools.*;
import com.googlecode.sardine.*;

public class SardineGetAsciiFunction
{
static public Reader sardine_get_ascii(String url,
String user, String password)
throws Exception
{
if( url == null ){
throw new Exception("url is not specified.");
}
user = (user == null)?"":user;
password = (password == null)?"":password;

Sardine sardine = SardineFactory.begin(user, password);
Reader reader = null;

if( sardine.exists(url) == false ){
return null;
}
InputStreamReader isr = new InputStreamReader(
sardine.getInputStream(url)
);

final File tf = File.createTempFile("lobtmp", null);
FileWriter fw = new FileWriter(tf.getAbsolutePath());

char buf[] = new char[8192];
int rs = -1;
try
{
while( (rs = isr.read(buf)) != -1 ){
fw.write(buf, 0, rs);
}
}
finally
{
fw.close();
isr.close();
}

reader = new Reader(){
private final Reader reader = new FileReader(tf);
private boolean deleted = false;
private final File fn = tf;
public int autoDelete(int sz) throws IOException
{
if(sz < 0 ){
close();
}
return sz;
}
public void close() throws IOException
{
if( !deleted ){
reader.close();
fn.delete();
deleted = true;
}
}
public int read(char buf[], int off, int len) throws IOException
{
return deleted?-1:autoDelete(reader.read(buf, off, len));
}

public int read(char buf[]) throws IOException
{
return deleted?-1:autoDelete(reader.read(buf));
}

public int read() throws IOException
{
return deleted?-1:autoDelete(reader.read());
}
public int read(java.nio.CharBuffer target) throws IOException
{
return deleted?-1:autoDelete(reader.read(target));
}
};

return reader;
}
}


build.xmlのサンプル
<project name="H2Functions" default="compile" basedir=".">
<path id="lib.classpath">
<fileset dir="lib">
<include name="*.jar"/>
</fileset>
<pathelement location="c:/Program Files/H2/bin/h2-1.3.146.jar"/>
</path>
<target name="compile">
<echo message="project: ${ant.project.name}"/>
<mkdir dir="build/" />
<javac srcdir="src/" destdir="build/"
deprecation="on" debug="on">
<classpath>
<path refid="lib.classpath"/>
</classpath>
</javac>
<jar destfile="c:/share/jars/SardineGetAscii.jar"
basedir="build"/>
</target>
<target name="clean">
<delete dir="build" />
</target>
</project>


2.システム環境変数CLASSPATHにコンパイルしてできたSardineGetAscii.jarを追加し、
H2 Databaseのサービスを再起動。

3.H2 Consoleから以下のコマンドを実行して、ファンクション作成。
create alias sardine_get_ascii for 
"com.serverarekore.h2.SardineGetAsciiFunction.sardine_get_ascii";

4.以下のようなコマンドでWebDAVサーバ上のファイルをCLOBに格納できます。
drop table if exists clobtest;
create table clobtest (c1 numeric(4), c2 clob);
insert into clobtest values (1,
sardine_get_ascii(
'http://192.168.1.208:8080/repository/default/test.txt',
'user', 'password')
);
select * from clobtest;

※システム環境変数CLASSPATHにtools.jarとSardine関連のjar
(sardine.jar, httpcore-4.0.1.jar, httpclient-4.0.1.jar,
commons-codec-1.4.jar, commons-logging-1.1.1.jar)を追加しておくこと。

動作環境
JDK6 Update 22, H2 Database 1.2.146 (2010-11-08), sardine-129

関連情報
H2 Database上でsardineでWebDAVサーバと連携するユーザ定義関数のまとめ