---
# System prepended metadata

title: Untitled

---

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();

		}

	}



}