package de.hdm.softwarepraktikum.client.gui;
import java.util.ArrayList;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.MenuItem;
import com.google.gwt.user.client.ui.VerticalPanel;
import de.hdm.softwarepraktikum.client.ClientsideSettings;
import de.hdm.softwarepraktikum.client.Project_19.CurrentPerson;
import de.hdm.softwarepraktikum.shared.ShoppingListAdministrationAsync;
import de.hdm.softwarepraktikum.shared.bo.Group;
import de.hdm.softwarepraktikum.shared.bo.Person;
/**
* Die <code>Header</code>-Klasse ist der Kopfbereich des Shoppinglisttool. Der
* Header wird über alle Seiten des Tools gleich angezeigt. Dieser ermöglicht
* die Navigation zwischen den Clients <code>ShoppingListEntry</code> und
* <code>ShoppingListReportEntry</code> und den Logout aus dem System.
*
* @author Vincent Wengert
* @version 1.0
*/
public class Header extends HorizontalPanel {
private Person currentPerson = CurrentPerson.getPerson();
private ShoppingListAdministrationAsync administration = ClientsideSettings.getShoppinglistAdministration();
private HorizontalPanel homeButtonPanel = new HorizontalPanel();
private Button editorButton = new Button("Editor");
private Button reportGeneratorButton = new Button("Reportgenerator");
private Anchor reportGeneratorLink = new Anchor("ReportGenerator");
private MenuItem logout;
/**
* Im Konstruktor der Klasse <code>Header</code> werden die Buttons in die
* Panels und zu den Buttons die ClickHandler hinzugefügt.
*/
public Header() {
this.add(homeButtonPanel);
editorButton.addClickHandler(new HomeClickHandler());
reportGeneratorButton.addClickHandler(new ReportGeneratorClickHandler());
}
/**
* ************************* ABSCHNITT der Methoden *************************
*/
/**
* In dieser Methode werden die Desings der Buttons und der MenuBar festgelegt.
* Auch die ShoppingList-Editor und ReportGenerator-Buttons sowie die MenuBar
* zum Logout werden zum Kopfbereich des Shoppinglisttool hinzugefügt.
*/
public void onLoad() {
MenuBar menu = new MenuBar();
MenuBar logoutMenu = new MenuBar(true);
logoutMenu.setAnimationEnabled(true);
logoutMenu.addItem("Name ändern", new Command() {
@Override
public void execute() {
EditPersonDialog epd = new EditPersonDialog();
epd.setHeader(Header.this);
}
});
logoutMenu.addSeparator();
/**
* Durch ein Klick auf die Konto Löschen Interaktion wird der User auf die
* aufgefordert die Aktion zu bestätigen. Anschließend wird der Account aus der
* Datenbank entfernt und der User ausgeloggt und auf die Begrüßungsseite
* weitergeleitet.
*/
logoutMenu.addItem("Konto l\u00F6schen", new Command() {
@Override
public void execute() {
if (Window.confirm("Konto wirklich l\u00F6schen?") == true) {
if (Window.confirm(
"Diese Aktion kann nicht r\u00FCckg\u00E4ngig gemacht werden. Sind Sie sicher?") == true) {
administration.deletePerson(currentPerson, new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable arg0) {
Notification.show("Person konnte nicht gelöscht werden.");
}
@Override
public void onSuccess(Void arg0) {
currentPerson.setLogoutUrl(currentPerson.getLogoutUrl());
Window.open(currentPerson.getLogoutUrl(), "_self", "");
Notification.show("Person wurde erfolgreich gelöscht.");
}
});
}
}
}
});
logoutMenu.addSeparator();
/**
* Durch ein Klick auf den Logout-Button wird der User auf die Begrüßungsseite
* weitergeleitet
*/
logoutMenu.addItem("Logout", new Command() {
@Override
public void execute() {
Notification.show("Logout");
currentPerson.setLogoutUrl(currentPerson.getLogoutUrl());
Window.open(currentPerson.getLogoutUrl(), "_self", "");
}
});
logout = new MenuItem("Angemeldet als: " + currentPerson.getName(), logoutMenu);
menu.addItem(logout);
this.setStylePrimaryName("Header");
homeButtonPanel.add(editorButton);
homeButtonPanel.add(reportGeneratorButton);
homeButtonPanel.add(menu);
homeButtonPanel.setStylePrimaryName("homeButtonPanel");
editorButton.setStylePrimaryName("editorButton");
reportGeneratorButton.setStylePrimaryName("reportGeneratorButton");
menu.setStylePrimaryName("menuBar");
homeButtonPanel.setCellHorizontalAlignment(editorButton, ALIGN_LEFT);
homeButtonPanel.setCellHorizontalAlignment(reportGeneratorButton, ALIGN_RIGHT);
}
/**
* Methode zum Auslesen des MenuItems logout um den Namen in der Klasse
* <code>EditPersonDialog</code> zu ändern.
*
* @return MenuItem logout
*/
public MenuItem getLogoutMenu() {
return this.logout;
}
/**
* ************************* ABSCHNITT der Click-/EventHandler
* *************************
*/
/**
* Durch ein Klick auf den ReportGenerator-Button wird man auf die
* ReportGenerator-Seite weitergeleitet.
*/
public class ReportGeneratorClickHandler implements ClickHandler {
@Override
public void onClick(ClickEvent event) {
reportGeneratorLink.setHref(GWT.getHostPageBaseURL() + "ReportGenerator.html");
Window.open(reportGeneratorLink.getHref(), "_self", "");
}
}
/**
* Durch ein Klick auf den Shoppinglist-Editor-Button wird die Editorseite
* aktualisiert.
*/
public class HomeClickHandler implements ClickHandler {
@Override
public void onClick(ClickEvent event) {
Window.Location.reload();
}
}
}