jp.co.nissy.jpicosheet.core
クラス ConcurrentBookWrapper

java.lang.Object
  上位を拡張 jp.co.nissy.jpicosheet.core.ConcurrentBookWrapper

public class ConcurrentBookWrapper
extends java.lang.Object

1つのBookオブジェクトを複数のスレッドで同時に利用するためのラッパークラスです。
Bookオブジェクト、およびBookオブジェクトから得られるSheetなどのオブジェクトはスレッドセーフではありません。 複数のスレッドから同時にアクセスされるような場合、適切な同期を行うためにこのクラスを利用してください。
このクラスは同期化の制御にjava.util.concurrent.locksパッケージのReentrantReadWriteLockを利用しています。 このためBookオブジェクトおよび配下のSheet、Cell等のオブジェクトに対する参照を複数のスレッドから同時に行えます。 シートの追加、セルへの値セットなど、Bookおよび配下のオブジェクトに対する変更の操作を行えるのはこのオブジェクトの 書き込みロックを取得した1つのスレッドだけです。

このクラスを使ってBookオブジェクトに対する同時処理を行う場合、クラスのオブジェクトを1つだけ作成した上で 各スレッドはこのオブジェクトのメソッドのみを使ってBookおよび配下のオブジェクトを操作する必要があります。 もしBookオブジェクト自体が持つgetSheet(String sheetName)メソッドを使ってSheetオブジェクトを取得し セルの追加や参照などの操作を行おうとした場合、Bookおよび配下のオブジェクトの整合性は保障されません。

このクラスは、通常はこのクラスを利用するスレッドにBookおよび配下のオブジェクトを渡してしまわないように メソッドが調整されています。Bookオブジェクト等のオブジェクトを直接操作場合と比べ、以下の例のような違いがあります。


作成者:
yusuke nishikawa

コンストラクタの概要
ConcurrentBookWrapper(Book book)
          Bookオブジェクトを利用してオブジェクトを初期化します。
 
メソッドの概要
 void addCell(java.lang.String cellName)
          セルを追加します。
 void addSheet(java.lang.String sheetName)
          シートを追加します。
 void deleteCell(java.lang.String cellName)
          セルを削除します。
 void deleteSheet(java.lang.String sheetName)
          シートを削除します。
 Book getBook(java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock writeLock)
          このオブジェクトが保護しているBookオブジェクトを返します。
 java.lang.String getBookName()
          ブック名を返します。
 java.lang.String getCellFormula(java.lang.String cellName)
          セルの式を取得します。
 java.lang.String getCellLabel(java.lang.String cellName)
          セルのラベルを返します。
 Element getCellValue(java.lang.String cellName)
          セルの値を取得します。
 java.math.MathContext getMathContext(java.lang.String sheetName)
          指定したシートのMathContextを返します。
 java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock getWriteLock()
          書き込みロックを得ます。
 void releaseWriteLock()
          getWriteLock()で取得した書き込みロックを開放します。
 void renameCell(java.lang.String cellName, java.lang.String newCellName)
          セル名を変更します。
 void renameSheet(java.lang.String sheetName, java.lang.String newSheetName)
          既存のシートのシート名を変更します。
 void setBookName(java.lang.String bookName)
          ブック名を変更します。
 void setCellLabel(java.lang.String cellName, java.lang.String label)
          セルのラベルをセットします。
 void setCellValue(java.lang.String cellName, java.lang.String value)
          セルの値をセットします。
 void setMathContext(java.lang.String sheetName, java.math.MathContext mc)
          指定したシートのMathContextをセットします。
 
クラス java.lang.Object から継承されたメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

ConcurrentBookWrapper

public ConcurrentBookWrapper(Book book)
Bookオブジェクトを利用してオブジェクトを初期化します。

パラメータ:
book - Bookオブジェクト
メソッドの詳細

setBookName

public void setBookName(java.lang.String bookName)
ブック名を変更します。

パラメータ:
bookName - 変更するブック名

getBookName

public java.lang.String getBookName()
ブック名を返します。
このメソッドは読み込みロックを使用しているため、複数のスレッドから同時に実行することができます。

戻り値:
ブック名

addSheet

public void addSheet(java.lang.String sheetName)
シートを追加します。
指定したシート名がすでに存在する場合は何もしません。

パラメータ:
sheetName - 新しく追加するシートの名前

deleteSheet

public void deleteSheet(java.lang.String sheetName)
シートを削除します。
指定したシートが存在しない場合、ReferenceNotFoundExceptionが発生します。

パラメータ:
sheetName - 削除対象のシート名

renameSheet

public void renameSheet(java.lang.String sheetName,
                        java.lang.String newSheetName)
既存のシートのシート名を変更します。
変更前のシートが存在しない場合、ReferenceNotFoundExceptionが発生します。
変更後のシート名を持つシートがすでに存在していた場合、そのシートは削除されます。

パラメータ:
sheetName - 変更対象のシート名
newSheetName - 変更後のシート名

setMathContext

public void setMathContext(java.lang.String sheetName,
                           java.math.MathContext mc)
指定したシートのMathContextをセットします。
指定したシートが存在しない場合、ReferenceNotFoundExceptionが発生します。

パラメータ:
sheetName - MachContextをセットするシート名
mc - MathContextオブジェクト

