alfresco勉強会#28 メタデータテンプレート

39
2015 © 2015年6月24日 Jun Terashita 第28回 Alfresco勉強会 メタデータテンプレート

Upload: jun-terashita

Post on 04-Aug-2015

423 views

Category:

Software


5 download

TRANSCRIPT

Page 1: Alfresco勉強会#28 メタデータテンプレート

2015©

2015年6月24日

Jun Terashita

第28回 Alfresco勉強会 メタデータテンプレート

Page 2: Alfresco勉強会#28 メタデータテンプレート

2015©2

自己紹介

•主にAlfrescoの導入支援コンサルティングやカスタマイズ開発をしています。

•緑陣営です。弊社にはガチ勢が数人いますが私はまったりやってます。

Page 3: Alfresco勉強会#28 メタデータテンプレート

2015©3

発表内容

1. メタデータテンプレートとは

2. カスタムメタデータテンプレートを作ってみよう

3. デフォルトのテンプレートの上書き

Page 4: Alfresco勉強会#28 メタデータテンプレート

1. メタデータテンプレートとは

Page 5: Alfresco勉強会#28 メタデータテンプレート

2015©5

メタデータテンプレートとは• Alfresco Shareのドキュメントリストでシンプル表示モードと詳細表示モードに表示する属性情報(メタデータ)をカスタマイズするための仕組み

• コンテンツのタイプや保持するアスペクト、属性等、条件を評価して表示する属性情報を切り替えることが可能

• シンプル表示のみ、詳細表示のみ、両方に表示、という指定も可能

この部分

Page 6: Alfresco勉強会#28 メタデータテンプレート

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にはこの部分がない

Page 7: Alfresco勉強会#28 メタデータテンプレート

2015©7

メタデータテンプレートの構成要素

要素 用途

evaluator テンプレートの使用条件(複数指定可能)

banner コンテンツ名の上に表示されるバナー

line コンテンツ名の下に表示される1行ずつの表示エリア

banner

line

Page 8: Alfresco勉強会#28 メタデータテンプレート

2015©8

banner, lineの属性

要素 用途

index 表示順序指定(小さい順に表示される)

idバナー/ラインの名前(ID) ※テンプレート内で一意である必要がある

viewsimpleまたはdetailedを指定 ※何も指定しない場合は両方に表示される

evaluator 指定したEvaluatorが真を返す場合のみ表示する

Page 9: Alfresco勉強会#28 メタデータテンプレート

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

Page 10: Alfresco勉強会#28 メタデータテンプレート

2. カスタムメタデータテンプレートを作ってみよう

Page 11: Alfresco勉強会#28 メタデータテンプレート

2015©11

今回作ってみるサンプル• EXIFアスペクトが付いているコンテンツの詳細表示に「画像幅」「画像高」「露光時間」「F値」を追加し、「説明」は表示しない

• シンプル表示には「画像幅」「画像高」のみ表示する

こんなかんじに変える

Page 12: Alfresco勉強会#28 メタデータテンプレート

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

Page 13: Alfresco勉強会#28 メタデータテンプレート

2015©13

作成するファイル• 今回は以下の5つのファイルを作成します

• 属性のラベルにOut-of-the-Boxのメッセージリソースが使用可能な場合は下の2行は不要

ファイル 用途

share-config-custom.xml カスタムメタデータテンプレートを定義

custom-slingshot-documentlibrary-context.xml

カスタムのEvaluatorを定義

custom-slingshot-application-context.xml

属性のラベルに使用するメッセージリソースファイルの読み込み設定

custom_label.properties custom_label_ja.properties

メッセージリソースファイル

Page 14: Alfresco勉強会#28 メタデータテンプレート

2015©14

作成するファイルのパス• Alfresco SDKを使用してカスタマイズする場合はそれぞれ以下のパスに配置

• share-config-custom.xml以外はファイル名はなんでもよい(拡張子さえ合っていれば)

Page 15: Alfresco勉強会#28 メタデータテンプレート

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に入れる場合)

Page 16: Alfresco勉強会#28 メタデータテンプレート

2015©16

カスタムのEvaluatorの定義• EXIFアスペクトが付いているかどうか評価するEvaluatorを定義

<beans> <bean id="evaluator.doclib.metadata.hasExif" class="org.alfresco.web.evaluator.HasAspectEvaluator"> <property name="aspects"> <list> <value>exif:exif</value> </list> </property> </bean></beans>

shared/classes/alfresco/web-extension/custom-slingshot-documentlibrary-context.xml

Page 17: Alfresco勉強会#28 メタデータテンプレート

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 Widthlabel.exif_pixelYDimension=Image Heightlabel.exif_exposureTime=Exposure Timelabel.exif_fNumber=F Number

