読者です 読者をやめる 読者になる 読者になる

tohokuaikiのチラシの裏

技術的ネタとか。

Confluenceのプラグイン開発を承ります。ご連絡はこちらのホームページからお願いいたします。

confluence

ConfluenceのREST APIを作ってみる - POST編

GETメソッドの場合は引数を@QueryParamで受け取ればなんてことなかったのだけど、POSTの場合はちょっと違った。 なお、通信はXMLじゃなくてすべてJSONを使った場合。 AtlassianのDocumentでいうとこの辺りが参考になる。使わなかったけど。 Developing a RES…

Confluenceのマクロモジュールを作成するときのi18nについて

マクロパラメータとかの名称をi18nにしたいなーって思ったときに今までやったことが無いことに気が付いた。 元資料 Including Information in your Macro for the Macro Browser - Atlassian Developers の最後の方によると、自動的にi18nの定義を見てくれる…

Atlassian SDKを6.2.2にバージョンアップしたら、Confluence5.9.2のバージョン指定したのに5.8.8になってしまって困った件

SDK 6.2.2が出てた 年末に出てたらしい。 https://sdkrepo.atlassian.com/win-signed/ ということで、6.2.2にしてサンプルプロジェクトを作ってみた。気になるところはpom.xmlのここ <properties> <confluence.version>5.9.3</confluence.version> <confluence.data.version>5.7.4</confluence.data.version> <amps.version>6.2.1</amps.version> <plugin.testrunner.version>1.2…</plugin.testrunner.version></properties>

Atlassian ConnectのConnect cookbookをやってみる。

ということで。これ。 https://developer.atlassian.com/static/connect/docs/latest/guides/connect-cookbook.html all.jsを読み込む方法 Getting startでは、直接描いたall.jsのScriptタグ <script src="//localhost:1990/confluence/atlassian-connect/all.js" type="text/javascript"></script> を動的に読み込む方法。ただし、サーバサイドで何かするとかいう…

Atlassian Cloud SDKでHelloworldを作ってみる

チュートリアルの Getting startedを行う。今回作るのは、サーバ版アドオンで言う所のサーブレットモジュールである。 なお、Windows8ですべてローカルで賄うものとする。 local開発用Confluenceを起動を以前のエントリ通り行っているものとする。 HTTPDを用…

Atlassian SDKの5.1.11が微妙。。。

なんか5.3.1の実機にインストールしてみたところエラーでる。 2015-08-27 17:16:01,408 ERROR [http-8191-6] [plugin.descriptor.web.ConfluenceWebInterfaceManager] getHtml Failed to render web panel: com.atlassian.plugin.web.descriptors.DefaultWeb…

Atlassian Cloud用のプラグインを作成する

Atlassian CloudのアドオンはJavaアプリではないので作り方が全く違う。ということで、Getting start. https://developer.atlassian.com/static/connect/docs/latest/guides/getting-started.html とりあえず、デモの起動まで Getting startでは、プレーンな…

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

メモ書き ファイルパスを作成するクラスを使った概観 com.atlassian.confluence.pages.persistence.dao.HierarchicalFileSystemAttachmentDataDao のcreateDirectoryHierarchy()を追ってみると、IdMultiPartHashGeneratorクラスのgenerateで行ってる。 で、…

Atlassian Licenseの実装周辺について

Atlassianマーケットプレイスで有料出品するにはライセンス認証が必須になる。 Paid via Atlassianならライセンスのパッケージもあるし、集金周りもやってくれる*1。Confluenceの場合でやってみた。参考ドキュメント Tutorial: Adding licensing support to …

Confluenceの自分自身のPluginUninstallEventをキャッチする方法

EventLitenerの使い方自体はこちらに過去書きましたが。。。 Confluenceのプラグイン開発で、Eventを使う方法(Annotation Based) - tohokuaikiのチラシの裏tohokuaiki.hateblo.jp プラグインの自分自身のアンインストール(あるいは無効化)のEventはキャッ…

Atlassian Cloud用のプラグインを書くために・・・。

Atlassian Cloud Atlassianはオンプレミス型のサービス展開をしていたのだけど、数年前からCloud型のサインアップだけで使えるシステムを提供している。ハード的な資源は共有しながらも、JIRAやConfluenceなどは1つずつのインスタンスとして動作しているので…

開発するConfluenceのバージョンとJavaのバージョンとAtlassian SDKのバージョンとYシャツとわたし。

これがなんか微妙に動いた動かなかったりで、環境変数変えたりSDK変えたりしてるんです。SDKの過去バージョンはここから。 Atlassian Plugin SDK - Windows - Version history | Atlassian Marketplaceここには、最新と思われるSDKもある。 Index of /groups…

