package sushi.application.pages;
import org.apache.wicket.Component;
import org.apache.wicket.Session;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import sushi.application.SushiAuthenticatedSession;
import sushi.application.components.SushiNavBarDropDownButton;
import sushi.application.pages.adapter.AdapterPage;
import sushi.application.pages.correlation.CorrelationPage;
import sushi.application.pages.eventrepository.EventRepository;
import sushi.application.pages.eventrepository.eventtypeeditor.EventTypeEditor;
import sushi.application.pages.export.Export;
import sushi.application.pages.input.FileUploader;
import sushi.application.pages.input.TomTomWeatherPage;
import sushi.application.pages.input.bpmn.BPMNProcessUpload;
import sushi.application.pages.main.MainPage;
import sushi.application.pages.monitoring.bpmn.BPMNMonitoringPage;
import sushi.application.pages.monitoring.eventviews.EventViewPage;
import sushi.application.pages.monitoring.notification.NotificationPage;
import sushi.application.pages.monitoring.visualisation.AttributeChartPage;
import sushi.application.pages.querying.LiveQueryEditor;
import sushi.application.pages.querying.OnDemandQueryEditor;
import sushi.application.pages.querying.bpmn.BPMNQueryEditor;
import sushi.application.pages.simulator.SimulationPage;
import sushi.application.pages.transformation.TransformationPage;
import sushi.application.pages.user.LoginPage;
import de.agilecoders.wicket.markup.html.bootstrap.button.dropdown.MenuBookmarkablePageLink;
import de.agilecoders.wicket.markup.html.bootstrap.common.NotificationPanel;
import de.agilecoders.wicket.markup.html.bootstrap.extensions.button.DropDownAutoOpen;
import de.agilecoders.wicket.markup.html.bootstrap.image.IconType;
import de.agilecoders.wicket.markup.html.bootstrap.navbar.Navbar;
import de.agilecoders.wicket.markup.html.bootstrap.navbar.NavbarButton;
import de.agilecoders.wicket.markup.html.bootstrap.navbar.NavbarComponents;
/**
* All pages in the web application should be a child class of {@link AbstractSushiPage}.
* This page constructs the Bootstrap Navbar, adds a {@link FeedbackPanel} for status informations and the footer.
*/
public abstract class AbstractSushiPage extends WebPage {
private static final long serialVersionUID = 1L;
private String footer = "© 2013 bachelor project W1 at the <a href=\"http://www.hpi.uni-potsdam.de/\" target=\"_blank\">Hasso Plattner Institute</a>";
// private boolean stripTags;
private String logInString;
private NotificationPanel feedbackPanel;
/**
* Constructor for the {@link AbstractSushiPage}.
* This page constructs the Bootstrap Navbar, adds a feedbackpanel for status informations and the footer.
*/
@SuppressWarnings("unchecked")
public AbstractSushiPage(){
// TODO: richtige URL?!
// add(new FaviconLink("favicon", "favicon.ico"));
if(((SushiAuthenticatedSession)Session.get()).getUser() != null){
logInString = ((SushiAuthenticatedSession)Session.get()).getUser().getName();
} else {
logInString = "Sign In";
}
Navbar navbar = new Navbar("sushiNavBar");
navbar.fluid();
navbar.brandName(Model.of("GET EVENTS"));
navbar.addComponents(NavbarComponents.transform(Navbar.ComponentPosition.LEFT,
newImportDropDownButton(),
newProcessingDropDownButton(),
new NavbarButton<EventRepository>(EventRepository.class, Model.of("Event Repository")).setIconType(IconType.book),
newQueriesDropDownButton(),
newMonitoringDropDownButton(),
new NavbarButton<Export>(Export.class, Model.of("Export")).setIconType(IconType.download),
newEventProducerDropDownButton()));
navbar.addComponents(NavbarComponents.transform(Navbar.ComponentPosition.RIGHT,
new NavbarButton<MainPage>(LoginPage.class, Model.of(logInString)).setIconType(IconType.user)));
add(navbar);
addFeedbackPanel();
Label footer = new Label("footer", new PropertyModel<String>(this, "footer"));
footer.setEscapeModelStrings(false);
add(footer);
}
private Component newImportDropDownButton() {
return new SushiNavBarDropDownButton(Model.of("Import"))
.addButton(new MenuBookmarkablePageLink<FileUploader>(FileUploader.class, Model.of("Excel / XML / XSD")).setIconType(IconType.inbox))
.addButton(new MenuBookmarkablePageLink<BPMNProcessUpload>(BPMNProcessUpload.class, Model.of("BPMN")).setIconType(IconType.leaf))
.addButton(new MenuBookmarkablePageLink<TomTomWeatherPage>(TomTomWeatherPage.class, Model.of("TrafficAndWeather")).setIconType(IconType.leaf))
.setIconType(IconType.upload).add(new DropDownAutoOpen());
}
private Component newProcessingDropDownButton(){
return new SushiNavBarDropDownButton(Model.of("Processing"))
.addButton(new MenuBookmarkablePageLink<EventTypeEditor>(TransformationPage.class, Model.of("Event Transformation")).setIconType(IconType.filter))
.addButton(new MenuBookmarkablePageLink<CorrelationPage>(CorrelationPage.class, Model.of("Event Correlation")).setIconType(IconType.random))
.setIconType(IconType.cog).add(new DropDownAutoOpen());
}
private Component newQueriesDropDownButton() {
return new SushiNavBarDropDownButton(Model.of("Queries"))
.addButton(new MenuBookmarkablePageLink<OnDemandQueryEditor>(OnDemandQueryEditor.class, Model.of("On-Demand")))
.addButton(new MenuBookmarkablePageLink<LiveQueryEditor>(LiveQueryEditor.class, Model.of("Live")).setIconType(IconType.time))
.addButton(new MenuBookmarkablePageLink<BPMNQueryEditor>(BPMNQueryEditor.class, Model.of("BPMN")).setIconType(IconType.leaf))
.setIconType(IconType.thlarge).add(new DropDownAutoOpen());
}
private Component newEventProducerDropDownButton() {
return new SushiNavBarDropDownButton(Model.of("Event Producing"))
.addButton(new MenuBookmarkablePageLink<SimulationPage>(SimulationPage.class, Model.of("Simulator")))
// .addButton(new MenuBookmarkablePageLink<AdapterPage>(AdapterPage.class, Model.of("Adapter")))
.setIconType(IconType.wrench).add(new DropDownAutoOpen());
}
private Component newMonitoringDropDownButton() {
return new SushiNavBarDropDownButton(Model.of("Monitoring"))
.addButton(new MenuBookmarkablePageLink<BPMNMonitoringPage>(BPMNMonitoringPage.class, Model.of("BPMN")).setIconType(IconType.leaf))
.addButton(new MenuBookmarkablePageLink<AttributeChartPage>(AttributeChartPage.class, Model.of("Attribute Charts")))
.addButton(new MenuBookmarkablePageLink<EventViewPage>(EventViewPage.class, Model.of("Event Views")))
.addButton(new MenuBookmarkablePageLink<NotificationPage>(NotificationPage.class, Model.of("Notification")))
.setIconType(IconType.camera).add(new DropDownAutoOpen());
}
private void addFeedbackPanel() {
feedbackPanel = new NotificationPanel("feedback");
feedbackPanel.setOutputMarkupId(true);
feedbackPanel.setOutputMarkupPlaceholderTag(true);
add(feedbackPanel);
}
public NotificationPanel getFeedbackPanel() {
return feedbackPanel;
}
public void setFeedbackPanel(NotificationPanel feedbackPanel) {
this.feedbackPanel = feedbackPanel;
}
}