shared/classes/alfresco/web-extension/custom-slingshot-application-context.xml

label.exif_pixelXDimension=\u753b\u50cf\u5e45label.exif_pixelYDimension=\u753b\u50cf\u9ad8label.exif_exposureTime=\u9732\u5149\u6642\u9593label.exif_fNumber=F\u5024

shared/classes/alfresco/messages/custom_label.properties

shared/classes/alfresco/messages/custom_label_ja.properties

Page 18: Alfresco勉強会#28 メタデータテンプレート

2015©18

カスタマイズを適用して動作確認

Page 19: Alfresco勉強会#28 メタデータテンプレート

3. デフォルトのテンプレートの上書き

Page 20: Alfresco勉強会#28 メタデータテンプレート

基本的にはここまでのカスタマイズでOK

Page 21: Alfresco勉強会#28 メタデータテンプレート

でもオフライン編集すると isWorkingCopyのテンプレートが

効いてしまう

Page 22: Alfresco勉強会#28 メタデータテンプレート

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が先に評価される

Page 23: Alfresco勉強会#28 メタデータテンプレート

WorkingCopyの表示内容も変えたい場合は?

Page 24: Alfresco勉強会#28 メタデータテンプレート

2015©24

まずはコンテンツの状態でどのように表示内容を変えるか整理

EXIFアスペクトあり EXIFアスペクトなし

WorkingCopy ではない

さっき作った内容 defaultと同じ内容

WorkingCopy上の内容からtags,

categories, socialを削除isWorkingCopy と同じ内容

• EXIFアスペクトの有無とWorkingCopyかどうかで表示内容をどのように変えるか整理

Page 25: Alfresco勉強会#28 メタデータテンプレート

2015©25

上書きする方法は2通り(1)メタデータテンプレートの設定をすべて上書きし、メタデータテンプレートのEvaluator

が評価される順番を書き換える

(2)isWorkingCopyのメタデータテンプレートを上書きし、個々の場合の条件を細かく設定する

Page 26: Alfresco勉強会#28 メタデータテンプレート

(1)メタデータテンプレート全体の上書き

Page 27: Alfresco勉強会#28 メタデータテンプレート

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に入れる場合)

Page 28: Alfresco勉強会#28 メタデータテンプレート

2015©28

メタデータテンプレートを定義する順番

EXIFアスペクトあり EXIFアスペクトなし

WorkingCopy ではない

さっき作った内容 defaultと同じ内容

WorkingCopy上の内容からtags,

categories, socialを削除isWorkingCopy と同じ内容

• 以下の順にメタデータテンプレートが評価されてほしい (②と③はどちらが先でもよい)

Page 29: Alfresco勉強会#28 メタデータテンプレート

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つ指定

Page 30: Alfresco勉強会#28 メタデータテンプレート

2015©30

カスタマイズを適用して動作確認

Page 31: Alfresco勉強会#28 メタデータテンプレート

(2)isWorkingCopyのテンプレートを上書き

Page 32: Alfresco勉強会#28 メタデータテンプレート

2015©32

否定形のEvaluatorを定義

...<bean id=“evaluator.doclib.metadata.doesNotHaveExif" class="org.alfresco.web.evaluator.HasAspectEvaluator"> <property name="aspects"> <list> <value>exif:exif</value> </list> </property> <property name="negateOutput" value="true" /></bean><bean id="evaluator.doclib.metadata.isNotWorkingCopy" parent="evaluator.doclib.metadata.value"> <property name="accessor" value="workingCopy.isWorkingCopy" /> <property name="comparator"> <bean class="org.alfresco.web.evaluator.StringEqualsComparator"> <property name="value" value="true" /> </bean> </property> <property name="negateOutput" value="true" /></bean>...

shared/classes/alfresco/web-extension/custom-slingshot-documentlibrary-context.xml

• negateOutputというプロパティを使用して、EXIFアスペクトが付いていない時に真を返すEvaluatorとWorkingCopyではない時に真を返すEvaluatorを定義

Page 33: Alfresco勉強会#28 メタデータテンプレート

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の組み合わせを設定してもよい

Page 34: Alfresco勉強会#28 メタデータテンプレート

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というクラスを使用している

Page 35: Alfresco勉強会#28 メタデータテンプレート

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に入れる場合)

Page 36: Alfresco勉強会#28 メタデータテンプレート

2015©36

カスタマイズを適用して動作確認

Page 37: Alfresco勉強会#28 メタデータテンプレート

以上

Page 38: Alfresco勉強会#28 メタデータテンプレート

2015©38

今回のソースはここに置いてありますhttps://github.com/terajun/alfresco-metadata-template-sample

Page 39: Alfresco勉強会#28 メタデータテンプレート