package com.andreiolar.abms.client.view.impl;
import com.andreiolar.abms.client.constants.AdministrareBlocConstants;
import com.andreiolar.abms.client.constants.UserMenuConstants;
import com.andreiolar.abms.client.place.LoginPlace;
import com.andreiolar.abms.client.rpc.DBGetUserInfo;
import com.andreiolar.abms.client.rpc.DBGetUserInfoAsync;
import com.andreiolar.abms.client.rpc.DBPersonalCosts;
import com.andreiolar.abms.client.rpc.DBPersonalCostsAsync;
import com.andreiolar.abms.client.rpc.DateGetter;
import com.andreiolar.abms.client.rpc.DateGetterAsync;
import com.andreiolar.abms.client.utils.WidgetUtils;
import com.andreiolar.abms.client.view.UserView;
import com.andreiolar.abms.client.widgets.AboutWidget;
import com.andreiolar.abms.client.widgets.AccountSettingsWidget;
import com.andreiolar.abms.client.widgets.ConversationWidget;
import com.andreiolar.abms.client.widgets.GeneralCostWidget;
import com.andreiolar.abms.client.widgets.InstInfoWidget;
import com.andreiolar.abms.client.widgets.MessageDialogBox;
import com.andreiolar.abms.client.widgets.PasswordChangeWidget;
import com.andreiolar.abms.client.widgets.VotingResultsWidget;
import com.andreiolar.abms.client.widgets.VotingWidget;
import com.andreiolar.abms.shared.UserInfo;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Display;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.ContextMenuEvent;
import com.google.gwt.event.dom.client.ContextMenuHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DecoratorPanel;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.MenuItem;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
public class UserViewImpl extends Composite implements UserView {
private ScrollPanel scroller = new ScrollPanel();
private String username;
private static UserInfo userInfo;
private String currentMonth;
private String previousMonth;
private String currentYear;
private Integer previousMonthInt;
private Presenter presenter;
private AdministrareBlocConstants constants = GWT.create(AdministrareBlocConstants.class);
public UserViewImpl() {
String sessionId = Cookies.getCookie("sid");
if (sessionId == null) {
presenter.goTo(new LoginPlace(""));
} else {
Widget mainMenu = createMenu();
getCurrentMonth();
getPreviousMonth();
getCurrentYear();
getPreviousMonthInt();
initWidget(mainMenu);
}
}
private void setUsername() {
String token = History.getToken();
Window.alert(token);
this.username = token.substring(token.indexOf(":") + 1, token.length());
}
public String getUsername() {
return username;
}
public void setUserInfo(String username) {
DBGetUserInfoAsync rpcService = (DBGetUserInfoAsync) GWT.create(DBGetUserInfo.class);
ServiceDefTarget target = (ServiceDefTarget) rpcService;
String moduleRelativeURL = GWT.getModuleBaseURL() + "DBGetUserInfoImpl";
target.setServiceEntryPoint(moduleRelativeURL);
rpcService.getUserInfo(username, new AsyncCallback<UserInfo>() {
@Override
public void onSuccess(UserInfo result) {
UserViewImpl.userInfo = result;
}
@Override
public void onFailure(Throwable caught) {
// Window.alert(caught.getMessage());
}
});
}
public UserInfo getUserInfo() {
return userInfo;
}
private Widget createMenu() {
setUsername();
setUserInfo(username);
String sessionId = Cookies.getCookie("sid");
if (!sessionId.equals(username)) {
presenter.goTo(new LoginPlace(""));
}
VerticalPanel vPanel = new VerticalPanel();
HTML title = new HTML("<p style=\"font-size:35px\"><b><i>Apartment Building Management System</i></b></p>");
Widget menu = createMenuBar();
HTML footer = new HTML("<p><i>Copyright © 2016 Andrei Olar</i></p>");
Widget defaultWidget = WidgetUtils.createDefaultPresentationWidget(username);
scroller.add(defaultWidget);
DecoratorPanel decPanel = new DecoratorPanel();
decPanel.setWidget(scroller);
scroller.setAlwaysShowScrollBars(true);
vPanel.add(title);
vPanel.add(menu);
vPanel.add(decPanel);
vPanel.add(footer);
vPanel.setCellHorizontalAlignment(footer, HasHorizontalAlignment.ALIGN_CENTER);
scroller.setStyleName("scroll-panel");
decPanel.setStyleName("dec-panel");
return vPanel;
}
private Widget createMenuBar() {
// Create the menu bar
MenuBar menu = new MenuBar();
menu.setAutoOpen(true);
menu.setWidth("100%");
menu.setAnimationEnabled(true);
menu.setStyleName("navigation-menu");
// Adding a sub menu of emergency services
MenuBar emergencyServicesMenu = new MenuBar(true);
// Create the complaints menu
MenuBar complaintsMenu = new MenuBar(true);
complaintsMenu.setAnimationEnabled(true);
menu.addItem(new MenuItem(constants.complaints(), complaintsMenu));
// Add complaints menu items
// emergencyServicesMenu.addItem(UserMenuConstants.MENU_ITEM_LOCAL_POLICE, new Command() {
//
// @Override
// public void execute() {
// scroller.clear();
// Widget localPoliceForm = new ComplaintWidget_bkp(userInfo, UserMenuConstants.COMPLAINT_NOTE_LOCAL_POLICE,
// UserMenuConstants.MENU_ITEM_LOCAL_POLICE);
// scroller.add(localPoliceForm);
// }
//
// });
//
// emergencyServicesMenu.addItem(UserMenuConstants.MENU_ITEM_NATIONAL_POLICE, new Command() {
//
// @Override
// public void execute() {
// scroller.clear();
// Widget nationalPoliceForm = new ComplaintWidget_bkp(userInfo, UserMenuConstants.COMPLAINT_NOTE_NATIONAL_POLICE,
// UserMenuConstants.MENU_ITEM_NATIONAL_POLICE);
// scroller.add(nationalPoliceForm);
// }
// });
//
// emergencyServicesMenu.addItem(UserMenuConstants.MENU_ITEM_MEDICAL_SERVICE, new Command() {
//
// @Override
// public void execute() {
// scroller.clear();
// Widget medicalServiceForm = new ComplaintWidget_bkp(userInfo, UserMenuConstants.COMPLAINT_NOTE_MEDICAL_SERVICE,
// UserMenuConstants.MENU_ITEM_MEDICAL_SERVICE);
// scroller.add(medicalServiceForm);
// }
// });
//
// emergencyServicesMenu.addItem(UserMenuConstants.MENU_ITEM_FIREFIGHTER_SERVICE, new Command() {
//
// @Override
// public void execute() {
// scroller.clear();
// Widget firefighterServiceForm = new ComplaintWidget_bkp(userInfo, UserMenuConstants.COMPLAINT_NOTE_FIREFIGHTER_SERVICE,
// UserMenuConstants.MENU_ITEM_FIREFIGHTER_SERVICE);
// scroller.add(firefighterServiceForm);
// }
// });
//
// complaintsMenu.addItem(UserMenuConstants.MENU_ITEM_EMERGENCY_SERVICES, emergencyServicesMenu);
//
// // End of Emergency Services Menu
//
// // Start of Public Transportation Menu
// MenuBar publicTransportationMenu = new MenuBar(true);
//
// publicTransportationMenu.addItem(UserMenuConstants.MENU_ITEM_PUBLIC_TRANSPORT, new Command() {
//
// @Override
// public void execute() {
// scroller.clear();
// Widget publicTransportForm = new ComplaintWidget_bkp(userInfo, UserMenuConstants.COMPLAINT_NOTE_PUBLIC_TRANSPORT,
// UserMenuConstants.MENU_ITEM_PUBLIC_TRANSPORT);
// scroller.add(publicTransportForm);
// }
// });
//
// publicTransportationMenu.addItem(UserMenuConstants.MENU_ITEM_NATIONAL_RAILWAY, new Command() {
//
// @Override
// public void execute() {
// scroller.clear();
// Widget firefighterServiceForm = new ComplaintWidget_bkp(userInfo, UserMenuConstants.COMPLAINT_NOTE_NATIONAL_RAILWAY,
// UserMenuConstants.MENU_ITEM_NATIONAL_RAILWAY);
// scroller.add(firefighterServiceForm);
// }
// });
//
// publicTransportationMenu.addItem(UserMenuConstants.MENU_ITEM_AIRPORT, new Command() {
//
// @Override
// public void execute() {
// scroller.clear();
// Widget airportForm = new ComplaintWidget_bkp(userInfo, UserMenuConstants.COMPLAINT_NOTE_AIRPORT, UserMenuConstants.MENU_ITEM_AIRPORT);
// scroller.add(airportForm);
// }
// });
//
// complaintsMenu.addItem(UserMenuConstants.MENU_ITEM_PUBLIC_TRANSPORTATION, publicTransportationMenu);
//
// // End of Public Transportation Menu
//
// // Start of Salubrity Menu
//
// complaintsMenu.addSeparator();
//
// complaintsMenu.addItem(UserMenuConstants.MENU_ITEM_SALUBRITY, new Command() {
//
// @Override
// public void execute() {
// scroller.clear();
// Widget salubrityForm = new ComplaintWidget_bkp(userInfo, UserMenuConstants.COMPLAINT_NOTE_SALUBRITY,
// UserMenuConstants.MENU_ITEM_SALUBRITY);
// scroller.add(salubrityForm);
// }
// });
//
// // End of Salubrity Menu
//
// // Start of Town Hall Menu
//
// complaintsMenu.addItem(UserMenuConstants.MENU_ITEM_TOWN_HALL, new Command() {
//
// @Override
// public void execute() {
// scroller.clear();
// Widget townHallForm = new ComplaintWidget_bkp(userInfo, UserMenuConstants.COMPLAINT_NOTE_TOWN_HALL,
// UserMenuConstants.MENU_ITEM_TOWN_HALL);
// scroller.add(townHallForm);
// }
// });
//
// // End of Town Hall Menu
//
// /* End of Complaints Menu */
//
// /* Create the Administration Menu */
// MenuBar administrationMenu = new MenuBar(true);
// administrationMenu.setAnimationEnabled(true);
// menu.addItem(new MenuItem(UserMenuConstants.MENU_ITEM_ADMINISTRATION, administrationMenu));
//
// // Add contact info Menu
// administrationMenu.addItem(UserMenuConstants.MENU_ITEM_CONTACT_INFO, new Command() {
//
// @Override
// public void execute() {
// scroller.clear();
// Widget contactView = new ContactViewWidget(userInfo);
// scroller.add(contactView);
// }
//
// });
// // End of Contact Info Menu
//
// administrationMenu.addItem(UserMenuConstants.MENU_ITEM_SELF_READINGS, new Command() {
//
// @Override
// public void execute() {
// scroller.clear();
// Widget selfReadingsWidget = new SelfReadingWidget(previousMonth, currentYear, userInfo);
// scroller.add(selfReadingsWidget);
// }
// });
// administrationMenu.addSeparator();
MenuBar upkeepMenu = new MenuBar(true);
upkeepMenu.addItem(UserMenuConstants.MENU_ITEM_GENERAL_VIEW, new Command() {
@Override
public void execute() {
scroller.clear();
Widget generalCostsView = new GeneralCostWidget();
final PopupPanel contextMenu = new PopupPanel(true);
VerticalPanel verticalPanel = populateContextMenu();
contextMenu.add(verticalPanel);
contextMenu.hide();
generalCostsView.sinkEvents(Event.ONCONTEXTMENU);
generalCostsView.addHandler(new ContextMenuHandler() {
@Override
public void onContextMenu(ContextMenuEvent event) {
event.preventDefault();
event.stopPropagation();
int x = event.getNativeEvent().getClientX();
int y = event.getNativeEvent().getClientY();
contextMenu.setPopupPosition(x, y);
contextMenu.show();
}
}, ContextMenuEvent.getType());
scroller.add(generalCostsView);
}
});
upkeepMenu.addItem(UserMenuConstants.MENU_ITEM_PERSONAL_VIEW, new Command() {
@Override
public void execute() {
scroller.clear();
DOM.getElementById("loading").getStyle().setDisplay(Display.BLOCK);
DBPersonalCostsAsync rpcService = (DBPersonalCostsAsync) GWT.create(DBPersonalCosts.class);
ServiceDefTarget target = (ServiceDefTarget) rpcService;
String moduleRelativeURL = GWT.getModuleBaseURL() + "DBPersonalCostsImpl";
target.setServiceEntryPoint(moduleRelativeURL);
// rpcService.getPersonalUpkeepInformation(username, currentMonth, new AsyncCallback<PersonalUpkeepInformation>() {
//
// @Override
// public void onFailure(Throwable caught) {
// DOM.getElementById("loading").getStyle().setDisplay(Display.NONE);
// DialogBox dialogBox = DialogBoxCreator.createDialogBox(UserMenuConstants.DIALOG_BOX_FAILED_GETTING_PERSONAL_COSTS_TITLE,
// UserMenuConstants.DIALOG_BOX_FAILED_GETTING_PERSONAL_COSTS_MESSAGE + ": " + caught.getMessage(),
// DialogBoxConstants.CLOSE_BUTTON, false, false);
// dialogBox.setGlassEnabled(true);
// dialogBox.setAnimationEnabled(true);
// dialogBox.center();
// dialogBox.show();
// }
//
// @Override
// public void onSuccess(PersonalUpkeepInformation result) {
// DOM.getElementById("loading").getStyle().setDisplay(Display.NONE);
// Widget personalViewWidget = new PersonalCostWidget(result);
//
// final PopupPanel contextMenu = new PopupPanel(true);
// Widget contextMenuWidget = createPersonalViewContextMenu();
// contextMenu.add(contextMenuWidget);
// contextMenu.hide();
//
// personalViewWidget.sinkEvents(Event.ONCONTEXTMENU);
// personalViewWidget.addHandler(new ContextMenuHandler() {
//
// @Override
// public void onContextMenu(ContextMenuEvent event) {
// event.preventDefault();
// event.stopPropagation();
//
// int x = event.getNativeEvent().getClientX();
// int y = event.getNativeEvent().getClientY();
//
// contextMenu.setPopupPosition(x, y);
// contextMenu.show();
//
// }
// }, ContextMenuEvent.getType());
//
// scroller.add(personalViewWidget);
// }
// });
}
});
// administrationMenu.addItem(UserMenuConstants.MENU_MONTHLY_COSTS, upkeepMenu);
/* Create the Voting Menu */
MenuBar votingMenu = new MenuBar(true);
votingMenu.setAnimationEnabled(true);
menu.addItem(new MenuItem(UserMenuConstants.MENU_ITEM_VOTING, votingMenu));
votingMenu.addItem(UserMenuConstants.MENU_ITEM_VOTE, new Command() {
@Override
public void execute() {
scroller.clear();
Widget voteWidget = new VotingWidget(userInfo);
scroller.add(voteWidget);
}
});
votingMenu.addItem(UserMenuConstants.MENU_ITEM_VIEW_RESULTS, new Command() {
@Override
public void execute() {
scroller.clear();
Widget resultsWidget = new VotingResultsWidget(userInfo, false);
scroller.add(resultsWidget);
}
});
MenuBar messagingMenu = new MenuBar(true);
messagingMenu.setAnimationEnabled(true);
menu.addItem(new MenuItem(UserMenuConstants.MENU_ITEM_MESSAGING, messagingMenu));
messagingMenu.addItem(UserMenuConstants.MENU_ITEM_CONVERSATIONS, new Command() {
@Override
public void execute() {
scroller.clear();
Widget conversationWidget = new ConversationWidget(userInfo);
scroller.add(conversationWidget);
}
});
messagingMenu.addItem(UserMenuConstants.MENU_ITEM_COMPOSE, new Command() {
@Override
public void execute() {
scroller.clear();
MessageDialogBox messageDialog = new MessageDialogBox(userInfo);
DialogBox dialogBox = messageDialog.initializeDialogBox();
scroller.add(dialogBox);
dialogBox.setGlassEnabled(true);
dialogBox.setAnimationEnabled(true);
dialogBox.center();
dialogBox.show();
}
});
MenuBar helpMenu = new MenuBar(true);
helpMenu.setAnimationEnabled(true);
menu.addItem(new MenuItem(UserMenuConstants.MENU_ITEM_HELP, helpMenu));
helpMenu.addItem(UserMenuConstants.MENU_ITEM_ABOUT, new Command() {
@Override
public void execute() {
scroller.clear();
Widget aboutWidget = new AboutWidget();
scroller.add(aboutWidget);
}
});
helpMenu.addItem(UserMenuConstants.MENU_ITEM_INST_INFO, new Command() {
@Override
public void execute() {
scroller.clear();
Widget instInfoWifged = new InstInfoWidget();
scroller.add(instInfoWifged);
}
});
MenuBar optionsMenu = new MenuBar(true);
optionsMenu.setAnimationEnabled(true);
menu.addItem(new MenuItem(UserMenuConstants.MENU_ITEM_OPTIONS, optionsMenu));
optionsMenu.addItem(UserMenuConstants.MENU_ITEM_EDIT_ACCOUNT_SETTINGS, new Command() {
@Override
public void execute() {
scroller.clear();
Widget editAccountSettingsWidget = new AccountSettingsWidget(userInfo);
scroller.add(editAccountSettingsWidget);
}
});
optionsMenu.addItem(UserMenuConstants.MENU_ITEM_CHANGE_PASSWORD, new Command() {
@Override
public void execute() {
scroller.clear();
Widget changePasswordWidget = new PasswordChangeWidget(userInfo);
scroller.add(changePasswordWidget);
}
});
optionsMenu.addSeparator();
optionsMenu.addItem(UserMenuConstants.LOGOUT, new Command() {
@Override
public void execute() {
Window.Location.replace("http://127.0.0.1:8888/Abms.html");
}
});
return menu;
}
protected Widget createPersonalViewContextMenu() {
Button pdfButton = new Button();
String pdfHTML = "<div><img src = '"
+ "/images/icons/pdf_small_logo.png' height = '10px' width = '10px'></img><label> Export as PDF</label></div>";
pdfButton.setHTML(pdfHTML);
pdfButton.setSize("140px", "30px");
pdfButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String url = GWT.getModuleBaseURL() + "pdfGenerator?username=" + username + "&month=" + currentMonth;
Window.open(url, "_self", "status=0,toolbar=0,menubar=0,location=0");
}
});
return pdfButton;
}
@Override
public void setPresenter(Presenter presenter) {
}
private VerticalPanel populateContextMenu() {
Button excelButton = new Button();
String excelHTML = "<div><img src = '"
+ "/images/icons/small_excel_logo.png' height = '10px' width = '10px'></img><label> Export as Excel</label></div>";
excelButton.setHTML(excelHTML);
excelButton.setSize("140px", "30px");
excelButton.addClickHandler(new ClickHandler() {
String fileInfo = "Upkeep_" + currentMonth + ".xls";
@Override
public void onClick(ClickEvent event) {
String url = GWT.getModuleBaseURL() + "downloadServlet?fileInfo=" + fileInfo;
Window.open(url, "_self", "status=0,toolbar=0,menubar=0,location=0");
}
});
Button pdfButton = new Button();
String pdfHTML = "<div><img src = '"
+ "/images/icons/pdf_small_logo.png' height = '10px' width = '10px'></img><label> Export as PDF</label></div>";
pdfButton.setHTML(pdfHTML);
pdfButton.setSize("140px", "30px");
pdfButton.addClickHandler(new ClickHandler() {
String fileInfo = "Upkeep_" + currentMonth + ".pdf";
@Override
public void onClick(ClickEvent event) {
String url = GWT.getModuleBaseURL() + "downloadServlet?fileInfo=" + fileInfo;
Window.open(url, "_self", "status=0,toolbar=0,menubar=0,location=0");
}
});
Button zipButton = new Button();
String zipHTML = "<div><img src = '"
+ "/images/icons/winzip-logo.png' height = '10px' width = '10px'></img><label> Export both as ZIP</label></div>";
zipButton.setHTML(zipHTML);
zipButton.setSize("140px", "30px");
zipButton.addClickHandler(new ClickHandler() {
String fileInfo = "Upkeep_" + currentMonth + ".zip";
@Override
public void onClick(ClickEvent event) {
String url = GWT.getModuleBaseURL() + "downloadServlet?fileInfo=" + fileInfo;
Window.open(url, "_self", "status=0,toolbar=0,menubar=0,location=0");
}
});
VerticalPanel verticalPanel = new VerticalPanel();
verticalPanel.add(excelButton);
verticalPanel.add(pdfButton);
verticalPanel.add(zipButton);
return verticalPanel;
}
private String getCurrentMonth() {
DateGetterAsync rpcService = (DateGetterAsync) GWT.create(DateGetter.class);
ServiceDefTarget target = (ServiceDefTarget) rpcService;
String moduleRelativeURL = GWT.getModuleBaseURL() + "DateGetterImpl";
target.setServiceEntryPoint(moduleRelativeURL);
String month = "";
rpcService.getCurrentMonth(new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
// Don't do anything
}
@Override
public void onSuccess(String result) {
currentMonth = result;
}
});
return month;
}
private String getPreviousMonth() {
DateGetterAsync rpcService = (DateGetterAsync) GWT.create(DateGetter.class);
ServiceDefTarget target = (ServiceDefTarget) rpcService;
String moduleRelativeURL = GWT.getModuleBaseURL() + "DateGetterImpl";
target.setServiceEntryPoint(moduleRelativeURL);
String month = "";
rpcService.getPreviousMonth(new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
// Don't do anything
}
@Override
public void onSuccess(String result) {
previousMonth = result;
}
});
return month;
}
private String getCurrentYear() {
DateGetterAsync rpcService = (DateGetterAsync) GWT.create(DateGetter.class);
ServiceDefTarget target = (ServiceDefTarget) rpcService;
String moduleRelativeURL = GWT.getModuleBaseURL() + "DateGetterImpl";
target.setServiceEntryPoint(moduleRelativeURL);
String month = "";
rpcService.getCurrentYear(new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
// Don't do anything
}
@Override
public void onSuccess(String result) {
currentYear = result;
}
});
return month;
}
private String getPreviousMonthInt() {
DateGetterAsync rpcService = (DateGetterAsync) GWT.create(DateGetter.class);
ServiceDefTarget target = (ServiceDefTarget) rpcService;
String moduleRelativeURL = GWT.getModuleBaseURL() + "DateGetterImpl";
target.setServiceEntryPoint(moduleRelativeURL);
String month = "";
rpcService.getPreviousMonthInt(new AsyncCallback<Integer>() {
@Override
public void onFailure(Throwable caught) {
// Don't do anything
}
@Override
public void onSuccess(Integer result) {
previousMonthInt = result;
}
});
return month;
}
@Override
public void setUsername(String username) {
// TODO Auto-generated method stub
}
}