ohymosj
クラス OhInputFile

java.lang.Object
  拡張ohymosj.OhObject
      拡張ohymosj.OhPort
          拡張ohymosj.OhSenderPort
              拡張ohymosj.OhSendPort
                  拡張ohymosj.OhInputPort
                      拡張ohymosj.OhInputFile
直系の既知のサブクラス:
OhInputFileDouble, OhInputFileFloat, OhInputFileInt, OhInputFileLong

public abstract class OhInputFile
extends OhInputPort

入力ファイル用送信端子モデルを表すクラスです。

入力ファイル用送信端子モデルは、 送信端子のみを持つ要素モデルであると解釈することもできます。 すなわち、このモデルは、ファイルからデータを読み込み、 データパックに変換して送信端子にデータパックをストックします。

実際には、入力ファイル用送信端子モデルは、 要素モデルの1つとしてモデル化されずに、 送信端子モデルの派生モデルとして実現されています。 すなわち、送信端子モデルにファイル読み取り機能を追加して、 入力ファイル用送信端子モデルが作成されています。 その関係は次のようです。

クラス OhInputFile では、

・入力ファイル名 : OhObject._objectName
・入力ファイルの最終更新時刻 : _fileTimeAtInput

を記憶し、

・入力ファイルからのデータパック送信機能

を定義しました。

パラメタファイルや初期値データファイルなどは、クラス OhTotalSystem のオブジェクトが OhTotalSystem.readParameterFile()OhTotalSystem.readInitialStateFile() などを 利用して読み取り作業をします。 したがって、パラメタや初期値などは、端子を通して供給されるわけではありません。 OhInputFile が扱う入力ファイルとは、 時間的に変化するデータを収録しているファイルです。

