package com.jcommerce.gwt.client.panels.data;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.store.Record;
import com.extjs.gxt.ui.client.store.StoreEvent;
import com.extjs.gxt.ui.client.store.StoreListener;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Info;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.VerticalPanel;
import com.extjs.gxt.ui.client.widget.form.FileUploadField;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.grid.CheckColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.jcommerce.gwt.client.ContentWidget;
import com.jcommerce.gwt.client.ModelNames;
import com.jcommerce.gwt.client.PageState;
import com.jcommerce.gwt.client.form.BeanObject;
import com.jcommerce.gwt.client.model.IBrand;
import com.jcommerce.gwt.client.resources.Resources;
import com.jcommerce.gwt.client.service.DatebaseRestoreService;
import com.jcommerce.gwt.client.service.PagingListService;
import com.jcommerce.gwt.client.service.DatebaseRestoreService.Listener;
import com.jcommerce.gwt.client.service.DatebaseRestoreService.deleteFileListener;
import com.jcommerce.gwt.client.service.DatebaseRestoreService.restoreFileListener;
import com.jcommerce.gwt.client.widgets.ActionCellRenderer;
public class DatabaseRestore extends ContentWidget {
private PagingToolBar toolBar;
private VerticalPanel vp;
private FlexTable stocksFlexTable = new FlexTable();
private HorizontalPanel addPanel = new HorizontalPanel();
private TextBox newSymbolTextBox = new TextBox();
private Label lastUpdatedLabel = new Label();
private ArrayList<String> stocks = new ArrayList<String>();
private static final int REFRESH_INTERVAL = 5000; // ms
private MessageBox processBar=MessageBox.wait("请等待", "正在还原...", "");
public DatabaseRestore() {
super();
curState = new State();
}
private static DatabaseRestore instance;
public static DatabaseRestore getInstance() {
if (instance == null) {
instance = new DatabaseRestore();
}
return instance;
}
public static class State extends PageState {
public String getPageClassName() {
return DatabaseRestore.class.getName();
}
public String getMenuDisplayName() {
return "数据还原";
}
}
public State getCurState() {
return (State)curState;
}
@Override
public String getDescription() {
return "cwBasicTextDescription";
}
@Override
public String getName() {
return "数据还原";
}
/**
* generate the backup file name based on the time
*/
private String getBackUpFileName() {
return DateTimeFormat.getFormat("yyyyMMddHHmmss").format(new Date());
}
protected void onRender(com.google.gwt.user.client.Element parent, int index) {
super.onRender(parent, index);
vp = new VerticalPanel();
// createGrid();
createBackupPanel();
// 为了调整页面
Label label = new Label("");
label.setPixelSize(100, 40);
Label label2 = new Label("服务器上备份文件");
vp.add(label);
vp.add(label2);
stocksFlexTable.setText(0, 0, "文件名");
stocksFlexTable.setText(0, 1, "大小");
stocksFlexTable.setText(0, 2, "时间");
stocksFlexTable.setText(0, 3, "移除");
stocksFlexTable.setText(0, 4, "导入");
stocksFlexTable.setCellPadding(6);
// Add styles to elements in the stock list table.
stocksFlexTable.getRowFormatter().addStyleName(0, "watchListHeader");
stocksFlexTable.addStyleName("watchList");
stocksFlexTable.getCellFormatter().addStyleName(0, 0, "watchListNumericColumn");
stocksFlexTable.getCellFormatter().addStyleName(0, 1, "watchListNumericColumn");
stocksFlexTable.getCellFormatter().addStyleName(0, 2, "watchListTimeColumn");
stocksFlexTable.getCellFormatter().addStyleName(0, 3, "watchListRemoveColumn");
stocksFlexTable.getCellFormatter().addStyleName(0, 4, "watchListRemoveColumn");
// 提示用户等待
stocksFlexTable.setText(1, 0, "please wait.......");
addPanel.add(stocksFlexTable);
addPanel.addStyleName("addPanel");
//先关闭processBar,不显示
processBar.close();
new DatebaseRestoreService().getAllFileInfo(new Listener() {
public void onSuccess(List<List<String>> success) {
// TODO Auto-generated method stub
stocksFlexTable.clear();
List<List<String>> filesInfo = success;
if (filesInfo.size() == 0) {
stocksFlexTable.setText(1, 0, "没有备份文件");
}
int row = 1;
for (List<String> fileInfo : filesInfo) {
stocksFlexTable.setText(row, 0, fileInfo.get(0));
stocksFlexTable.setText(row, 1, fileInfo.get(1));
stocksFlexTable.setText(row, 2, fileInfo.get(2));
stocksFlexTable.getCellFormatter().addStyleName(row, 0, "watchListNumericColumn");
stocksFlexTable.getCellFormatter().addStyleName(row, 1, "watchListNumericColumn");
stocksFlexTable.getCellFormatter().addStyleName(row, 2, "watchListTimeColumn");
stocksFlexTable.getCellFormatter().addStyleName(row, 3, "watchListRemoveColumn");
stocksFlexTable.getCellFormatter().addStyleName(row, 4, "watchListRemoveColumn");
Button deleteFileButton = new Button("删除");
Button restoreButton = new Button("导入");
stocksFlexTable.setWidget(row, 3, deleteFileButton);
stocksFlexTable.setWidget(row, 4, restoreButton);
row++;
final String fileName = fileInfo.get(0);
stocks.add(fileName);
deleteFileButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent arg0) {
new DatebaseRestoreService().deleteFile(fileName, new deleteFileListener() {
public void onSuccess(String result) {
if (result.equals("success")) {
int removedIndex = stocks.indexOf(fileName);
stocks.remove(removedIndex);
stocksFlexTable.removeRow(removedIndex + 1);
Info.display("恭喜", "删除文件成功");
if (stocksFlexTable.getRowCount() == 1) {
stocksFlexTable.setText(1, 0, "没有备份文件");
}
} else {
Info.display("", "删除文件失败");
}
}
public void onFailure(Throwable caught) {
Info.display("", "系统存在错误");
}
});
}
});
restoreButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent arg0) {
System.out.println("fileName"+fileName);
processBar.show();
new DatebaseRestoreService().restoreFile(fileName, new restoreFileListener() {
public void onSuccess(String result) {
processBar.close();
if (result.equals("success")) {
Info.display("恭喜", "还原数据成功");
}else if(result.equals("UnsupportedEncodingException")) {
Info.display("", "还原数据失败,文件编码类型错误");
}else if(result.equals("IOException")){
Info.display("","还原数据失败,读写文件发生错误");
}else if(result.equals("SQLException")){
Info.display("","还原数据失败,数据操作失败");
}
}
public void onFailure(Throwable caught) {
processBar.close();
Info.display("", "系统存在错误");
}
});
}
});
}
}
});
vp.add(addPanel);
add(vp);
}
private void createGrid() {
BasePagingLoader loader = new PagingListService().getLoader(ModelNames.BRAND);
loader.load(0, 50);
final ListStore<BeanObject> store = new ListStore<BeanObject>(loader);
store.addStoreListener(new StoreListener<BeanObject>() {
public void storeUpdate(StoreEvent<BeanObject> se) {
List<Record> changed = store.getModifiedRecords();
}
});
toolBar = new PagingToolBar(50);
toolBar.bind(loader);
List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
// CheckBoxSelectionModel<BeanObject> sm = new
// CheckBoxSelectionModel<BeanObject>();
// columns.add(sm.getColumn());
columns.add(new ColumnConfig(IBrand.NAME, "品牌名称", 80));
columns.add(new ColumnConfig(IBrand.SITE, "品牌网址", 150));
columns.add(new ColumnConfig(IBrand.DESC, "品牌描述", 230));
columns.add(new ColumnConfig(IBrand.ORDER, "排序", 50));
columns.add(new CheckColumnConfig(IBrand.SHOW, "是否显示", 80));
ColumnConfig actcol = new ColumnConfig("Action", "操作", 140);
columns.add(actcol);
ColumnModel cm = new ColumnModel(columns);
Grid<BeanObject> grid = new Grid<BeanObject>(store, cm);
grid.setLoadMask(true);
grid.setBorders(true);
// grid.setSelectionModel(sm);
// grid.setAutoExpandColumn("forum");
ActionCellRenderer render = new ActionCellRenderer(grid);
ActionCellRenderer.ActionInfo act = new ActionCellRenderer.ActionInfo();
act.setText("编辑 ");
act.setAction("changeBrand($id)");
act.setTooltip(Resources.constants.GoodsList_action_edit());
render.addAction(act);
act = new ActionCellRenderer.ActionInfo();
act.setText(" 删除");
act.setAction("deleteBrand($id)");
act.setTooltip(Resources.constants.GoodsList_action_delete());
render.addAction(act);
actcol.setRenderer(render);
ContentPanel panel = new ContentPanel();
panel.setFrame(true);
panel.setCollapsible(true);
panel.setAnimCollapse(false);
panel.setButtonAlign(HorizontalAlignment.CENTER);
panel.setIconStyle("icon-table");
panel.setHeading("Paging Grid");
panel.setLayout(new FitLayout());
panel.add(grid);
panel.setSize(750, 350);
panel.setBottomComponent(toolBar);
panel.setButtonAlign(HorizontalAlignment.CENTER);
vp.add(panel);
}
private void createBackupPanel() {
FormPanel panel = new FormPanel();
// Label label=new Label();
// panel.setHeading("恢复备份");
panel.setHeaderVisible(false);
panel.setPadding(10);
// panel.add(label);
FileUploadField file = new FileUploadField();
file.setAllowBlank(false);
file.setFieldLabel("本地sql文件");
panel.add(file);
Button btn = new Button("上传并执行sql文件");
btn.setPixelSize(150, 25);
panel.add(btn);
vp.add(panel);
}
}