getMathContext

public java.math.MathContext getMathContext(java.lang.String sheetName)
指定したシートのMathContextを返します。
指定したシートが存在しない場合、ReferenceNotFoundExceptionが発生します。

パラメータ:
sheetName - MathContextを取得するシート名
戻り値:
シートのMathContextオブジェクト

setCellValue

public void setCellValue(java.lang.String cellName,
                         java.lang.String value)
セルの値をセットします。
値として渡された文字列をチェックし、適切な型の値として保存します。
セル名が シート名!セル名 の形式で渡された場合、指定されたシートの指定されたセルに対して値をセットします。 セル名のみが渡された場合、このメソッドが呼ばれた時点のデフォルトシートの指定されたセルに対して値をセットします。 シート名もしくはセル名が存在しなかった場合はそれぞれ新しく作成されます。

パラメータ:
cellName - 値をセットするセル名
value - 値の文字列表現

getCellValue

public Element getCellValue(java.lang.String cellName)
セルの値を取得します。
指定したセルが存在しない場合、ReferenceNotFoundExceptionが発生します。
シート名の指定がなく、セル名のみが渡された場合はこのメソッドが呼ばれた時点のデフォルトシートに対してセルの値を 取得しようとします。
このメソッドは読み込みロックを使用しているため、複数のスレッドから同時に実行することができます。 返されるElementオブジェクトは不変(immutable)のオブジェクトであるため、複数のスレッドがこれを同時に取得しても 問題ありません。

パラメータ:
cellName - 値を取得するセル名
戻り値:
セルの値

getCellFormula

public java.lang.String getCellFormula(java.lang.String cellName)
セルの式を取得します。
指定したセルが存在しない場合、ReferenceNotFoundExceptionが発生します。
シート名の指定がなく、セル名のみが渡された場合はこのメソッドが呼ばれた時点のデフォルトシートに対してセルの値を 取得しようとします。
このメソッドは読み込みロックを使用しているため、複数のスレッドから同時に実行することができます。

パラメータ:
cellName - 値を取得するセル名
戻り値:
式の文字列

addCell

public void addCell(java.lang.String cellName)
セルを追加します。セル値には空を意味するElementType.EMPTYがセットされます。
セル名が シート名!セル名 の形式で渡された場合、指定されたシートの指定されたセルに対して値をセットします。 セル名のみが渡された場合、このメソッドが呼ばれた時点のデフォルトシートの指定されたセルに対して値をセットします。

パラメータ:
cellName - 追加するセル名

deleteCell

public void deleteCell(java.lang.String cellName)
セルを削除します。
セル名が シート名!セル名 の形式で渡された場合、指定されたシートの指定されたセルに対して削除を行います。 セル名のみが渡された場合、このメソッドが呼ばれた時点のデフォルトシートの指定されたセルに対して削除を行います。
シート名!セル名 の形式で指定した場合で、指定したシートが存在しない場合、ReferenceNotFoundExceptionがスローされます。 シートが存在し、セルが存在しない場合、何もしません。

パラメータ:
cellName - 削除するセル名

renameCell

public void renameCell(java.lang.String cellName,
                       java.lang.String newCellName)
セル名を変更します。
変更対象のセルが存在しない場合、ReferenceNotFoundExceptionが発生します。
変更後のセル名を持つシートがすでに存在していた場合、そのセルは削除されます。
シート名!セル名 の形式で指定した場合で、指定したシートが存在しない場合、ReferenceNotFoundExceptionがスローされます。

パラメータ:
cellName - 変更対象のセル名
newCellName - 変更後のセル名

setCellLabel

public void setCellLabel(java.lang.String cellName,
                         java.lang.String label)
セルのラベルをセットします。
セル名が シート名!セル名 の形式で渡された場合、指定されたシートの指定されたセルに対して値をセットします。 セル名のみが渡された場合、このメソッドが呼ばれた時点のデフォルトシートの指定されたセルに対して値をセットします。 シート名もしくはセル名が存在しなかった場合はそれぞれ新しく作成されます。

パラメータ:
cellName - ラベルをセットするセル名
label - ラベル

getCellLabel

public java.lang.String getCellLabel(java.lang.String cellName)
セルのラベルを返します。
指定したセルが存在しない場合、ReferenceNotFoundExceptionが発生します。
シート名の指定がなく、セル名のみが渡された場合はこのメソッドが呼ばれた時点のデフォルトシートに対してセルの値を 取得しようとします。
このメソッドは読み込みロックを使用しているため、複数のスレッドから同時に実行することができます。

パラメータ:
cellName - ラベルを取得するセル名
戻り値:
ラベル

getWriteLock

public java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock getWriteLock()
書き込みロックを得ます。
このロックを取得した場合、必ずreleaseWriteLock()でロックの開放を行わなければなりません。


releaseWriteLock

public void releaseWriteLock()
getWriteLock()で取得した書き込みロックを開放します。


getBook

public Book getBook(java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock writeLock)
このオブジェクトが保護しているBookオブジェクトを返します。
このメソッドを使ってBookオブジェクトを得るには、事前にgetWriteLock()によって書き込みロックオブジェクトを 得ておかなければなりません。

パラメータ:
writeLock - getWriteLock()によって得た書き込みロックオブジェクト
戻り値:
Bookオブジェクト