tohokuaikiのチラシの裏

技術的ネタとか。

Confluenceの添付ファイルがどうやって保存されるかわからなかったので調べた件

メモ書き

ファイルパスを作成するクラスを使った概観

com.atlassian.confluence.pages.persistence.dao.HierarchicalFileSystemAttachmentDataDao
のcreateDirectoryHierarchy()を追ってみると、IdMultiPartHashGeneratorクラスのgenerateで行ってる。
で、最後に添付ファイルのIDを付けてる。結局

File spaceルート = createDirectoryHierarchy(添付ルートディレクトリ, spaceId);
File ページルート = createDirectoryHierarchy(spaceルート, pageId);
File 添付ファイルディレクトリ = new File(ページルート, attachmentId);

みたいな感じ。

で、createDirectoryHierarchy()を自前でやるには

IdMultiPartHashGeneratorクラスのgenerateを使えるようにする。
このクラスは
confluence-project/confluence-core/confluence/src/etc/java/attachmentSubsystemContext.xml
を見るとbeanで作れる。

ん~~~~。Confluence5.5でのクラスの移動。

5.5以降では
com.atlassian.confluence.pages.persistence.dao.IdMultiPartHashGenerator
が非推奨になり、
com.atlassian.confluence.pages.persistence.dao.filesystem.IdMultiPartHashGenerator
を使ってくれという事になっている。

ただ、5.6.1のソースを見ると
confluence-project/confluence-core/confluence/src/etc/java/attachmentSubsystemContext.xml

    <bean id="idHashGenerator" class="com.atlassian.confluence.pages.persistence.dao.IdMultiPartHashGenerator">

となっているので、とりあえず非推奨の方を使っておく。

この辺りは、実は
5.4までは
com.atlassian.confluence.pages.persistence.dao.HierarchicalFileSystemAttachmentDataDao
5.5からは
com.atlassian.confluence.pages.persistence.dao.filesystem.FileSystemAttachmentDataDao
と、使うFileSystemAttachmentDataDaoが違ってくるところに依ってるのだけど、どうもidHashGeneratorまでは統合されてないっぽいので。。。