Loading [MathJax]/extensions/tex2jax.js

2014-12-26

DynamoDBにてHash+RangeのQuery設定方法(v2対応)

久しぶりにDynamoDB触ってみたら、Hash+RangeのQuery設定方法がv2で変更になっていて、古いコードがエラーになってしまったので。。。。

//条件設定は略
Condition rangeKeyCondition = new Condition().withComparisonOperator();
//以下、v2での記述方法
// ハッシュキーを設定
Item dti = new Item();
dti.setEntity(id);
//Queryの設定
DynamoDBQueryExpression<Item> queryExpression = new DynamoDBQueryExpression<Item>()
.withHashKeyValues(dti)
.withRangeKeyCondition("r", rangeKeyCondition); //rのところはRangeKeyに該当する列
// 参考までに以下、v1の場合の記述方法
// // ハッシュキーを設定
// DynamoDBQueryExpression queryExpression = new DynamoDBQueryExpression(
// new AttributeValue().withS(id));
// // レンジキーの検索条件を設定
// queryExpression.setRangeKeyCondition(rangeKeyCondition);


GWTにてFlexTableに配置されたボタンのクリックを特定する ~IDの設定と取得~

下記の図のように、FlexTableにボタンを配置して、押されたボタンの位置(行)を特定することを考えます。

その方法は下記のようになります。
  • getElement().setIdを利用して各ボタンにidを割り振る(id=行とする)
  • クリックイベントにてevent.getSource()を呼び出し、クリックされたボタンを取り出す
  • そのボタンのidを調べる
以上の方法により、下記のような動作をします。

(一番上のボタンをクリックした場合。)


(上から3番目のボタンをクリックした場合)


コードは下記のようになります。

//ボタンにIDをつけておく
testButton.getElement().setId(String.valueOf(itemNum));
testButton.addClickHandler(clickHdl);
//FlexTableに貼り付け
rvTable.setWidget(itemNum, 2, testButton);
//ボタンがクリックされた時の処理
ClickHandler clickHdl= new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
Button btn= (Button)(event.getSource());
//この場合、クリックされたボタンの行に対応する
Window.alert(btn.getElement().getId());
}
};


GWT:FlexTableを利用して動的にWidgetを張り付けながら管理する

データベースに入っている内容をそのまま表示したり修正したりするには、データをFlexTableに表示するのがベターです。しかし、その際には
  • Widgetsを動的に配置
  • 配置したWidgetsにJavaコード内で管理
という条件を満たす必要があります。その際は、表示しているWidgetを内部でも同様に管理するのがベターです。例えば下記のような方法です。ここでは、配置しているWidgetを行単位でリストに保存しています。

@UiField
FlexTable tbl;
//このListで追加したWidgetを管理する
List<SubjectItem> itemList = new ArrayList<SubjectItem>();
public void addItem(String name){
Label label = new Label(name);
TextBox count = new TextBox();
TextBox point = new TextBox();
SubjectItem item = new SubjectItem();
//内部管理用
item.id=id;
item.label=label;
item.count=count;
item.point=point;
itemList.add(item);
//UIの設定(画面)
tbl.setWidget(itemNum,0,label);
tbl.setWidget(itemNum,1,count);
tbl.setWidget(itemNum,2,point);
itemNum++;
}
public class SubjectItem {
//本当はアクセッサメソッドを用意したほうが良い
public String id;
public Label label;
public TextBox count,point;
}


2014-12-25

GistのJSONデータからファイル情報を取ってくる(gson利用) ~キーがわからないJSONオブジェクトへのアクセス~

Gist APIを使ってJSON形式でGistのコードスニペットを取ってくるプログラムを書いてるんですが、filesの中身にある各スニペットの情報は、ファイル名がキーになっているので、その中身をどうやって取ってくるか?が悩みどころになります。
解決策は下記の通り。なお、JSONのアクセスにはgsonを利用してます。
JsonObject filesJsonObject = jo.getAsJsonObject("files");
Set<Map.Entry<String, JsonElement>> filesJsonObjectEntrySet = filesJsonObject.entrySet();
for (Map.Entry<String, JsonElement> es : filesJsonObjectEntrySet) {
JsonObject joIn = es.getValue().getAsJsonObject();
    String filename = joIn.getString("filename");
String language =joIn.getString("language");
String rawUrl=joIn.getString("raw_url");
String size=joIn.getString("size");
String type=joIn.getString("type");
}