package tv.dyndns.kishibe.qmaclone.client.setting;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import tv.dyndns.kishibe.qmaclone.client.Controller;
import tv.dyndns.kishibe.qmaclone.client.Service;
import tv.dyndns.kishibe.qmaclone.client.packet.PacketImageLink;
import tv.dyndns.kishibe.qmaclone.client.report.LinkColumn;
import tv.dyndns.kishibe.qmaclone.client.report.SafeHtmlColumn;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.cell.client.ValueUpdater;
import com.google.gwt.core.client.GWT;
import com.google.gwt.safehtml.client.SafeHtmlTemplates;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.safehtml.shared.SafeUri;
import com.google.gwt.safehtml.shared.UriUtils;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.Header;
import com.google.gwt.user.cellview.client.TextHeader;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.view.client.ListDataProvider;
public class CellTableImageLink extends CellTable<PacketImageLink> {
private static final Logger logger = Logger.getLogger(CellTableImageLink.class.getName());
private final ListDataProvider<PacketImageLink> dataProvider = new ListDataProvider<PacketImageLink>();
public interface CellTableImageLinkTemplates extends SafeHtmlTemplates {
@Template("<a href='{0}'>{1}</a>")
SafeHtml link(SafeUri url, String urlToShow);
}
private static final CellTableImageLinkTemplates TEMPLATES = GWT
.create(CellTableImageLinkTemplates.class);
public CellTableImageLink() {
super(100, GWT.<CellTable.BasicResources> create(CellTable.BasicResources.class));
Service.Util.getInstance().getWrongImageLinks(new AsyncCallback<List<PacketImageLink>>() {
@Override
public void onSuccess(List<PacketImageLink> result) {
dataProvider.setList(result);
}
@Override
public void onFailure(Throwable caught) {
logger.log(Level.WARNING, "画像リンク一覧の取得に失敗しました", caught);
}
});
dataProvider.addDataDisplay(this);
// 問題番号
addColumn(new TextHeader("問題番号"), null, new LinkColumn<PacketImageLink>() {
@Override
public String getValue(PacketImageLink object) {
return Integer.toString(object.problemId);
}
}, new FieldUpdater<PacketImageLink, String>() {
@Override
public void update(int index, PacketImageLink object, String value) {
Controller.getInstance().showCreationProblem(object.problemId);
}
});
// 画像リンク
addColumn(new TextHeader("画像リンク"), null, new SafeHtmlColumn<PacketImageLink>() {
@Override
public SafeHtml getValue(PacketImageLink object) {
String urlToShow = object.url;
if (urlToShow.length() > 50) {
urlToShow = urlToShow.substring(0, 20) + " ... "
+ urlToShow.substring(urlToShow.length() - 25, urlToShow.length());
}
return TEMPLATES.link(UriUtils.fromString(object.url), urlToShow);
}
}, null);
// ステータスコード
addColumn(new TextHeader("ステータスコード"), null, new SafeHtmlColumn<PacketImageLink>() {
@Override
public SafeHtml getValue(PacketImageLink object) {
return SafeHtmlUtils.fromString(Integer.toString(object.statusCode));
}
}, null);
}
private <C, S> void addColumn(Header<C> header, ValueUpdater<C> valueUpdater,
Column<PacketImageLink, S> column, FieldUpdater<PacketImageLink, S> fieldUpdater) {
header.setUpdater(valueUpdater);
column.setFieldUpdater(fieldUpdater);
addColumn(column, header);
}
}