クラス OhInputFile のメソッド OhInputFile.inputData() は、 データ補間型配列を指定する行(#& dctVec で始まる行)を ファイルから読み取る機能を持っています。

OhInputFile; Abstract class of port models of input files.

An object of "OhInputFile" class

(Object) _objectName
input file name
_fileTimeAtInput
final update time of the input file
and has
method to read in data and send them as datapacks to the send port.

バージョン:
$Revision: 1.37 $ $Date: 2004/02/12 05:56:35 $
作成者:
satoh

フィールドの概要
protected  long _fileTimeAtInput
           入力ファイルの最終更新時刻です。
 
クラス ohymosj.OhSendPort から継承したフィールド
_dataPackArray, _dctVec, _numberOfDataPacks, _protectPastDataFlag
 
クラス ohymosj.OhSenderPort から継承したフィールド
_bufferList, _commentString, _numberOfReceivers, _receiverArray
 
クラス ohymosj.OhObject から継承したフィールド
_className, _objectName, _objectNumber, _owner, NEWLINE
 
コンストラクタの概要
OhInputFile()
           デフォルトコンストラクタです。
OhInputFile(java.lang.String aFileName)
           基底クラス OhInputPort のデフォルトコンストラクタを用い、 OhInputFile.init(String, int) を用いて、 メンバ変数を以下の通り初期化します。
 
メソッドの概要
 void calReq()
           端子は計算機能がないので、計算要請があってもどうしょうもない。
 void cPrint(java.io.PrintWriter aPw, java.lang.String aHead)
           オブジェクト情報(所有者の情報を含まない)を出力します。
abstract  java.lang.String dataType()
           入力データパックのデータ値の型を文字列として返します。
 java.util.Vector getDctVec(java.lang.String aStr)
           文字列 aStr からデータ補間型ベクトルを読み取り、戻り値として返します。
 boolean init(java.lang.String aFileName)
           オブジェクト名(ファイル名)を aFileName、オブジェクト番号を 0 に初期化します。
 void inputData()
           入力ファイルを読み取り、 OhInputFile.makeDataPack(String) により データパックを作成し、作成したデータパックを OhSendPort.dataPackStock(Object) を 用いて送信します(OhInputFile は OhSendPort の一種です)。
abstract  java.lang.Object makeDataPack(java.lang.String aLineData)
           引数で与えた文字列データからデータパックを作成し、Object 型にキャストして戻り値として返します。
 void oPrint(java.io.PrintWriter aPw, java.lang.String aHead)
           オブジェクト情報(所有者の情報を含む)を出力します。
 
クラス ohymosj.OhInputPort から継承したメソッド
init
 
クラス ohymosj.OhSendPort から継承したメソッド
areYouReady, canYouGetData, canYouSwitch, clearDataPack, dataPackStock, forgetDataPackStock, getDataPack, getDataPack, getDataPackArray, getDctVec, getNewestDataTime, getNumberOfDataPacks, getOldestDataTime, init, reduceDataPackStock, saveSendPortStock, sendByString, setDataPackArray, setDctVec, setProtectPastDataFlag
 
クラス ohymosj.OhSenderPort から継承したメソッド
getCommentString, getNecessaryTimeFrom, getNecessaryTimeTo, printConnection, registerReceiver, setCommentString
 
クラス ohymosj.OhPort から継承したメソッド
canYouGetData, create, getDataPack, getDataPack, setSender
 
クラス ohymosj.OhObject から継承したメソッド
getAbsName, getClassName, getObjectName, getObjectNumber, getOwner, getTopOwner, objCompare, objCompare, objCompare, setOwner
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

_fileTimeAtInput

protected long _fileTimeAtInput
入力ファイルの最終更新時刻です。

新しいデータが取得されたときに、同じ名前の入力ファイルファイルに追加書きするか、 上書きするかを選べるように想定しています。 そのために、データを読み込んだときに、ファイルの最終更新時刻を記録しておき、 次にファイルを読む必要が生じたときに、ファイルの最終更新時刻を見て、 ファイルが更新されたか検査するようにします。

Final update time of the input file.

コンストラクタの詳細

OhInputFile

public OhInputFile()
            throws OhError
デフォルトコンストラクタです。

デフォルトコンストラクタは OhInputFile.init(String, int) を実行しません。 その結果、以下の設定となります。

  • _objectName : null
  • _objectNumber : -1
  • その他のメンバ変数に対する処理は引数つきコンストラクタと同じです。 この場合、OhInputFile.init(String, int) を 用いてメンバ変数を初期化して下さい。

    例外:
    OhError - if an error occurs

    OhInputFile

    public OhInputFile(java.lang.String aFileName)
                throws OhError
    基底クラス OhInputPort のデフォルトコンストラクタを用い、 OhInputFile.init(String, int) を用いて、 メンバ変数を以下の通り初期化します。

  • _className : "OhInputFile"
  • _objectName : aFileName
  • _objectNumber : 0
  • _owner : null
  • _bufferList : メモリに確保する。(接続作業用)
  • _receiverArray : null
  • _numberOfReceivers : -1
  • _dataPackArray : null
  • _numberOfDataPacks : -1
  • _fileTimeAtInput : Long.MIN_VALUE (考え得る最小 long 値)
  • パラメータ:
    aFileName - a String value
    例外:
    OhError - if an error occurs
    メソッドの詳細

    dataType

    public abstract java.lang.String dataType()
    入力データパックのデータ値の型を文字列として返します。

    抽象メソッドです。

    Returns the string showing the type of the sending datapacks.

    定義:
    クラス OhInputPort 内の dataType
    戻り値:
    a String value

    makeDataPack

    public abstract java.lang.Object makeDataPack(java.lang.String aLineData)
    引数で与えた文字列データからデータパックを作成し、Object 型にキャストして戻り値として返します。

    抽象メソッドです。

    文字列データからデータパックを作成します。 抽象メソッドです。 派生クラスで実装することが要求されています。

    1行分文字列データを1個のデータパックに変換するメソッドを 派生クラスで定義して下さい。

    標準的な派生クラスでは、 送信データパック型に応じて次の手続きを定義して下さい。

     (1) 送信用データパックの記憶領域をヒープに生成する。
     (2) 文字列 aLineData からデータ記録時刻、データ値を読み取る。
     (3) (2) で読み取った値を (1) のデータパックのメンバに代入する。
     (4) (1) のデータパックを Object 型にキャストして返す。
     
    抽象メソッドなので派生クラスで必ず定義して下さい。
     [ARGUMENT]
      ・aLineData -> 入力データ1行分の文字列
     [RETURN]
      ・Object : 送信データパックを Object 型にキャストしたもの。
     

    Makes datapacks from string data.

    パラメータ:
    aLineData - a String value
    戻り値:
    an Object value

    init

    public boolean init(java.lang.String aFileName)
                 throws OhError
    オブジェクト名(ファイル名)を aFileName、オブジェクト番号を 0 に初期化します。

    Initialization.

    パラメータ:
    aFileName - a String value
    戻り値:
    a boolean value
    例外:
    OhError - if an error occurs

    getDctVec

    public java.util.Vector getDctVec(java.lang.String aStr)
                               throws OhError
    文字列 aStr からデータ補間型ベクトルを読み取り、戻り値として返します。

    Changes into data connection type vector from the string "aStr", and returns it.

    パラメータ:
    aStr - a String value
    戻り値:
    a Vector value
    例外:
    OhError - if an error occurs

    inputData

    public void inputData()
                   throws OhError
    入力ファイルを読み取り、 OhInputFile.makeDataPack(String) により データパックを作成し、作成したデータパックを OhSendPort.dataPackStock(Object) を 用いて送信します(OhInputFile は OhSendPort の一種です)。

    ファイルを読み取るとき、行頭が # の場合、 その行をコメント行と見なします。

    ただし、行頭が # でも、その後に & が来ると、すなわち #& で始まる行は、 コメントではなく、特殊なデータが記載されているものとします。

    現在(2004/01/16)のところ、 DataConnectionType Vector を指定する場合があるだけです。

     # DataConnectionType = {0:BROKENLINE, 1:STEP, 2:PULSE, 3:NOINTP}
     #& dctvec 2 0 1
     
    のように書いてあると、DataConnectionType Vector を 指定するものと見なします。 この例は、データが2成分あって、第1成分は BROKENLINE 、 第2成分は STEP であることを意味します。 何も指示がされない普通の場合は、
     #& dctvec 1 0
     
    とあるのと同じです。

    ファイル末尾まで処理が終了したら、 OhSendPort.dataPackStock(Object) を 用いて _dataPackArray を作成します。

    ただし、入力ファイルの最終変更時刻が _fileTimeAtInput 以前の場合は何もせず return します。 コンストラクタで _fileTimeAtInput は Long.MIN_VALUE に設定されるので 初回の入力は必ず実行されます。

    定義:
    クラス OhInputPort 内の inputData
    例外:
    OhError - if an error occurs

    calReq

    public void calReq()
                throws OhCannotGetDataError,
                       OhError
    端子は計算機能がないので、計算要請があってもどうしょうもない。 必ず例外 OhCannotGetDataError を投げます。

    When the input port receives a calculation request, throw OhCannotGetDataError. This will be caught in the catch block in OhTotalSystem.work().

    オーバーライド:
    クラス OhInputPort 内の calReq
    例外:
    OhCannotGetDataError - if an error occurs
    OhError - if an error occurs

    cPrint

    public void cPrint(java.io.PrintWriter aPw,
                       java.lang.String aHead)
    オブジェクト情報(所有者の情報を含まない)を出力します。

    入力ファイル名とこの端子の送信元受信端子の情報をストリーム aPw に出力します。

     [ARGUMENT]
      ・aPw ---> オブジェクト情報を出力するストリーム。
      ・aHead -> コメント文字列。
     

    The information on an input file name and the sending agency receiving port of this port is outputted to File "aPw".

    オーバーライド:
    クラス OhPort 内の cPrint
    パラメータ:
    aPw - a PrintWriter value
    aHead - a String value

    oPrint

    public void oPrint(java.io.PrintWriter aPw,
                       java.lang.String aHead)
    オブジェクト情報(所有者の情報を含む)を出力します。

    入力ファイル名とこの端子の送信元受信端子の情報をストリーム aPw に出力します。

     [ARGUMENT]
      ・aPw ---> オブジェクト情報を出力するストリーム。
      ・aHead -> コメント文字列。
     

    オーバーライド:
    クラス OhObject 内の oPrint
    パラメータ:
    aPw - a PrintWriter value
    aHead - a String value