package edu.purdue.pivot.skwiki.client; import java.util.ArrayList; import java.util.Date; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; 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.cellview.client.CellTable; import com.google.gwt.user.cellview.client.TextColumn; import com.google.gwt.user.client.Cookies; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AbsolutePanel; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.ToggleButton; import com.google.gwt.user.client.ui.Label; //import com.googlecode.gwtphonegap.client.PhoneGap; //import com.googlecode.gwtphonegap.client.PhoneGapAvailableEvent; //import com.googlecode.gwtphonegap.client.PhoneGapAvailableHandler; //import com.googlecode.gwtphonegap.client.PhoneGapTimeoutEvent; //import com.googlecode.gwtphonegap.client.PhoneGapTimeoutHandler; import edu.purdue.pivot.skwiki.client.image.MyImageViewer; import edu.purdue.pivot.skwiki.client.pathviewer.PathViewer; import edu.purdue.pivot.skwiki.client.pathviewer.PathViewerFullScreen; import edu.purdue.pivot.skwiki.client.rpccalls.CheckoutHandler; import edu.purdue.pivot.skwiki.client.sketch.MyCanvasEditor; import edu.purdue.pivot.skwiki.client.text.MyTextEditor; import edu.purdue.pivot.skwiki.shared.DataPack; import edu.purdue.pivot.skwiki.shared.ProjectPack; import edu.purdue.pivot.skwiki.shared.RevisionHistory; import edu.purdue.pivot.skwiki.shared.SearchTagResult; import edu.purdue.pivot.skwiki.shared.UUID; import edu.purdue.pivot.skwiki.shared.UserPack; import com.google.gwt.view.client.SelectionChangeEvent; import com.google.gwt.view.client.SingleSelectionModel; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.HeaderControls; import com.smartgwt.client.types.Side; import com.smartgwt.client.util.BooleanCallback; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.HeaderControl; import com.smartgwt.client.widgets.ImgButton; import com.smartgwt.client.widgets.events.CloseClickEvent; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.tab.Tab; import com.smartgwt.client.widgets.tab.TabSet; public class SkwikiEntryPoint implements EntryPoint { int latestRevision = 0; int revisionListItemCount = 1; final ListBox revisionList = new ListBox(); public final ListBox subrevisionList = new ListBox(); // cookies public static final int COOKIE_EXPIRE_DAYS = 3; public static final long MILLISECS_PER_DAY = 1000L * 60L * 60L * 24L; private String uid = ""; public String fromUID = ""; public String current_project_name = "postchi_testing"; // from revision public int fromRevision = 0; // Panels RootPanel rootPanel; ScrollPanel wikiPanel; public PreviewWidget preview; String name; public TextBox Log = new TextBox(); // Last save Date lastTime = new Date(); public final static long SECOND_MILLIS = 1000; public final static long MINUTE_MILLIS = SECOND_MILLIS * 60; // Widget manager public WidgetManager widgets; // Tag system private ToggleButton tagViewButton = new ToggleButton("TagViewer", "Editor Panel"); private ToggleButton maskOnButton = new ToggleButton("Filter off", "Filter on"); final ArrayList<RevisionHistory> revisionHistory = new ArrayList<RevisionHistory>(); private Button getAllRevButton = new Button("Entity Revisions"); final ArrayList<SearchTagResult> allRevHistory = new ArrayList<SearchTagResult>(); final TagViewer tagViewer = new TagViewer(); // public final ListBox entityList = new ListBox(); public ListGrid entityList = new ListGrid(); final ListBox allRevList = new ListBox(); // pathviewer PathViewer pathViewer; PathViewerFullScreen pathViewer2; // comment box final TextBox commentText = new TextBox(); final TextBox tagText = new TextBox(); // commit private final CommitServiceAsync commitService = GWT .create(CommitService.class); // checkout public final CheckoutServiceAsync checkoutService = GWT .create(CheckoutService.class); // checkID private final CheckIDServiceAsync checkIDService = GWT .create(CheckIDService.class); // search tag private final SearchTagServiceAsync searchTagService = GWT .create(SearchTagService.class); // search all rev private final GetAllRevServiceAsync getAllRevService = GWT .create(GetAllRevService.class); // create Project private final CreateProjectServiceAsync createProjectRevService = GWT .create(CreateProjectService.class); private final CommitHandler myCommitHandler = new CommitHandler(); private CheckoutHandler myCheckoutHandler; // get cookie! private String getCookieName() { if (Cookies.getCookie("name") == null) return getUsername(); else return Cookies.getCookie("name"); } private void setCookieName(String name) { Date now = new Date(); long nowLong = now.getTime(); nowLong = nowLong + COOKIE_EXPIRE_DAYS * MILLISECS_PER_DAY;// three days now.setTime(nowLong); Cookies.setCookie("name", name, now); } private native String getUsername()/*-{ return $wnd.jQuery("#username-field-value").val(); }-*/; private native String getPassword()/*-{ return $wnd.jQuery("#password-field-value").val(); }-*/; private native String getRetypePassword()/*-{ return $wnd.jQuery("#newuser-password-field-value").val(); }-*/; private native void vanishLoginScreen() /*-{ $wnd.jQuery("#container").fadeOut("slow"); $wnd.jQuery("#header-options").fadeIn(300); }-*/; private native void appearLoginScreen() /*-{ $wnd.jQuery("#container").fadeIn(300); $wnd.jQuery("#header-options").fadeOut("slow"); $wnd.jQuery("#project-viewer").fadeOut("slow"); }-*/; private native void displayProjectViewer(String uid) /*-{ $wnd.jQuery("#project-viewer").fadeIn(300); $wnd.jQuery("#skwiki-viewer").fadeOut("slow"); $wnd.jQuery("#project-viewer-username-text").text("Hi " + uid); }-*/; private native void displaySkwikiViewer() /*-{ $wnd.jQuery("#skwiki-viewer").fadeIn(300); $wnd.jQuery("#project-viewer").fadeOut("slow"); }-*/; private native boolean checkLoginExistingUser() /*-{ if ($wnd.jQuery(".login").text() === "SKWIKI LOGIN") { return true; } else if ($wnd.jQuery(".login").text() === "SKWIKI NEW USER LOGIN") { return false; } }-*/; private native void attachProjectBrowseHandler(SkwikiEntryPoint _self) /*-{ $wnd .jQuery("#options-button") .click( function() { if ($wnd.jQuery("#options-button-text").text() === "All Projects") { _self.@edu.purdue.pivot.skwiki.client.SkwikiEntryPoint::showProjectDetails()(); $wnd.jQuery("#options-button-text").text( "skWiki View"); } else if ($wnd.jQuery("#options-button-text") .text() === "skWiki View") { $wnd.jQuery("#skwiki-viewer").fadeIn(300); $wnd.jQuery("#project-viewer").fadeOut("slow"); $wnd.jQuery("#options-button-text").text( "All Projects"); } }); }-*/; private native void attachNewProjectCreateHandler(SkwikiEntryPoint _self) /*-{ $wnd .jQuery("#new-project-form-submit") .click( function() { _self.@edu.purdue.pivot.skwiki.client.SkwikiEntryPoint::newProjectHandler()(); $wnd.jQuery("#new-project-form").fadeOut(500); }); }-*/; public native String newProjectName() /*-{ return $wnd.jQuery("#new-project-name").val().toLowerCase(); }-*/; public native String newProjectDetails() /*-{ return $wnd.jQuery("#new-project-details").val(); }-*/; public void showProjectDetails() { displayProjectViewer(uid); RootPanel userpanel = RootPanel.get("project-viewer-user-list"); userpanel.clear(); RootPanel projectPanel = RootPanel.get("project-viewer-project-list"); projectPanel.clear(); showUserList(); showProjectList(); } public void newProjectHandler() { final String projectName = newProjectName(); String projectDescription = newProjectDetails(); DataPack packtoSend = new DataPack(); ProjectPack tempProjecPack1 = new ProjectPack(projectName, projectDescription); packtoSend.projectInfo = tempProjecPack1; packtoSend.id = uid; try { createProjectRevService.createProject(packtoSend, new AsyncCallback<DataPack>() { public void onFailure(Throwable caught) { // Show the RPC error message to the user } public void onSuccess(DataPack result) { if (result.isSuccess == true) { System.out.println("created new project"); } current_project_name = projectName; // Console.log("user"+result.projectInfo.projectNameList.size()); } }); } catch (IllegalArgumentException e) { e.printStackTrace(); } } public void loginClickHandler() { if (getUsername().equals("") || getPassword().equals("")) { Window.alert("Wrong User name or Password"); return; } String username = getUsername(); String password = getPassword(); if (checkLoginExistingUser() == true) { loginExistingUser(username, password); } else { String retypedPassword = getRetypePassword(); if (password == retypedPassword) { loginNewUser(username, password); } else { Window.alert("Password Mismatch"); return; } } } public Boolean loginNewUser(String username, String password) { DataPack packtoSend = new DataPack(); packtoSend.projectName = "ME444"; UserPack tempProjectPack = new UserPack(username, password); packtoSend.userInfo = tempProjectPack; final String username2 = username; try { createProjectRevService.createUser(packtoSend, new AsyncCallback<DataPack>() { public void onFailure(Throwable caught) { // Show the RPC error message to the user Window.alert("Login failed, please try again later."); } public void onSuccess(DataPack result) { if (result.isSuccess == true) { setCookieName(username2); uid = username2; fromUID = uid; vanishLoginScreen(); onModuleLoad2(); } else { Window.alert("Login failed, please try again later."); } } }); } catch (IllegalArgumentException e) { e.printStackTrace(); } return true; } public Boolean loginExistingUser(String username, String password) { DataPack packtoSend = new DataPack(); packtoSend.projectName = "postchi_testing"; UserPack tempProjectPack = new UserPack(username, password); packtoSend.userInfo = tempProjectPack; final String username2 = username; try { createProjectRevService.authenticate(packtoSend, new AsyncCallback<DataPack>() { public void onFailure(Throwable caught) { // Show the RPC error message to the user Window.alert("Login failed, please try again later."); } public void onSuccess(DataPack result) { if (result.userInfo.authSuccess == true) { setCookieName(username2); uid = username2; fromUID = uid; vanishLoginScreen(); onModuleLoad2(); } else { Window.alert("Login failed, Wrong username or password."); } } }); } catch (IllegalArgumentException e) { e.printStackTrace(); } return true; } public Boolean showProjectList() { DataPack packtoSend = new DataPack(); try { createProjectRevService.getAllProjectList(packtoSend, new AsyncCallback<DataPack>() { public void onFailure(Throwable caught) { // Show the RPC error message to the user Window.alert("Failed to load user list"); } public void onSuccess(DataPack result) { ArrayList<String> projectList = result.projectInfo.projectNameList; ArrayList<String> projectDescList = result.projectInfo.projectDescripList; RootPanel projectPanel = RootPanel .get("project-viewer-project-list"); final ListGrid listGrid = new ListGrid(); listGrid.setWidth(projectPanel.getOffsetWidth()); listGrid.setHeight(projectPanel.getOffsetHeight()); ListGridField projectField = new ListGridField( "projectNames", "Projects", projectPanel .getOffsetWidth() / 2); projectField.setAlign(Alignment.CENTER); ListGridField descField = new ListGridField( "projectDesc", "Description", projectPanel .getOffsetWidth() / 2); descField.setAlign(Alignment.CENTER); listGrid.setFields(projectField, descField); listGrid.draw(); ListGridRecord[] records = new ListGridRecord[projectList .size()]; for (int index = 0; index < projectList.size(); index++) { ListGridRecord projectRecord = new ListGridRecord(); projectRecord.setAttribute("projectNames", projectList.get(index)); projectRecord.setAttribute("projectDesc", projectDescList.get(index)); records[index] = projectRecord; } listGrid.setData(records); projectPanel.add(listGrid); } }); } catch (IllegalArgumentException e) { e.printStackTrace(); } return true; } public Boolean showUserList() { DataPack packtoSend = new DataPack(); packtoSend.projectName = current_project_name; packtoSend.updateRevision = fromRevision; try { createProjectRevService.getAllUserList(packtoSend, new AsyncCallback<DataPack>() { public void onFailure(Throwable caught) { // Show the RPC error message to the user Window.alert("Failed to load user list"); } public void onSuccess(DataPack result) { ArrayList<String> userList = result.userInfo.userList; RootPanel userPanel = RootPanel .get("project-viewer-user-list"); final ListGrid listGrid = new ListGrid(); listGrid.setWidth(userPanel.getOffsetWidth()); listGrid.setHeight(userPanel.getOffsetHeight()); ListGridField userField = new ListGridField( "userNames", "Users", userPanel .getOffsetWidth()); userField.setAlign(Alignment.CENTER); listGrid.setFields(userField); listGrid.draw(); ListGridRecord[] records = new ListGridRecord[userList .size()]; // create List of users int index = 0; for (String user : userList) { ListGridRecord userId = new ListGridRecord(); userId.setAttribute("userNames", user); records[index] = userId; index++; } listGrid.setData(records); userPanel.add(listGrid); } }); } catch (IllegalArgumentException e) { e.printStackTrace(); } return true; } public void logoutClickHandler() { Cookies.removeCookie("name"); uid = ""; fromRevision = 0; revisionHistory.clear(); revisionList.clear(); widgets.clear(); isLoggedIn = false; appearLoginScreen(); rootPanel.clear(); } private static native void attachLoginHandler(SkwikiEntryPoint _self) /*-{ $wnd .jQuery("#submit-button") .click( function() { _self.@edu.purdue.pivot.skwiki.client.SkwikiEntryPoint::loginClickHandler()(); }); }-*/; private static native void attachLogoutHandler(SkwikiEntryPoint _self) /*-{ $wnd .jQuery("#logout-button") .click( function() { _self.@edu.purdue.pivot.skwiki.client.SkwikiEntryPoint::logoutClickHandler()(); }); }-*/; @Override public void onModuleLoad() { attachLoginHandler(this); attachLogoutHandler(this); attachProjectBrowseHandler(this); attachNewProjectCreateHandler(this); // get the cookie uid = getCookieName(); fromUID = uid; if (!uid.equals("")) { isLoggedIn = true; } // show login page if (isLoggedIn == false) { } else { vanishLoginScreen(); onModuleLoad2(); } } Boolean isLoggedIn = false; // settings panels on UI FlexTable menuPanel; VLayout navigationPanel; public void onModuleLoad2() { // tagviewer tagViewButton.addClickHandler(new TagViewerToggle()); // root Panel rootPanel = RootPanel.get("skwiki-viewer"); // rootPanel.setStylePrimaryName("gwt-RootPanelWidget"); final int windowWidth = Window.getClientWidth() - 20; final int windowHeight = Window.getClientHeight() - 80; // rootPanel.setSize(windowWidth + "px", windowHeight + "px"); // main panel wikiPanel = new ScrollPanel(); wikiPanel.setStyleName("gwt-PanelWidget"); // wikiPanel.setSize(windowWidth + "px", windowHeight + "px"); rootPanel.add(wikiPanel); // Widget Manager widgets = new WidgetManager(wikiPanel, windowWidth, windowHeight, uid, entityList); // create options panel on the left menuPanel = new FlexTable(); menuPanel.setStyleName("gwt-MenuPanel"); // save option to save current ImgButton save_button = new ImgButton(); save_button.setWidth(48); save_button.setHeight(48); save_button.setLabelHPad(5); save_button.setLabelVPad(10); save_button.setStyleName("gwt-ButtonWidget"); save_button.setSrc("save.png"); save_button.setShadowDepth(1); menuPanel.setWidget(0, 0, save_button); save_button .addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { // Window.alert("Save Option Clicked"); SC.confirm("Sketch will be saved on the server", new BooleanCallback() { @Override public void execute(Boolean value) { if (value != null && value) { myCommitHandler.onClick(null); } else { } } }); } }); // // Send the page as a link // Image link_image = new Image("images/link.png"); // Button send_link = new Button(); // send_link.getElement().appendChild(link_image.getElement()); // optionsPanel.add(send_link); // send_link.setStyleName("gwt-ButtonWidget"); // send_link.setSize(65 + "px", 65 + "px"); // menuPanel.setWidget(1, 0, send_link); // Drawing canvas ImgButton canvas_button = new ImgButton(); canvas_button.setWidth(48); canvas_button.setHeight(48); canvas_button.setStyleName("gwt-ButtonWidget"); canvas_button.setSrc("canvas.png"); canvas_button.setLabelHPad(5); canvas_button.setLabelVPad(10); canvas_button.setShadowDepth(1); menuPanel.setWidget(1, 0, canvas_button); canvas_button .addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { // Window.alert("Canvas selected"); String canvasEditorUUID = UUID.uuid(8, 16); widgets.addCanvas("Canvas" + canvasEditorUUID, 1); // rootPanel.setWidgetPosition(menuPanel, 10, // windowHeight // / 2 - menuPanel.getOffsetHeight() / 2); } }); menuPanel.setWidget(4, 0, widgets.settings_panel); // text ImgButton text_button = new ImgButton(); text_button.setWidth(48); text_button.setHeight(48); // text_button.setStyleName("gwt-ButtonWidget"); text_button.setSrc("text.png"); text_button.setShadowSoftness(6); text_button.setShadowOffset(16); text_button.updateShadow(); text_button.setLabelHPad(5); text_button.setLabelVPad(10); menuPanel.setWidget(2, 0, text_button); text_button .addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { // Window.alert("Text selected"); String textEditorUUID = UUID.uuid(8, 16); widgets.addTextBox("Text" + textEditorUUID, 1); } }); // vector // Image vector_image = new Image("images/vector.png"); // Button vector = new Button(); // vector.setStyleName("gwt-ButtonWidget"); // optionsPanel.add(vector); // vector.getElement().appendChild(vector_image.getElement()); // vector.setSize(65 + "px", 65 + "px"); // menuPanel.setWidget(2, 1, vector); // // vector.addClickHandler(new ClickHandler() { // @Override // public void onClick(ClickEvent event) { // String vectorEditorUUID = UUID.uuid(8, 16); // widgets.addVector(); // } // // }); // // image ImgButton image_button = new ImgButton(); image_button.setWidth(48); image_button.setHeight(48); image_button.setSrc("image.png"); image_button.setShadowSoftness(6); image_button.setShadowOffset(16); image_button.updateShadow(); image_button.setLabelHPad(5); image_button.setLabelVPad(10); menuPanel.setWidget(3, 0, image_button); // Image image_image = new Image("images/image.png"); // Button image = new Button(); // image.getElement().appendChild(image_image.getElement()); // image.setStyleName("gwt-ButtonWidget"); // image.setSize(65 + "px", 65 + "px"); // menuPanel.setWidget(2, 2, image); image_button .addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { String imageEditorUUID = UUID.uuid(8, 16); widgets.addImage("Image" + imageEditorUUID); } }); // path viewer preview = new PreviewWidget(windowWidth / 4, windowHeight / 4, (float) 1 / 4, (float) 1 / 4, windowWidth, windowHeight); // communication and RPC calls myCheckoutHandler = new CheckoutHandler(this, checkoutService, revisionList, revisionHistory, widgets, preview, Log); // clone a different revision ImgButton clone_button = new ImgButton(); clone_button.setWidth(30); clone_button.setHeight(30); clone_button.setSrc("clone.png"); // ask if the user wants to clone or merge VLayout confirmclone = new VLayout(); com.smartgwt.client.widgets.Button confirm_yes = new com.smartgwt.client.widgets.Button( "Copy and merge into current layout"); com.smartgwt.client.widgets.Button confirm_no = new com.smartgwt.client.widgets.Button( "Copy into a new layout (Warning! Current work will be lost!)"); com.smartgwt.client.widgets.Button confirm_cancel = new com.smartgwt.client.widgets.Button( "Cancel"); confirm_no.setWidth(400); confirm_no.setHeight(30); confirm_yes.setWidth(confirm_no.getWidth()); confirm_yes.setHeight(30); confirm_cancel.setWidth(confirm_no.getWidth()); confirm_cancel.setHeight(30); confirmclone.addMember(confirm_yes); confirmclone.addMember(confirm_no); confirmclone.addMember(confirm_cancel); final com.smartgwt.client.widgets.Window confirm_clone_win = new com.smartgwt.client.widgets.Window(); confirm_clone_win.setTitle("Confirm Clone"); confirm_clone_win.setAutoSize(true); confirm_clone_win.addItem(confirmclone); // final DialogBox confirm_clone_dialog = new DialogBox(); // confirm_clone_dialog.setAutoHideEnabled(true); // confirm_clone_dialog.add(confirmclone); confirm_yes .addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { myCheckoutHandler.add_to_workspace(); confirm_clone_win.hide(); } }); confirm_no .addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { myCheckoutHandler.onClick(null); confirm_clone_win.hide(); } }); confirm_cancel .addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { confirm_clone_win.hide(); } }); clone_button .addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { confirm_clone_win.show(); confirm_clone_win.centerInPage(); } }); pathViewer = new PathViewer(this, revisionHistory, myCheckoutHandler, uid, revisionList, windowWidth, windowHeight); pathViewer2 = new PathViewerFullScreen(this, revisionHistory, myCheckoutHandler, uid, revisionList, windowWidth - 100, windowHeight - 100); // a wrap up for menuPanel // expand panel final ImgButton expandpanel_button = new ImgButton(); expandpanel_button.setWidth(25); expandpanel_button.setHeight(50); expandpanel_button.setSrc("arrow-right.png"); expandpanel_button.setStyleName("gwt-ButtonWidget3"); menuPanel.setStyleName("gwt-MenuWidget"); menuPanel.setVisible(false); rootPanel.add(expandpanel_button, 0, windowHeight / 2 - 22); expandpanel_button .addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { if (menuPanel.getOffsetHeight() == 0 && menuPanel.getOffsetWidth() == 0) { menuPanel.setVisible(true); rootPanel.setWidgetPosition(expandpanel_button, menuPanel.getOffsetWidth(), windowHeight / 2 - 22); expandpanel_button.setSrc("arrow-left.png"); rootPanel.setWidgetPosition( menuPanel, 0, windowHeight / 2 - menuPanel.getOffsetHeight() / 2); } else { menuPanel.setVisible(false); expandpanel_button.getElement().getStyle() .setZIndex(2); rootPanel.setWidgetPosition(expandpanel_button, 0, windowHeight / 2 - 22); expandpanel_button.setSrc("arrow-right.png"); } } }); menuPanel.getElement().getStyle().setZIndex(3); rootPanel.add(menuPanel, 0, windowHeight / 2 - 50); // create a new pathviewer panel final com.smartgwt.client.widgets.Window pathViewerWin = new com.smartgwt.client.widgets.Window(); pathViewerWin.setWidth(windowWidth); pathViewerWin.setHeight(windowHeight); pathViewerWin.setTitle("Path Viewer"); pathViewerWin.setShowMinimizeButton(true); // pathPopUp = new DialogBox(); ScrollPanel path = new ScrollPanel(); path.add(pathViewer2); pathViewer2.setVisible(true); path.setHeight((windowHeight - 40) + "px"); path.setWidth((windowWidth - 30) + "px"); pathViewerWin.addItem(path); // refresh for this // close_button_for_path.addClickHandler(new ClickHandler() { // @Override // public void onClick(ClickEvent event) { // pathPopUp.hide(); // } // }); /* refresh button for thumbnail path viewer */ HeaderControl refresh = new HeaderControl(HeaderControl.REFRESH, new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { new CheckIDHandler().onClick(null); pathViewer2.setPathViewer(); pathViewer2.setVisible(true); } }); refresh.setWidth(25); refresh.setHeight(25); // Show options in path viewer VLayout buttonPanel = new VLayout(); // buttonPanel.setShowEdges(true); buttonPanel.setMembersMargin(10); buttonPanel.setLayoutMargin(2); ImgButton refresh_button = new ImgButton(); refresh_button.setWidth(30); refresh_button.setHeight(30); refresh_button.setLabelHPad(5); refresh_button.setLabelVPad(10); refresh_button.setStyleName("gwt-ButtonNavigation"); refresh_button.setSrc("refresh.png"); refresh_button.setShadowDepth(1); refresh_button .addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { new CheckIDHandler().onClick(null); // pathViewer.setPathViewer(); pathViewer.setVisible(true); } }); ImgButton fullscreen_button = new ImgButton(); fullscreen_button.setWidth(30); fullscreen_button.setHeight(30); fullscreen_button.setLabelHPad(5); fullscreen_button.setLabelVPad(10); fullscreen_button.setSrc("fullscreen.png"); fullscreen_button.setShadowDepth(1); fullscreen_button .addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { new CheckIDHandler().onClick(null); pathViewer2.setPathViewer(); pathViewer2.setVisible(true); pathViewerWin.show(); pathViewerWin.maximize(); pathViewerWin.getHeader().setHeight(28); } }); //buttonPanel.addMember(refresh_button); //buttonPanel.addMember(fullscreen_button); buttonPanel.addMember(clone_button); // new path viewer final ImgButton expandpanel_button2 = new ImgButton(); expandpanel_button2.setWidth(25); expandpanel_button2.setHeight(50); expandpanel_button2.setSrc("arrow-left.png"); rootPanel.add(expandpanel_button2, windowWidth - 14, windowHeight / 2 - 22); expandpanel_button2.setStyleName("gwt-ButtonWidget3"); expandpanel_button2.getElement().getStyle().setZIndex(3); // create a navigation panel for path viewer navigationPanel = new VLayout(); navigationPanel.setLayoutMargin(2); // create Horizontal panel of tabs TabSet tabSet = new TabSet(); tabSet.setTabBarPosition(Side.TOP); // first tab Tab tTab1 = new Tab("Tree"); Canvas tabPane1 = new Canvas(); preview.setStyleName("gwt-previewPanel"); tabPane1.addChild(pathViewer); tTab1.setPane(tabPane1); tabSet.addTab(tTab1); tabSet.setWidth(windowWidth / 3); tabSet.setHeight(windowHeight / 2); navigationPanel.addMember(tabSet); // add panel containing bottons for navigation panel HLayout hLayout = new HLayout(); hLayout.addMember(buttonPanel); VLayout previewPanel = new VLayout(); previewPanel.setShowEdges(true); previewPanel.setEdgeSize(1); com.smartgwt.client.widgets.Label previewLabel = new com.smartgwt.client.widgets.Label( "Preview:"); previewLabel.setWrap(true); previewLabel.setAutoWidth(); previewLabel.setAutoHeight(); previewLabel.setPadding(5); previewPanel.addMember(previewLabel); previewPanel.addMember(preview); hLayout.addMember(previewPanel); navigationPanel.addMember(hLayout); navigationPanel.addMember(entityList); /* create a new pathviewer panel */ final com.smartgwt.client.widgets.Window navigationWin = new com.smartgwt.client.widgets.Window(); navigationWin.setTitle("Path Viewer"); navigationWin .addCloseClickHandler(new com.smartgwt.client.widgets.events.CloseClickHandler() { @Override public void onCloseClick(CloseClickEvent event) { navigationWin.hide(); } }); /* close button for thumbnail pathviewer window */ HeaderControl close = new HeaderControl(HeaderControl.CLOSE, new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { pathViewerWin.hide(); navigationWin.hide(); } }); close.setWidth(25); close.setHeight(25); /* close button for navigation window */ HeaderControl close2 = new HeaderControl(HeaderControl.CLOSE, new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { navigationWin.hide(); } }); close2.setWidth(25); close2.setHeight(25); /* refresh button for navigation window */ HeaderControl refresh2 = new HeaderControl(HeaderControl.REFRESH, new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { new CheckIDHandler().onClick(null); pathViewer.setVisible(true); } }); refresh2.setWidth(25); refresh2.setHeight(25); HeaderControl maximize2 = new HeaderControl(HeaderControl.MAXIMIZE, new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { } }); maximize2.setWidth(25); maximize2.setHeight(25); navigationWin.setHeaderControls(HeaderControls.HEADER_LABEL, refresh2, maximize2, close2); pathViewerWin.setHeaderControls(HeaderControls.HEADER_LABEL, refresh, close); navigationWin.setCanDragReposition(true); navigationWin.addItem(navigationPanel); navigationWin.setAutoSize(true); final ScrollPanel SkwikiPathViewerPanel = new ScrollPanel(); SkwikiPathViewerPanel.setStyleName("gwt-pathViewer"); new CheckIDHandler().onClick(null); expandpanel_button2 .addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { if (!navigationWin.isVisible() || !navigationWin.isDrawn()) { // new CheckIDHandler().onClick(null); navigationWin.show(); navigationWin.getHeader().setHeight(28); // pathViewer.setPathViewer(); pathViewer.setVisible(true); navigationWin.setLeft(windowWidth - navigationWin.getWidth() - 30); navigationWin.setTop(60); } } }); tagViewButton.addClickHandler(new TagViewerToggle()); getAllRevButton.addClickHandler(new GetAllRevHandler()); maskOnButton.addClickHandler(new FilterToggle()); allRevList.addChangeHandler(new EntityMaskHandler()); // add tagviewer related items to the UI entityList.setWidth(70 + "px"); // rootPanel.add(loginDetails, 4 * windowWidth / 5, 0); // switch between tagviewer and normal editor tagViewer.setVisible(false); rootPanel.add(tagViewer); // Adding the LOG panel Log.setText("GWT LOG: "); Log.setSize(400 + "px", 14 + "px"); rootPanel.add(Log, 10, windowHeight - 20); // commit every 20 sec final Timer timer = new Timer() { @Override public void run() { // SC.confirm("Sketch will be saved on the server", // new BooleanCallback() { // public void execute(Boolean value) { // if (value != null && value) { // myCommitHandler.onClick(null); // } else { // // } // } // }); Date date = new Date(); int diff = minutesDiff(lastTime, date); Log.setText("Last Saved " + diff + " min ago"); } }; timer.scheduleRepeating(1000 * 60); } public static int minutesDiff(Date earlierDate, Date laterDate) { if (earlierDate == null || laterDate == null) return 0; return (int) ((laterDate.getTime() / MINUTE_MILLIS) - (earlierDate .getTime() / MINUTE_MILLIS)); } class CommitHandler implements ClickHandler { /** * Fired when the user clicks on the commitButton. */ @Override public void onClick(ClickEvent event) { // commit all layout history DataPack packtoSend = new DataPack(); packtoSend.id = uid; packtoSend.fromUID = fromUID; packtoSend.comment = commentText.getText(); packtoSend.projectName = current_project_name; if (uid.equals("")) { Window.alert("login please"); return; } packtoSend.fromRevision = fromRevision; // Window.alert("Sketch is saved on the server"); for (int i = widgets.layoutSettleIndex; i <= widgets.layoutHistoryList .size() - 1; i++) { packtoSend.layoutHistoryList.add(widgets.layoutHistoryList .get(i)); } // for (AbstractLayoutHistory tempLayoutHistory : // widgets.layoutHistoryList) { // packtoSend.layoutHistoryList.add(tempLayoutHistory); // } // commit all text editors for (MyTextEditor tempTextEditor : widgets.textEditors) { tempTextEditor.getChange(packtoSend); } // commit all canvas editors for (MyCanvasEditor tempCanvasEditor : widgets.canvasEditors) { tempCanvasEditor.getChange(packtoSend); } // commit all image editors for (MyImageViewer tempImageEditor : widgets.imageEditors) { tempImageEditor.getChange(packtoSend); } // send the commit request try { // ServiceDefTarget endpoint = (ServiceDefTarget) commitService; // PhonegapUtil.prepareService(endpoint, // "http://127.0.0.1:8080/Skwiki/skWiki/", "greet"); commitService.commit(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"); } @Override public void onSuccess(DataPack result) { Date date = new Date(); DateTimeFormat dtf = DateTimeFormat .getFormat("yyyy/MM/dd:HH:mm:ss"); widgets.layoutSettleIndex += result.layoutHisotrySettleIndex; Log.setText("GWT Success: Successfully commited at " + dtf.format(date, TimeZone.createTimeZone(240))); lastTime = date; // show the commit result, update the // information label; for (MyCanvasEditor tempCanvasEditor : widgets.canvasEditors) { tempCanvasEditor .commitOnSuccess(result.updateCanvasMap .get(tempCanvasEditor.getID())); } fromRevision = result.updateRevision; // Window.alert(""+fromRevision); } }); } catch (IllegalArgumentException e) { e.printStackTrace(); } } } class CheckIDHandler implements ClickHandler { /** * Fired when the user clicks on the commitButton. */ @Override public void onClick(ClickEvent event) { DataPack packtoSend = new DataPack(); packtoSend.projectName = current_project_name; packtoSend.id = uid; try { // ServiceDefTarget endpoint = (ServiceDefTarget) // checkIDService; // PhonegapUtil.prepareService(endpoint, // "http://127.0.0.1:8080/Skwiki/skWiki/", "checkID"); checkIDService.checkID(packtoSend, new AsyncCallback<DataPack>() { @Override public void onFailure(Throwable caught) { // Show the RPC error message to the user } @Override public void onSuccess(DataPack result) { if (result.updateRevision == 0) { // Window.alert("new ID"); return; } updateRevisionHistory_List(result); pathViewer.setPathViewer(); } }); } catch (IllegalArgumentException e) { e.printStackTrace(); } } } public void updateRevisionHistory_List(DataPack result) { revisionHistory.clear(); for (RevisionHistory tempHistory : result.revisionList) { revisionHistory.add(tempHistory); } revisionList.clear(); for (RevisionHistory tempHistory : result.revisionList) { revisionList.addItem(tempHistory.toString()); } } public void updateRevisionHistory(DataPack result) { for (RevisionHistory tempHistory : result.revisionList) { revisionHistory.add(tempHistory); } } public void updateRevisionList(DataPack result) { // Async revision list latestRevision = result.updateRevision; for (int i = 1; i < revisionListItemCount; i++) { revisionList.removeItem(0); } revisionListItemCount = 1; for (int i = 0; i < latestRevision; i++) { revisionList.addItem((i + 1) + ""); revisionListItemCount++; } } // tagtoggle button handler class TagViewerToggle implements ClickHandler { @Override public void onClick(ClickEvent event) { if (tagViewButton.isDown()) { // pathViewer.setPathViewer(); tagViewer.setVisible(true); widgets.boundaryPanel.setVisible(false); } else { widgets.boundaryPanel.setVisible(true); tagViewer.setVisible(false); } } } class FilterToggle implements ClickHandler { @Override public void onClick(ClickEvent event) { if (maskOnButton.isDown()) { // pathViewer.setPathViewer(); // maskOnButton.setVisible(true); // widgets.mask = entityList.getItemText(entityList // .getSelectedIndex()); // boundaryPanel.setVisible(false); } else { widgets.mask = ""; } } } class GetAllRevHandler implements ClickHandler { @Override public void onClick(ClickEvent event) { DataPack packtoSend = new DataPack(); // TODO Change this in future // packtoSend.entity_key = entityList.getItemText(entityList // .getSelectedIndex()); try { getAllRevService.getAllRev(packtoSend, new AsyncCallback<DataPack>() { @Override public void onFailure(Throwable caught) { // Show the RPC error message to the user } @Override public void onSuccess(DataPack result) { allRevList.clear(); allRevHistory.clear(); for (SearchTagResult tempInt : result.allRevList) { allRevList.addItem(tempInt.getRevision() + ""); allRevHistory.add(tempInt); } } }); } catch (IllegalArgumentException e) { e.printStackTrace(); } } } class EntityMaskHandler implements ChangeHandler { @Override public void onChange(ChangeEvent event) { DataPack packtoSend = new DataPack(); // packToSend.updateRevision packtoSend.updateRevision = allRevHistory.get( allRevList.getSelectedIndex()).getRevision(); packtoSend.id = allRevHistory.get(allRevList.getSelectedIndex()) .getId(); // myCheckoutHandler.sendToServer(packtoSend, ); } } class TagViewer extends AbsolutePanel { private TextBox tagSearchBox = new TextBox(); private Button searchButton = new Button("search"); private Label searchResultLabel = new Label("Search Result"); final private Label selectedLabel = new Label(" "); ArrayList<SearchTagResult> searchTagList; CellTable<SearchTagResult> table = new CellTable<SearchTagResult>(); public TagViewer() { super(); this.setSize("850px", "750px"); searchTagList = new ArrayList<SearchTagResult>(); tagSearchBox.setText("Input searched tag here"); searchButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { DataPack packtoSend = new DataPack(); packtoSend.searchedTag = tagSearchBox.getText().trim(); try { searchTagService.searchTag(packtoSend, new AsyncCallback<DataPack>() { @Override public void onFailure(Throwable caught) { // Show the RPC error message to the // user } @Override public void onSuccess(DataPack result) { updateSearchTagList(result); setTagViewer(); searchResultLabel.setText(result.searchTagList .size() + " records are found with tag" + " \"" + tagSearchBox.getText().trim() + "\""); } }); } catch (IllegalArgumentException e) { e.printStackTrace(); } } }); this.add(tagSearchBox, 20, 30); this.add(searchButton, 200, 30); this.add(searchResultLabel, 280, 30); this.add(selectedLabel, 600, 30); final SingleSelectionModel<SearchTagResult> selectionModel = new SingleSelectionModel<SearchTagResult>(); table.setSelectionModel(selectionModel); selectionModel .addSelectionChangeHandler(new SelectionChangeEvent.Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { SearchTagResult selected = selectionModel .getSelectedObject(); if (selected != null) { selectedLabel.setText("Revision " + selected.getRevision() + " is selected"); // Window.alert("You selected: " + // selected.name); } } }); this.add(table, 20, 80); } private void updateSearchTagList(DataPack result) { searchTagList.clear(); for (SearchTagResult tempResult : result.searchTagList) { this.searchTagList.add(tempResult); } for (int i = table.getColumnCount(); i > 0; i--) { table.removeColumn(0); } } public void setTagViewer() { TextColumn<SearchTagResult> revisionColumn = new TextColumn<SearchTagResult>() { @Override public String getValue(SearchTagResult object) { return object.getRevision() + ""; } }; table.addColumn(revisionColumn, "Revision"); TextColumn<SearchTagResult> idColumn = new TextColumn<SearchTagResult>() { @Override public String getValue(SearchTagResult object) { return object.getId(); } }; table.addColumn(idColumn, "User ID"); TextColumn<SearchTagResult> entity_IDColumn = new TextColumn<SearchTagResult>() { @Override public String getValue(SearchTagResult object) { return object.getEntity_id(); } }; table.addColumn(entity_IDColumn, "Entity_ID"); TextColumn<SearchTagResult> tagColumn = new TextColumn<SearchTagResult>() { @Override public String getValue(SearchTagResult object) { return object.getTag(); } }; table.addColumn(tagColumn, "Tags"); table.setRowCount(searchTagList.size(), true); table.setRowData(searchTagList); } } }