前の関連記事:LibreOffice5(98)Javaの例:Universal Content Broker (UCB)をPythonにする:その1
datasource(データソース)とdatasink(データシンク)
datasource(データソース)
データをもっているオブジェクト。
datasink(データシンク)
データを受け取るオブジェクト。
データソースであるかデータシンクであるかは相対的なものでしかなく、例えばフィルターはデータシンクでもありデータソースでもあります。
inputstream(インプットストリーム)とoutputstream(アウトプットストリーム)
インプットストリームかアウトプットストリームかは自身に対してデータが入るか出るかの違いになります。
自身に対して入るデータはインプットストリーム、出るデータはアウトプットストリームになります。
自身にデータが入るということは自身はデータシンクということになります。
自身からデータが出るということは自身はデータソースになります。
自身にデータが入るということはデータソースからデータを読み込む(read)ことになります。
自身からデータを出すということはデータシンクにデータを書き込む(write)ことになります。
インプットストリームを図にするとこのようになります。
データシンクの立場からデータの流れを見ることになります。
このときのデータシンクをアクティブデータシンク、データソースをパッシブデータソースと呼びます。
XActiveDataSinkインターフェイスのsetInputStream()メソッドでXInputStream型のオブジェクトをデータソースにします。
TextInputStreamがデータシンクの場合は、readString()メソッドでデータソースから文字列を読み込みます。
アウトプットストリームを図にするとこのようになります。
データソースの立場からデータの流れをみることになります。
このときのデータソースをアクティブデータソース、データシンクをパッシブデータシンク、と呼びます。
XActiveDataSourceインターフェイスのsetOutputStream()メソッドでXOutputStream型のオブジェクトをデータシンクにします。
TextOutputStreamがデータソースの場合は、writeString()メソッドで文字列をデータシンクに書き込みます。
Pipeでアクティブデータソースとアクティブデータシンクを中継する
Pipeは能動的にデータを送り出したいアクティブデータソースと、能動的にデータを受け取りたいアクティブデータシンクとの間を取り持ってくれます。
PipeはXOutputStreamもXInputStreamももっているので、アウトプットストリームとしてもインプットストリームとしても振る舞えるので、パッシブデータシンクにもパッシブデータソースにもなれるわけです。
(LibreOffice5(100)埋め込みマクロを書きこむマクロの例参照。)
(LibreOffice5(108)ドキュメントストレージからファイルシステムストレージにデータをコピーする参照。)
一時ファイルのサービスとインターフェイスの一覧
TempFileサービスのインスタンスである一時ファイルもXOutputStreamもXInputStreamももっており、Pipeと同様に使えます。
com.sun.star.io.TempFileをインスタンス化するとlinuxBean14.04では/tmpフォルダ下に.tmpとついたフォルダが作成されてその中に0バイトの一時ファイルが作成されました。
どこのフォルダに.tmpフォルダを作成するかは、LibreOfficeでツール→オプション、LibreOffice→パス、の「一時ファイル」で設定されています。
2つのファイルのうち一つはマクロを起動するときに開いたドキュメントのものです。
一時ファイルはスクリプトが終了すると消去されました。
.tmpとついたフォルダ名はLibreOfficeを終了すると消去されました。
LibreOfficeが起動している間は同じ.tmpフォルダが使われるようです。
def macro(): ctx = XSCRIPTCONTEXT.getComponentContext() # コンポーネントコンテクストの取得。 smgr = ctx.getServiceManager() # サービスマネージャーの取得。 tcu = smgr.createInstanceWithContext("pq.Tcu", ctx) # サービス名か実装名でインスタンス化。 tempfile = smgr.createInstanceWithContext("com.sun.star.io.TempFile", ctx) tcu.wtree(tempfile)
├─.io.TempFile
│ └─.io.XTempFile
│ │ boolean RemoveFile
│ │ string ResourceName
│ │ string Uri
│ ├─.io.XSeekable
│ │ hyper getLength()
│ │ hyper getPosition()
│ │ void seek( [in] hyper location
│ │ ) raises ( .io.IOException,
│ │ .lang.IllegalArgumentException)
│ └─.io.XStream
│ .io.XInputStream getInputStream()
│ .io.XOutputStream getOutputStream()
├─.beans.XPropertySet
│ void addPropertyChangeListener( [in] string aPropertyName,
│ [in] .beans.XPropertyChangeListener xListener
│ ) raises ( .lang.WrappedTargetException,
│ .beans.UnknownPropertyException)
│ void addVetoableChangeListener( [in] string PropertyName,
│ [in] .beans.XVetoableChangeListener aListener
│ ) raises ( .lang.WrappedTargetException,
│ .beans.UnknownPropertyException)
│ .beans.XPropertySetInfo getPropertySetInfo()
│ any getPropertyValue( [in] string PropertyName
│ ) raises ( .lang.WrappedTargetException,
│ .beans.UnknownPropertyException)
│ void removePropertyChangeListener( [in] string aPropertyName,
│ [in] .beans.XPropertyChangeListener aListener
│ ) raises ( .lang.WrappedTargetException,
│ .beans.UnknownPropertyException)
│ void removeVetoableChangeListener( [in] string PropertyName,
│ [in] .beans.XVetoableChangeListener aListener
│ ) raises ( .lang.WrappedTargetException,
│ .beans.UnknownPropertyException)
│ void setPropertyValue( [in] string aPropertyName,
│ [in] any aValue
│ ) raises ( .lang.WrappedTargetException,
│ .lang.IllegalArgumentException,
│ .beans.PropertyVetoException,
│ .beans.UnknownPropertyException)
├─.io.XInputStream
│ long available()
│ void closeInput()
│ long readBytes( [out] [byte] aData,
│ [in] long nBytesToRead
│ ) raises ( .io.IOException,
│ .io.BufferSizeExceededException,
│ .io.NotConnectedException)
│ long readSomeBytes( [out] [byte] aData,
│ [in] long nMaxBytesToRead
│ ) raises ( .io.IOException,
│ .io.BufferSizeExceededException,
│ .io.NotConnectedException)
│ void skipBytes( [in] long nBytesToSkip
│ ) raises ( .io.IOException,
│ .io.BufferSizeExceededException,
│ .io.NotConnectedException)
├─.io.XOutputStream
│ void closeOutput()
│ void flush()
│ void writeBytes( [in] [byte] aData
│ ) raises ( .io.IOException,
│ .io.BufferSizeExceededException,
│ .io.NotConnectedException)
└─.io.XTruncate
void truncate()
│ └─.io.XTempFile
│ │ boolean RemoveFile
│ │ string ResourceName
│ │ string Uri
│ ├─.io.XSeekable
│ │ hyper getLength()
│ │ hyper getPosition()
│ │ void seek( [in] hyper location
│ │ ) raises ( .io.IOException,
│ │ .lang.IllegalArgumentException)
│ └─.io.XStream
│ .io.XInputStream getInputStream()
│ .io.XOutputStream getOutputStream()
├─.beans.XPropertySet
│ void addPropertyChangeListener( [in] string aPropertyName,
│ [in] .beans.XPropertyChangeListener xListener
│ ) raises ( .lang.WrappedTargetException,
│ .beans.UnknownPropertyException)
│ void addVetoableChangeListener( [in] string PropertyName,
│ [in] .beans.XVetoableChangeListener aListener
│ ) raises ( .lang.WrappedTargetException,
│ .beans.UnknownPropertyException)
│ .beans.XPropertySetInfo getPropertySetInfo()
│ any getPropertyValue( [in] string PropertyName
│ ) raises ( .lang.WrappedTargetException,
│ .beans.UnknownPropertyException)
│ void removePropertyChangeListener( [in] string aPropertyName,
│ [in] .beans.XPropertyChangeListener aListener
│ ) raises ( .lang.WrappedTargetException,
│ .beans.UnknownPropertyException)
│ void removeVetoableChangeListener( [in] string PropertyName,
│ [in] .beans.XVetoableChangeListener aListener
│ ) raises ( .lang.WrappedTargetException,
│ .beans.UnknownPropertyException)
│ void setPropertyValue( [in] string aPropertyName,
│ [in] any aValue
│ ) raises ( .lang.WrappedTargetException,
│ .lang.IllegalArgumentException,
│ .beans.PropertyVetoException,
│ .beans.UnknownPropertyException)
├─.io.XInputStream
│ long available()
│ void closeInput()
│ long readBytes( [out] [byte] aData,
│ [in] long nBytesToRead
│ ) raises ( .io.IOException,
│ .io.BufferSizeExceededException,
│ .io.NotConnectedException)
│ long readSomeBytes( [out] [byte] aData,
│ [in] long nMaxBytesToRead
│ ) raises ( .io.IOException,
│ .io.BufferSizeExceededException,
│ .io.NotConnectedException)
│ void skipBytes( [in] long nBytesToSkip
│ ) raises ( .io.IOException,
│ .io.BufferSizeExceededException,
│ .io.NotConnectedException)
├─.io.XOutputStream
│ void closeOutput()
│ void flush()
│ void writeBytes( [in] [byte] aData
│ ) raises ( .io.IOException,
│ .io.BufferSizeExceededException,
│ .io.NotConnectedException)
└─.io.XTruncate
void truncate()
参考にしたサイト
Streaming interfaces
LibreOfficeでのストリームの概念の解説。
OOoBasic/Generic/TemporaryFiles - ...?
一時ファイルの解説。
0 件のコメント:
コメントを投稿