ConfluenceのVelocityテンプレートで使える変数とか

覚書 設定に従った日付表記 $dateFormatter.formatDateTime($sampleDate) プラグインの情報を取りたい時 XWorkのAction内だと Plugin plugin = this.pluginAccessor.getPlugin("プラグインキー"); plugin.getParameter("ここにatlassian-plugin.xml の plugi…

Confluenceで自動実行スケジュール化されたプラグインを作る

タスクを決められたタイミングで自動実行するプラグインを作ります。管理画面の「スケジュール ジョブ」から実行できたり無効化できたりするやつです。 以下のドキュメントを参考にしました。 Trigger Module - Atlassian Developers Job Module - Atlassian…

Confluenceのタスクスケジューリング設定における時刻の指定について

管理画面から行う自動バックアップとかのタスクのスケジューリング設定。 Scheduled Jobs - Confluence Latest - Atlassian Documentationcrontabによく似ているのですが、秒の指定ができたりとちょっと違う。 管理画面の編集でライブチェックができる 時刻…

Confluenceのbandanaに任意のObjectを保存する時は引数がゼロのコンストラクタが必要

なんか、bandanaManagerを通してConfluenceに登録してたObjectが何かのタイミングで消えてしまってた現象が発生。あれー?って思ってログ見たら 2015-06-18 16:59:45,738 WARN [http-1990-1] [confluence.setup.bandana.ConfluenceDaoBandanaPersister] getO…

ConfluenceのPlugin作成でバックグラウンドで走らせるようなタスクを作る

XMLエクスポートやインポートの時に出てくるプログラスバーがあるあれです。ソースコード見てたらTransactionTemplateを使ってあれこれやるらしいのだけど、まんまコピペ―したらエラーが出た。エラーの内容は、この人と一緒。Creating a LongRunningTask - A…

ConfluenceのPlugin作成でApache XMLRPCを使おうとしたらSAXParserでエラー出た件

プラグインでXMLRPCできるようにしたい ということで、pom.xmlにapache.xmlrpcを追加 <dependency> <groupId>org.apache.xmlrpc</groupId> <artifactId>xmlrpc-client</artifactId> <version>3.1.3</version> </dependency> あんまり久しぶりだったので、NetBeansから追加した際に<scope>jar</scope>が入っててそのままにしたらコンパイルは通るんだけど、実際に動作さ…

ConfluenceのREST APIを作ってみる - 実践編1(atlas-create-confluence-plugin-moduleコマンドを実行)

atlassian-plugin.xml 1か所だけになる。 あとは、Classのアノテーションを使っていくことで対応できる。サンプル。 <rest key="conf2dita-get-topictype" path="/conf2dita" version="1.0"> <description>get dita topictype assigned to this page</description> </rest> URLのマッピングについて ConfluenceのSDKの場合は、 [http://localhost:1990/confluence/res…

ConfluenceのREST APIを作ってみる - 序章

ConfluenceのAPIはいろいろあって、 XML-RPC JSON-RPC REST の順で整備されているみたい。JSON-RPCなんかは、ConfluenceのSDKではRESTブラウザが管理画面から使えるようになっている。 http://localhost:1990/confluence/plugins/servlet/restbrowser/ 今後…

Confluenceのプリキュアマクロをリリースします

4カ月ほど前にプリキュアハッカソン2という頭のおかしい殺伐としたサザンクロスWEB業界に癒しを与えるようなイベントに出席したのですが、その際に作ったプリキュアマクロをリリースします。Release first release · tohokuaiki/confluence-precuremacro · G…

Confluenceのプラグイン開発で、別のプラグインで作ったComponentをimportする方法

別のプラグインで作成したpublicなcomponentを使うことができます。ただし、インストールしてあるjarを使うのではなくjarのコンパイル時に組み込むので呼び出し先のjarファイルが必要です。こんな感じです。 2つプラグインを作っていくので、atlas-runし直さ…

Confluenceでリンクを再度編集しようとしてたら文字化けになってしまうバグの対応

Confluenceでリンクを設定してその後で編集しようとして 数値参照になってしまうのは昔から困ったバグなのですが、なかなか直りません*1。こんな感じで困ってらっしゃる方もいらっしゃいます。 リンク編集時の文字化け - GakuNinmAPpublic - meatwiki 根本的…

ConfluenceでBasic認証を掛ける

ログイン認証あるからいらないじゃーんっていうかもしれないけど、とりあえずそんな要望がどこからともなく聞こえたので試してみた。 UserDatabaseRealmだとダメっぽい? TOMCATで設定するBASIC認証の失敗する原因 - QA@IT を参考に、UserDatabaseRealmを使…

ConfluenceのMacroUtils.defaultVelocityContext()で得られるもの

Map<String, Object> defaultContext = MacroUtils.defaultVelocityContext(); で得られるもの一覧。 Map<String, Object> defaultContext = MacroUtils.defaultVelocityContext(); for (String key: defaultContext.keySet()){ map.put(key, defaultContext.get(key)); } とかしてVelocityテ</string,></string,>…

Confluenceプラグイン開発でRenderer Componentモジュールが既に無効らしい件

2日近くかかってしまったのだけど、どうやらできないってことでF.Aらしい。 何がしたかったかというと、Confluenceのページ内容をFilterしたかった。 PHPでいうところの、ob_start()のコールバック的な。そんなFilterくらいあるんじゃないかと思ったのだけど…

Confluenceのエディタ画面でのgetTextのキーとテキスト一覧

AJS.I18n.keysに入ってたものをリスト化 キー テキスト admin.keyboard.shortcut.add.comment.desc コメント admin.keyboard.shortcut.addlabel.desc ラベルの編集 admin.keyboard.shortcut.create.blog.desc ブログの追加 admin.keyboard.shortcut.create.c…

Confluenceのイベントクラスのまとめ

一旦 find 5.3.1 -type f -name "*java"|xargs grep "eventPublisher.publish(" > ../eventPublisher.txt find 5.3.1 -type f -name "*java"|xargs grep ".publishEvent(" > ../publisEvent.txtってやってイベントを発火させているファイルを求めて、ソース…

Confluenceのプラグイン開発で、Eventを使う方法(Annotation Based)

ConfluenceのPluginでEventをあれこれする方法です。参考文献はこの辺りで。 Event Listener Module Annotation Based Event Listener Example Writing an Event Listener Plugin Module EventListener Example Annotation Basedの方が新しくて良いようだ。…

Confluenceのプラグイン開発におけるJavaScriptの国際化

transformerのススメ 本当の方法であれば、propertiesファイルをJavaScriptに変更してくれるらしい。その方法として、1つの言語ファイル(***.properties)をVerlocityテンプレートの中で使えるようにしたり、JavaScriptで使えたり、soyテンプレートで使える…

ConfluenceのVelocityテンプレートでSubmitボタンをaui-themeにてつけようとして挫折

Velocityのカスタムタグで、auiテーマを使って #tag ("Submit" "theme='aui'") ってやると、送信ボタンとキャンセルリンクが良い感じに出てきて便利なのだけど、キャンセルリンクを消したい場合にどうやっていいかわからず。ソースが confluence-core/conflu…

ConfluenceのSystemプロパティ一覧

Confluence内のコードで Properties properties = System.getProperties(); for(Object s:properties.keySet()){ System.out.println(s.toString()); System.out.println(properties.get(s).toString()); } ってやった結果。 key value java.vendor Sun Micr…

Confluenceのマクロパラメータの落とし穴

<parameter name="AAAAxmlnsBBB" type="string"/> というように、xmlnsをパラメータの名前に入れるとインストールエラーをおこすっぽい。OMG!質問してみた! Confluence xhtml-macro with parameter which name attribute value includes "xmlns" cause problem. - Atlassian Answers</parameter>

Confluenceのマクロパラメータについて調べてみた

XHTMLマクロやマクロを作るときにatlassian-plugins.xmlで定義したいのだけど、イマイチ定義一覧みたいのが見つかられなくて、ソースから解析してみた。 手っ取り早くはDTDがあるんだけど。。。 confluence-project/confluence-core/confluence/src/etc/java…

ConfluenceのXWorkで、ダウンロードさせるActionを作る

Struts2の記事を参考に。ただ、参考にと言ってもXWorkにはない機能がStruts2にあるので要注意。 atlassian-plugin.xml resultのtypeにstreamを使用する。こんな感じ。 <result name="success" type="stream"> <param name="contentType">application/octet-stream</param> <param name="inputName">exportZipInputStream</param> <param name="bufferSize">1024</param> </result>

Confluenceプラグインのコード内でpageManagerとかbandanaManagerとかを取得する方法

各種Manager系Objectが取れないと話にならないですよねーってことで。 Servletプラグイン編 servletプラグインの場合は、コンストラクタに書く。 書いておいて当たればSpringの方で適当にInjectionしてくれる。 public class HogehogeServlet extends HttpSe…

ConfluenceのPlugin作成で一時データを取っておきたいときの方法 - ContentPropertyManagerとBandanaManager

Confluenceでデータを取っておきたい方法について。2つある。ContentPropertyManagerとBandanaManager。*1 参考ページ Persistence in Confluence - Atlassian Developers Developing a Confluence Plugin « Luminis Software Development基本的にどちらも、…

Confluenceのプラグイン作成でファイル添付周りのコードを書く際に参考になりそうなところのメモ

AttachmentManagerかと思いきや、それを単純に使っただけではどうもよろしくない。 どうよろしくないかというと、 public static void attachFile(AttachmentManager am, ContentEntityObject page, String temp_file_path, String fileName, String comment…

Confluenceのプラグイン作成における国際化

設置するファイル 言語ファイルは、I18N Architecture - Confluence Development - Atlassian Developer Documentationにあるように各ロケールごとに作成する。 サンプルとして、 /com/atlassian/confluence/core/ConfluenceActionSupport_.properties /com/…

Confluenceのプラグイン作成で使えそうな環境変数の取得

気が付き次第ここに追加する。 Confluenceのデータディレクトリからのパス confluence-project/confluence-core/confluence/src/java/com/atlassian/confluence/util/ConfluenceHomeGlobalConstants.java に記載されている。 package com.atlassian.confluen…

ConfluenceのプラグインでXWork/WebWork2の仕組みを使ったときのボタンによるAction先の制御

ConfluenceのバンドルしてるXWorkでは、サブミットボタンの名称によるAction先の変更はできないようだ。なんとなく、 <input type="submit" name="Top_Action" value="トップへ"/> とすると、Top_Actionに関連付けられたActionになるのかなと思いきや、そうではない。実際には、2方向しか移動ができないみたい。 進む …

ConfluenceのXWorkによるプラグイン作成における値チェック(Validator)の方法が少なくてガッカリした

基本的な使い方 atlassian-plugin.xml にて、インターセプターでActionに対してvalidatingStackにしておく。 <package name="jpages" extends="default" namespace="/pages"> <default-interceptor-ref name="validatingStack"/> </default-interceptor-ref></package>

Confluenceのプラグイン作成で、ページベースの画面を作る

タイトルだけだとなんのこっちゃって感じですが。。。 一番わかりやすいのは、Wordのインポート機能のページかと思います。ページを表示しているときに右上の「Tools」からプルダウンで出てくるやつ。 これって、左側のページメニューやスペースへのアクセス…

Confluenceのプラグイン作成におけるCSRF対策

ConfluenceのプラグインでXWork/WebWork2の仕組みを使ってプログラムを書く(3) - tohokuaikiのチラシの裏でもちらっと書いたけど、トークン、あるいはチケットといわれるものの埋め込みですね。参考資料はこちら。CSRF対策なんだからActionクラス使うよねっ…

Confluenceのプラグイン作成 XWork/WebWork2でセッションを使う

Actionクラスの中でHTTPセッションを使いたい場合。PHPで言えば、$_SESSION Confluenceはログイン基本なので、Actionクラスの中ではデフォルトでセッションが始まっている。COOKIE名がJSESSIONIDというやつ。これは匿名ユーザーにももちろん張られている。な…

ConfluenceのVelocityテンプレートで使えるカスタムタグについて

ConfluenceのVelocityテンプレートは、Sitemeshというデコレータによりパワーアップされているらしい。ちなみに、SiteMeshはOpenSymphonyというJavaの結構すごい大規模なプロジェクトの1つだったのだが全体としてのOpenSymphonyは既に4年くらい前に終了し、…

Confluenceのプラグインでフォームを含む管理画面を作ること(1)

フォームを扱う場合、一般的にはフレームワークを使うと楽なので生では使いたくないのですが、Confluenceのプラグインでもそのような方法があるみたい。 Creating an Admin Configuration Form - Documentation - Atlassian Developer Documentation のチュ…

Confluenceプラグインでcomponent-importを忘れてはまった件

もー、ホントに下らない件ではまってしまった。。。自分も、Confluenceのプラグインを作ってみる(7) Atlassian Templateを使ってみる - tohokuaikiのチラシの裏で書いてるのに、理解してなかったからはまってしまった。おさらい。UnsatisfiedDependencyExcep…

ConfluenceのPlugin作成でテンプレートを使う際の種類分け

Confluenceのプラグインを作ってみるメモ(5) Servletを使えるようにする - tohokuaikiのチラシの裏 の続きHTMLテンプレートのメタタグでなどと指定すると、テンプレートの周りを変えることができる。 参照ページ: https://developer.atlassian.com/display/…

ConfluenceのXHTML(保存形式)のマクロの保存形式の変更におけるマニアックな話

自分用メモConfluenceは4から5になった際に*1マクロの保存形式にからタグを使うようになった。保存形式って、ページのツール>保存形式を見るで見られるやつ。 Confluence4 <ac:macro ac:name="include"><ac:default-parameter>ページタイトル</ac:default-parameter></ac:macro> Confluence5 <ac:structured-macro ac:name="include"><ac:parameter ac:name=""><ac:link></ac:link></ac:parameter></ac:structured-macro>