package edu.purdue.pivot.skwiki.client.rpccalls;
import java.util.ArrayList;
import java.util.Date;
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.i18n.client.TimeZone;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import edu.purdue.pivot.skwiki.client.CheckoutServiceAsync;
import edu.purdue.pivot.skwiki.client.PreviewWidget;
import edu.purdue.pivot.skwiki.client.SkwikiEntryPoint;
import edu.purdue.pivot.skwiki.client.WidgetManager;
import edu.purdue.pivot.skwiki.shared.DataPack;
import edu.purdue.pivot.skwiki.shared.RevisionHistory;
public class CheckoutHandler implements ClickHandler {
ListBox revisionList;
ArrayList<RevisionHistory> revisionHistory;
WidgetManager widgets;
PreviewWidget preview;
CheckoutServiceAsync checkoutService;
TextBox Log;
SkwikiEntryPoint skWiki;
public CheckoutHandler(SkwikiEntryPoint skWiki,
CheckoutServiceAsync checkoutService, ListBox revisionList,
ArrayList<RevisionHistory> revisionHistory, WidgetManager widgets,
PreviewWidget preview, TextBox Log) {
this.checkoutService = checkoutService;
this.revisionList = revisionList;
this.revisionHistory = revisionHistory;
this.widgets = widgets;
this.preview = preview;
//this.entityList = entityList;
this.Log = Log;
this.skWiki = skWiki;
}
public void add_to_workspace() {
sendToServer(false, revisionList.getSelectedIndex() + 1, preview, true);
}
PreviewWidget previewWidget;
public void onClick(ClickEvent event, Boolean previewFlag) {
sendToServer(previewFlag, revisionList.getSelectedIndex() + 1, preview);
}
// public void checkout(PreviewWidget previewWidget, int revision) {
// ClickEvent event = null;
// // revisionList.setSelectedIndex(revision - 1);
// sendToServer(true, revision, previewWidget);
// System.out.println(" Revision ID checkout for preview is " + revision);
// }
@Override
public void onClick(ClickEvent event) {
//Window.alert("Item count "+(revisionList.getSelectedIndex() + 1));
sendToServer(false, revisionList.getSelectedIndex() + 1, preview);
}
public void sendToServer(Boolean previewFlg, int selectedRev,
PreviewWidget previewWid) {
final int selectedRevision = selectedRev;
final PreviewWidget previewWidget = previewWid;
final Boolean previewFlag = previewFlg;
DataPack packtoSend = new DataPack();
//Window.alert("Selected revision is: " + (revisionList.getSelectedIndex() + 1));
int wantedRevision = revisionHistory.get(revisionList.getSelectedIndex()).getRevision();
packtoSend.updateRevision = wantedRevision;// revisionList.getSelectedIndex()+1;
packtoSend.projectName = skWiki.current_project_name;
if(packtoSend.updateRevision<0)
{
//Window.alert("please a revision");
return;
}
packtoSend.id = revisionHistory.get(revisionList.getSelectedIndex() ).getId();
//TODO <chageAuto>
//packtoSend.nonWholeSequence_id = skWiki.subrevisionList.getSelectedIndex();
try {
// ServiceDefTarget endpoint = (ServiceDefTarget)
// checkoutService;
// PhonegapUtil.prepareService(endpoint,
// "http://127.0.0.1:8080/Skwiki/skWiki/", "checkout");
checkoutService.checkout(packtoSend, new AsyncCallback<DataPack>() {
@Override
public void onFailure(Throwable caught) {
// Show the RPC error message to the user
Log.setText("GWT ERROR: Failed to call server -- SERVER_ERROR"
+ caught);
}
@Override
public void onSuccess(DataPack result) {
Date date = new Date();
DateTimeFormat dtf = DateTimeFormat
.getFormat("yyyy/MM/dd:HH:mm:ss");
Log.setText("GWT Success: Successfully checked-out data at "
+ dtf.format(date, TimeZone.createTimeZone(240)));
// ******* update where this current revison is
// from
if (previewFlag == false) {
// clean up all records
//Window.alert(skWiki.fromRevision+","+selectedRev);
Window.alert("Sketch Downloaded");
skWiki.fromRevision = revisionList.getSelectedIndex() + 1;
skWiki.fromUID = result.fromUID;
// create new layout
widgets.updateLayoutList(result.layoutHistoryList);
preview.clearContent();
widgets.clear();
// create new layout
widgets.updateLayoutTree(result.layoutHistoryList,
result);
// update the entities
updateEntityList(result);
widgets.updateEditors(result);
widgets.shiftEntities();
} else {
System.out.println(" Path viewer response "
+ selectedRevision);
previewWidget.createPreviewLayout(
result.layoutHistoryList, result);
}
}
});
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
public void sendToServer(Boolean previewFlg, int selectedRev,
PreviewWidget previewWid, Boolean copy2) {
final int selectedRevision = selectedRev;
final PreviewWidget previewWidget = previewWid;
final Boolean previewFlag = previewFlg;
DataPack packtoSend = new DataPack();
//Window.alert("Selected revision is: " + (revisionList.getSelectedIndex() + 1));
int wantedRevision = revisionHistory.get(revisionList.getSelectedIndex()).getRevision();
packtoSend.updateRevision = wantedRevision;// revisionList.getSelectedIndex()+1;
packtoSend.projectName = skWiki.current_project_name;
if(packtoSend.updateRevision<0)
{
//Window.alert("please a revision");
return;
}
packtoSend.id = revisionHistory.get(revisionList.getSelectedIndex() ).getId();
final Boolean copy = copy2;
try {
// ServiceDefTarget endpoint = (ServiceDefTarget)
// checkoutService;
// PhonegapUtil.prepareService(endpoint,
// "http://127.0.0.1:8080/Skwiki/skWiki/", "checkout");
checkoutService.checkout(packtoSend, new AsyncCallback<DataPack>() {
@Override
public void onFailure(Throwable caught) {
// Show the RPC error message to the user
Log.setText("GWT ERROR: Failed to call server -- SERVER_ERROR"
+ caught);
}
@Override
public void onSuccess(DataPack result) {
Date date = new Date();
DateTimeFormat dtf = DateTimeFormat
.getFormat("yyyy/MM/dd:HH:mm:ss");
Log.setText("GWT Success: Successfully checked-out data at "
+ dtf.format(date, TimeZone.createTimeZone(240)));
// ******* update where this current revison is
// from
if (previewFlag == false) {
// clean up all records
preview.clearContent();
if (!copy) {
skWiki.fromRevision = revisionList.getSelectedIndex() + 1;
skWiki.fromUID = result.fromUID;
widgets.clear();
// create new layout
widgets.updateLayoutList(result.layoutHistoryList);
widgets.updateLayoutTree(result.layoutHistoryList,
result);
// update the entities
updateEntityList(result);
widgets.updateEditors(result);
widgets.shiftEntities();
} else {
widgets.updateLayoutTree2(result.layoutHistoryList,
result);
}
} else {
System.out.println(" Path viewer response "
+ selectedRevision);
previewWidget.createPreviewLayout(
result.layoutHistoryList, result);
}
}
});
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
private void updateEntityList(DataPack result) {
// for (MyTextEditor tempTextEditor : widgets.textEditors) {
// entityList.addItem(tempTextEditor.toString());
// }
// // ******** commit all canvas editors
//
// for (MyCanvasEditor tempCanvasEditor : widgets.canvasEditors) {
// entityList.addItem(tempCanvasEditor.toString());
// }
}
}