package com.jeck.microblogging.client;
import java.util.List;
import com.google.gwt.cell.client.ImageResourceCell;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.safehtml.shared.SafeUri;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.view.client.Range;
import com.google.gwt.view.client.RangeChangeEvent;
import com.jeck.microblogging.shared.Blog;
import com.jeck.microblogging.shared.BlogFeature;
import com.jeck.microblogging.shared.Page;
public class Main implements EntryPoint {
private final WeiboListServiceAsync listService = GWT
.create(WeiboListService.class);
private Label countLabel = new Label();
private Label infoLabel = new Label();
private FlowPanel flowPanel = new FlowPanel();
private static final int PAGE_COUNT=50;
private long start = 1;
private long max_id=0;
private int currentPage = 0;
private CellTable<Blog> table;
private void createText(Blog blog,StringBuffer buffer){
buffer.append(blog.getText());
if (blog.getSrcBlog()!=null){
buffer.append("{");
createText(blog.getSrcBlog(), buffer);
buffer.append("}");
}
}
public void onModuleLoad() {
RootPanel rootPanel = RootPanel.get();
rootPanel.add(flowPanel);
Label topLabel = new Label("My Microblogging");
flowPanel.add(topLabel);
table = new CellTable<Blog>();
TextColumn<Blog> textColum = new TextColumn<Blog>() {
@Override
public String getValue(Blog object) {
StringBuffer buffer=new StringBuffer();
createText(object, buffer);
return buffer.toString();
}
};
TextColumn<Blog> authorColum = new TextColumn<Blog>() {
@Override
public String getValue(Blog object) {
return object.getAuthor();
}
};
TextColumn<Blog> createDateColum = new TextColumn<Blog>() {
@Override
public String getValue(Blog object) {
return object.getDate().toString();
}
};
Column<Blog,ImageResource> imageColum =new Column<Blog, ImageResource>(new ImageResourceCell()){
@Override
public ImageResource getValue(final Blog object) {
return new ImageResource(){
@Override
public String getName() {
// TODO Auto-generated method stub
return null;
}
@Override
public int getHeight() {
// TODO Auto-generated method stub
return 100;
}
@Override
public int getLeft() {
// TODO Auto-generated method stub
return 0;
}
@Override
public SafeUri getSafeUri() {
return new SafeUri() {
@Override
public String asString() {
// TODO Auto-generated method stub
return object.getThumbnailPic();
}
};
}
@Override
public int getTop() {
// TODO Auto-generated method stub
return 0;
}
@Override
public String getURL() {
// TODO Auto-generated method stub
return object.getThumbnailPic();
}
@Override
public int getWidth() {
// TODO Auto-generated method stub
return 100;
}
@Override
public boolean isAnimated() {
// TODO Auto-generated method stub
return false;
}
};
}
};
table.addRangeChangeHandler(new RangeChangeEvent.Handler() {
@Override
public void onRangeChange(RangeChangeEvent event) {
getNextPage();
}
});
table.addColumn(authorColum, "Author");
table.addColumn(textColum, "Text");
table.addColumn(imageColum,"Image");
table.addColumn(createDateColum,"Date");
getNextPage();
getBlogCount();
flowPanel.add(table);
}
private void getNextPage() {
currentPage++;
Page page=new Page();
page.setCount(PAGE_COUNT);
if (max_id==0){
page.setSinceId(start);
}else{
page.setMaxId(max_id);
}
page.setPage(currentPage);
getBlogList(page);
}
private void getBlogCount() {
listService.getBlogCount(new AsyncCallback<Long>() {
@Override
public void onSuccess(Long result) {
// TODO Auto-generated method stub
countLabel.setText("Count:" + result);
flowPanel.add(countLabel);
}
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
countLabel.setText("ERROR");
flowPanel.add(countLabel);
}
});
}
private void getBlogList(BlogFeature feature){
Page page=new Page();
page.setCount(PAGE_COUNT);
page.setSinceId(start);
page.setPage(currentPage);
getBlogList(feature, page);
}
private void getBlogList(Page page){
getBlogList(BlogFeature.ALL, page);
}
private void getBlogList(){
getBlogList(BlogFeature.ALL);
}
private void getBlogList(BlogFeature feature,Page page) {
listService.listMyBlogs(page,feature,new AsyncCallback<List<Blog>>() {
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
infoLabel.setText("get data error!");
flowPanel.add(infoLabel);
}
@Override
public void onSuccess(List<Blog> result) {
if (result.size()!=0){
max_id=result.get(result.size()-1).getId();
infoLabel.setText("get data OK! Data size:" + result.size());
flowPanel.add(infoLabel);
SimplePager pager = new SimplePager();
pager.setDisplay(table);
table.setRowCount(result.size(), true);
table.setRowData(result);
table.redraw();
}
}
});
}
}