More Related Content
Similar to Alfresco勉強会#28 メタデータテンプレート (8)
More from Jun Terashita (8)
Alfresco勉強会#28 メタデータテンプレート
- 6. 2015©6
デフォルトのメタデータテンプレート
...
<metadata-templates>
<!-- Default (fallback) -->
<template id="default">
<banner index="10" id="lockBanner"
evaluator="evaluator.doclib.metadata.hasLockBanner">{lockBanner}</banner>
<banner index="20" id="syncTransientError"
evaluator="evaluator.doclib.metadata.hasSyncTransientErrorBanner">{syncTransientError}</banner>
<banner index="30" id="syncFailed"
evaluator="evaluator.doclib.metadata.hasSyncFailedBanner">{syncFailed}</banner>
<line index="10" id="date">{date}{size}</line>
<line index="20" id="description" view="detailed">{description}</line>
<line index="30" id="tags" view="detailed">{tags}</line>
<line index="40" id="categories" view="detailed"
evaluator="evaluator.doclib.metadata.hasCategories">{categories}</line>
<line index="50" id="social" view="detailed">{social}</line>
</template>
...
• エンドユーザが目にするのはdefaultとisWorkingCopy
• WorkingCopy(オフライン編集中のファイル)にはtags, categories, socialの行を表示しない
webapps/share/WEB-INF/classes/alfresco/share-documentlibrary-config.xml
isWorkingCopyにはこの部分がない
- 8. 2015©8
banner, lineの属性
要素 用途
index 表示順序指定(小さい順に表示される)
id
バナー/ラインの名前(ID)
※テンプレート内で一意である必要がある
view
simpleまたはdetailedを指定
※何も指定しない場合は両方に表示される
evaluator 指定したEvaluatorが真を返す場合のみ表示する
- 9. 2015©9
banner, lineの表示内容設定
• 2通りの指定が可能
(A)クライアントサイドJavaScript(※)で事前定義されたレンダラを指定:{レンダラ名}
※webapps/share/components/documentlibrary/documentlist.js
(B)プロパティ名とラベルのリソースキーを指定:{プロパティ名 ラベルのリソースキー}
(プロパティ名は「 : 」を「 _ 」に置換して指定)
...
<template id="transferTarget">
<evaluator>evaluator.doclib.metadata.isTransferTarget</evaluator>
<banner index="10" id="lockBanner" evaluator="evaluator.doclib.metadata.hasLockBanner">{lockBanner}
</banner>
<banner index="20" id="syncTransientError"
evaluator="evaluator.doclib.metadata.hasSyncTransientErrorBanner">{syncTransientError}</banner>
<banner index="30" id="syncFailed"
evaluator="evaluator.doclib.metadata.hasSyncFailedBanner">{syncFailed}</banner>
<line index="10" id="date">{date}</line>
<line index="20" id="description" view="detailed">{description}</line>
<line index="30" id="transferTarget" simpleView="true">{trx_enabled label.trx_enabled}
{trx_endpointhost label.trx_endpointhost}{trx_endpointport label.trx_endpointport}</line>
</template>
...
(B)の例
(A)の例
webapps/share/WEB-INF/classes/alfresco/share-documentlibrary-config.xml
- 12. 2015©12
今回使用した環境
• 標準のShareと比較しながら開発できるためメモリに余裕があるなら以下の構成がおすすめ
• リポジトリ
• Alfresco Community Edition 5.0.dをCentOS 7(VirtualBoxのVM)にインストーラ
でインストール
• カスタマイズするShare
• Alfresco SDK 2.1.0の「share-amp-archetype」を使用してEclipseで開発
• Alfrescoのバージョンはデフォルトのまま(今回は5.0.dが設定されている)
• Alfresco SDKについては以前のAlfresco勉強会の資料を参照
http://www.slideshare.net/terajun/alfresco26-alfresco-sdk
- 15. 2015©15
カスタムメタデータテンプレートの定義
• EXIFアスペクトが付いていれば真を返すEvaluator(後述)で評価し、画像幅、画像高、露
光時間、F値を表示するテンプレートを定義
<alfresco-config>
<config evaluator="string-compare" condition="DocumentLibrary">
<metadata-templates>
<!-- Photos -->
<template id="isPhoto">
<evaluator>evaluator.doclib.metadata.hasExif</evaluator>
<line index="10" id="date">{date}{size}</line>
<line index="20" id="exif_pixelDimension">{exif_pixelXDimension label.exif_pixelXDimension}
{exif_pixelYDimension label.exif_pixelYDimension}
</line>
<line index="30" id="exif_exposureTime" view="detailed">{exif_exposureTime
label.exif_exposureTime}
</line>
<line index="40" id="exif_fNumber" view="detailed">{exif_fNumber label.exif_fNumber}
</line>
<line index="50" id="tags" view="detailed">{tags}</line>
<line index="60" id="categories" view="detailed"
evaluator="evaluator.doclib.metadata.hasCategories">{categories}</line>
<line index="70" id="social" view="detailed">{social}</line>
</template>
</metadata-templates>
</config>
</alfresco-config>
EXIF情報表示用のライン
新たに定義したEvaluator(後述)
shared/classes/alfresco/web-extension/share-config-custom.xml または META-INF/share-config-custom.xml(JARに入れる場合)
- 17. 2015©17
ラベル表示用のメッセージリソースの作成
• メッセージリソースファイルの読み込み設定とメッセージリソースファイルを作成
• 日本語のみ必要な場合はメッセージリソースファイルを分ける必要はない
...
<bean id="webscripts.custom.resources"
class="org.springframework.extensions.surf.util.ResourceBundleBootstrapComponent">
<property name="resourceBundles">
<list>
<value>alfresco.messages.custom_label</value>
</list>
</property>
</bean>
...
label.exif_pixelXDimension=Image Width
label.exif_pixelYDimension=Image Height
label.exif_exposureTime=Exposure Time
label.exif_fNumber=F Number
shared/classes/alfresco/web-extension/custom-slingshot-application-context.xml
label.exif_pixelXDimension=u753bu50cfu5e45
label.exif_pixelYDimension=u753bu50cfu9ad8
label.exif_exposureTime=u9732u5149u6642u9593
label.exif_fNumber=Fu5024
shared/classes/alfresco/messages/custom_label.properties
shared/classes/alfresco/messages/custom_label_ja.properties
- 22. 2015©22
EXIFアスペクトをもつファイルをオフライン編集すると
EXIF情報は表示されない
...
<!-- Working Copies -->
<template id="isWorkingCopy">
<evaluator>evaluator.doclib.metadata.isWorkingCopy</evaluator>
<banner index="10" id="lockBanner" evaluator="evaluator.doclib.metadata.hasLockBanner">{lockBanner}</banner>
<banner index="20" id="syncTransientError"
evaluator="evaluator.doclib.metadata.hasSyncTransientErrorBanner">{syncTransientError}</banner>
<banner index="30" id="syncFailed" evaluator="evaluator.doclib.metadata.hasSyncFailedBanner">{syncFailed}</banner>
<line index="10" id="date">{date}{size}</line>
<line index="20" id="description" view="detailed">{description}</line>
</template>
...
webapps/share/WEB-INF/classes/alfresco/share-documentlibrary-config.xml
このEvaluatorが先に評価される
- 27. 2015©27
DocumentLibraryの設定全体を上書き
...
<!-- Document Library config section -->
<config evaluator="string-compare" condition="DocumentLibrary" replace="true">
<!-- Document List -->
<doclist>
...
<!--
Custom Metadata Templates for the Document Library Browse View
Use view="simple" or view="detailed" to limit the display to one particular view.
-->
<metadata-templates>
<!-- Default (fallback) -->
<template id=“default">
...
</config>
• share-documentlibrary-config.xmlからcondition= DocumentLibrary の設定をshare-
config-custom.xmlにすべてコピーし、replace= true というパラメータを設定
※設定を書き換えない部分も含めてすべてコピーしないとエラーになってしまうので注意
shared/classes/alfresco/web-extension/share-config-custom.xml または META-INF/share-config-custom.xml(JARに入れる場合)
- 29. 2015©29
メタデータテンプレートの定義の順番を書き換え
...
<metadata-templates>
<!-- Default (fallback) -->
<template id="default">
<banner index="10" id="lockBanner" evaluator=“evaluator.doclib.metadata.hasLockBanner">{lockBanner}</banner>
...
</template>
<!-- EXIFアスペクトありのWorkingCopy -->
<template id="isWorkingCopyWithExif">
<evaluator>evaluator.doclib.metadata.hasExif</evaluator>
<evaluator>evaluator.doclib.metadata.isWorkingCopy</evaluator>
<banner index="10" id="lockBanner" evaluator=“evaluator.doclib.metadata.hasLockBanner">{lockBanner}</banner>
...
</template>
<!-- EXIFアスペクトあり -->
<template id="hasExif">
<evaluator>evaluator.doclib.metadata.hasExif</evaluator>
<line index="10" id=“date">{date}{size}</line>
...
</template>
<!-- Working Copies -->
<template id="isWorkingCopy">
...
• defaultとisWorkingCopyの間に前ページの①と②のメタデータテンプレートを挿入
(②はisWorkingCopyの後でもよい)
shared/classes/alfresco/web-extension/share-config-custom.xml または META-INF/share-config-custom.xml(JARに入れる場合)
①にはEvaluatorを2つ指定
- 33. 2015©33
場合分けに対応するEvaluatorを定義(必須ではない)
...
<bean id="evaluator.doclib.metadata.isWorkingCopyWithoutExif" class="org.alfresco.web.evaluator.ChainedMatchAllEvaluator">
<property name="evaluators">
<list>
<ref bean="evaluator.doclib.metadata.isWorkingCopy" />
<ref bean="evaluator.doclib.metadata.doesNotHaveExif" />
</list>
</property>
</bean>
<bean id="evaluator.doclib.metadata.isWorkingCopyWithExif" class="org.alfresco.web.evaluator.ChainedMatchAllEvaluator">
<property name="evaluators">
<list>
<ref bean="evaluator.doclib.metadata.isWorkingCopy" />
<ref bean="evaluator.doclib.metadata.hasExif" />
</list>
</property>
</bean>
<bean id="evaluator.doclib.metadata.isNotWorkingCopyWithExif" class="org.alfresco.web.evaluator.ChainedMatchAllEvaluator">
<property name="evaluators">
<list>
<ref bean="evaluator.doclib.metadata.isNotWorkingCopy" />
<ref bean="evaluator.doclib.metadata.hasExif" />
</list>
</property>
</bean>
...
shared/classes/alfresco/web-extension/custom-slingshot-documentlibrary-context.xml
• ChainedMatchAllEvaluatorを使用し、ここまでに定義したEvaluatorの組み合わせで場合分
けに対応する新たなEvaluatorを定義
• これは必須ではなく、先ほどの例のようにメタデータテンプレート側でEvaluatorの組み合わ
せを設定してもよい
- 34. 2015©34
デフォルトのisWorkingCopyテンプレートを無効化
...
<!-- isWorkingCopyテンプレートを無効化 -->
<template id="isWorkingCopy">
<evaluator>evaluator.doclib.action.disableAction</evaluator>
</template>
...
• デフォルトのisWorkingCopyテンプレートを上書きし、常に偽を返すEvaluatorを使用して無
効化
※無効化せずに場合分けの1つとして内容を書き換えてもよい
shared/classes/alfresco/web-extension/share-config-custom.xml または META-INF/share-config-custom.xml(JARに入れる場合)
• slingshot-documentlibrary-context.xmlに定義されている
• org.alfresco.web.evaluator.AlwaysFalseEvaluatorというクラスを使用している
- 35. 2015©35
各Evaluatorに対応したメタデータテンプレートを定義
...
<!-- EXIFアスペクトあり -->
<template id="isNotWorkingCopyWithExif">
<evaluator>evaluator.doclib.metadata.isNotWorkingCopyWithExif</evaluator>
<line index="10" id="date">{date}{size}</line>
<line index="20" id="exif_pixelDimension">{exif_pixelXDimension label.exif_pixelXDimension}
{exif_pixelYDimension label.exif_pixelYDimension}
</line>
<line index="30" id="exif_exposureTime" view="detailed">{exif_exposureTime
label.exif_exposureTime}</line>
<line index="40" id="exif_fNumber" view="detailed">{exif_fNumber label.exif_fNumber}</line>
<line index="50" id="tags" view="detailed">{tags}</line>
<line index="60" id="categories" view="detailed"
evaluator="evaluator.doclib.metadata.hasCategories">{categories}</line>
<line index="70" id="social" view="detailed">{social}</line>
</template>
<!-- EXIFアスペクトありのWorkingCopy -->
<template id="isWorkingCopyWithExif">
<evaluator>evaluator.doclib.metadata.isWorkingCopyWithExif</evaluator>
<banner index="10" id=“lockBanner"
evaluator=“evaluator.doclib.metadata.hasLockBanner”>{lockBanner}</banner>
...
• デフォルトのisWorkingCopyテンプレートを上書きし、常に偽を返すEvaluatorを使用して無
効化
shared/classes/alfresco/web-extension/share-config-custom.xml または META-INF/share-config-custom.xml(JARに入れる場合)