前の関連記事:LibreOffice5(105)埋め込みマクロフォルダを取り出すスクリプト
File Contentsのサービスとインターフェイスの一覧
def macro(): ctx = XSCRIPTCONTEXT.getComponentContext() # コンポーネントコンテクストの取得。 smgr = ctx.getServiceManager() # サービスマネージャーの取得。 tcu = smgr.createInstanceWithContext("pq.Tcu", ctx) # サービス名か実装名でインスタンス化。 tempfile = smgr.createInstanceWithContext("com.sun.star.io.TempFile", ctx) # TempFile ucb = smgr.createInstanceWithContext("com.sun.star.ucb.UniversalContentBroker", ctx) # UniversalContentBroker content = ucb.queryContent(ucb.createContentIdentifier(tempfile.Uri)) # Tempfileのコンテントを取得。 tcu.wtree(content)一時ファイルのFileContentを取得しています。
content.getParent()で一時ファイルが入っているフォルダのFileContentが取得できますが、サービスとインターフェイスは同じものでした。
getContentType()の戻り値がファイルのときはapplication/vnd.sun.staroffice.fsys-fileなのに対して、フォルダの時はapplication/vnd.sun.staroffice.fsys-folderになっていました。
└─.ucb.FileContent
├─.beans.XPropertiesChangeNotifier
│ void addPropertiesChangeListener( [in] [string] PropertyNames,
│ [in] .beans.XPropertiesChangeListener Listener)
│ void removePropertiesChangeListener( [in] [string] PropertyNames,
│ [in] .beans.XPropertiesChangeListener Listener)
├─.beans.XPropertyContainer
│ void addProperty( [in] string Name,
│ [in] short Attributes,
│ [in] any DefaultValue
│ ) raises ( .lang.IllegalArgumentException,
│ .beans.IllegalTypeException,
│ .beans.PropertyExistException)
│ void removeProperty( [in] string Name
│ ) raises ( .beans.NotRemoveableException,
│ .beans.UnknownPropertyException)
├─.beans.XPropertySetInfoChangeNotifier
│ void addPropertySetInfoChangeListener( [in] .beans.XPropertySetInfoChangeListener Listener)
│ void removePropertySetInfoChangeListener( [in] .beans.XPropertySetInfoChangeListener Listener)
├─.container.XChild
│ .uno.XInterface getParent()
│ void setParent( [in] .uno.XInterface Parent
│ ) raises ( .lang.NoSupportException)
├─.lang.XComponent
│ void addEventListener( [in] .lang.XEventListener xListener)
│ void dispose()
│ void removeEventListener( [in] .lang.XEventListener aListener)
├─.ucb.XCommandInfoChangeNotifier
│ void addCommandInfoChangeListener( [in] .ucb.XCommandInfoChangeListener Listener)
│ void removeCommandInfoChangeListener( [in] .ucb.XCommandInfoChangeListener Listener)
├─.ucb.XCommandProcessor
│ void abort( [in] long CommandId)
│ long createCommandIdentifier()
│ any execute( [in] .ucb.Command aCommand,
│ [in] long CommandId,
│ [in] .ucb.XCommandEnvironment Environment
│ ) raises ( .ucb.CommandAbortedException,
│ .uno.Exception)
├─.ucb.XCommandProcessor2
│ void releaseCommandIdentifier( [in] long CommandId)
├─.ucb.XContent
│ void addContentEventListener( [in] .ucb.XContentEventListener Listener)
│ string getContentType()
│ .ucb.XContentIdentifier getIdentifier()
│ void removeContentEventListener( [in] .ucb.XContentEventListener Listener)
└─.ucb.XContentCreator
.ucb.XContent createNewContent( [in] .ucb.ContentInfo Info)
[.ucb.ContentInfo] queryCreatableContentsInfo()
├─.beans.XPropertiesChangeNotifier
│ void addPropertiesChangeListener( [in] [string] PropertyNames,
│ [in] .beans.XPropertiesChangeListener Listener)
│ void removePropertiesChangeListener( [in] [string] PropertyNames,
│ [in] .beans.XPropertiesChangeListener Listener)
├─.beans.XPropertyContainer
│ void addProperty( [in] string Name,
│ [in] short Attributes,
│ [in] any DefaultValue
│ ) raises ( .lang.IllegalArgumentException,
│ .beans.IllegalTypeException,
│ .beans.PropertyExistException)
│ void removeProperty( [in] string Name
│ ) raises ( .beans.NotRemoveableException,
│ .beans.UnknownPropertyException)
├─.beans.XPropertySetInfoChangeNotifier
│ void addPropertySetInfoChangeListener( [in] .beans.XPropertySetInfoChangeListener Listener)
│ void removePropertySetInfoChangeListener( [in] .beans.XPropertySetInfoChangeListener Listener)
├─.container.XChild
│ .uno.XInterface getParent()
│ void setParent( [in] .uno.XInterface Parent
│ ) raises ( .lang.NoSupportException)
├─.lang.XComponent
│ void addEventListener( [in] .lang.XEventListener xListener)
│ void dispose()
│ void removeEventListener( [in] .lang.XEventListener aListener)
├─.ucb.XCommandInfoChangeNotifier
│ void addCommandInfoChangeListener( [in] .ucb.XCommandInfoChangeListener Listener)
│ void removeCommandInfoChangeListener( [in] .ucb.XCommandInfoChangeListener Listener)
├─.ucb.XCommandProcessor
│ void abort( [in] long CommandId)
│ long createCommandIdentifier()
│ any execute( [in] .ucb.Command aCommand,
│ [in] long CommandId,
│ [in] .ucb.XCommandEnvironment Environment
│ ) raises ( .ucb.CommandAbortedException,
│ .uno.Exception)
├─.ucb.XCommandProcessor2
│ void releaseCommandIdentifier( [in] long CommandId)
├─.ucb.XContent
│ void addContentEventListener( [in] .ucb.XContentEventListener Listener)
│ string getContentType()
│ .ucb.XContentIdentifier getIdentifier()
│ void removeContentEventListener( [in] .ucb.XContentEventListener Listener)
└─.ucb.XContentCreator
.ucb.XContent createNewContent( [in] .ucb.ContentInfo Info)
[.ucb.ContentInfo] queryCreatableContentsInfo()
XCommandProcessorのexecute()メソッドで使えるコマンド
LibreOffice: Content Service Referenceにexecute()メソッドの引数にするCommand StructのNameアトリビュートで指定できるコマンド名の解説がありました。
表CommandsのCommand NameをCommand StructのNameアトリビュートに、ParametersをArgumentアトリビュートに指定します。
同じCommand NameでもParametersによって戻り値が違うので注意が必要です。
Pythonでやってみると、getPropertyValuesとsetPropertyValuesではIllegalArgumentExceptionが発生して実行できませんでした。
Javaの例(Universal Content Broker (UCB) examplesのPropertiesComposerやPropertiesRetriever)では実行できたので、Pythonだけの問題のようです。
参考にしたサイト
The File Content Provider - Apache OpenOffice Wiki
File Contentsの解説。
LibreOffice: Content Service Reference
XCommandProcessorのexecute()メソッドで使えるコマンドの解説。
0 件のコメント:
コメントを投稿