/**
* (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jabylon.rest.ui.navbar;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.RegistryFactory;
import org.jabylon.rest.ui.util.GlobalResources;
import org.jabylon.rest.ui.wicket.BasicPanel;
import org.jabylon.rest.ui.wicket.PanelFactory;
import org.jabylon.rest.ui.wicket.pages.WelcomePage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class NavbarPanel<T> extends BasicPanel<T> {
private static final long serialVersionUID = 1L;
private static final Logger logger = LoggerFactory.getLogger(NavbarPanel.class);
@SuppressWarnings("rawtypes")
public NavbarPanel(String id, IModel<T> model, PageParameters parameters) {
super(id, model, parameters);
BookmarkablePageLink<String> homeLink = new BookmarkablePageLink<String>("jabylon",WelcomePage.class); //$NON-NLS-1$
homeLink.add(new Image("logo", GlobalResources.IMG_JABYLON_LOGO));
add(homeLink);
Map<PanelFactory, Boolean> data = loadNavBarExtensions();
List<PanelFactory> items = new ArrayList<PanelFactory>();
List<PanelFactory> rightAligned = new ArrayList<PanelFactory>();
for (Entry<PanelFactory, Boolean> entry : data.entrySet()) {
if(entry.getValue())
rightAligned.add(entry.getKey());
else
items.add(entry.getKey());
}
ListView<PanelFactory> listView = new ListView<PanelFactory>("items", items) { //$NON-NLS-1$
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<PanelFactory> item) {
Panel newPanel = item.getModelObject().createPanel(getPageParameters(), NavbarPanel.this.getModel(), "content"); //$NON-NLS-1$
if(newPanel==null)
item.add(new Label("content","NONE")); //$NON-NLS-1$ //$NON-NLS-2$
else
item.add(newPanel);
}
};
listView.setRenderBodyOnly(true);
add(listView);
ListView<PanelFactory> rightListView = new ListView<PanelFactory>("right-items", rightAligned) { //$NON-NLS-1$
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<PanelFactory> item) {
Panel newPanel = item.getModelObject().createPanel(getPageParameters(), NavbarPanel.this.getModel(), "content"); //$NON-NLS-1$
if(newPanel==null)
item.add(new Label("content","NONE")); //$NON-NLS-1$ //$NON-NLS-2$
else
item.add(newPanel);
}
};
rightListView.setRenderBodyOnly(true);
add(rightListView);
}
private Map<PanelFactory,Boolean> loadNavBarExtensions() {
Map<PanelFactory, Boolean> extensions = new LinkedHashMap<PanelFactory, Boolean>();
IConfigurationElement[] configurationElements = RegistryFactory.getRegistry().getConfigurationElementsFor(
"org.jabylon.rest.ui.navbarItem"); //$NON-NLS-1$
for (IConfigurationElement element : configurationElements) {
try {
PanelFactory extension = (PanelFactory) element.createExecutableExtension("panel"); //$NON-NLS-1$
String pullRight = element.getAttribute("pullRight"); //$NON-NLS-1$
if(pullRight!=null && Boolean.valueOf(pullRight))
extensions.put(extension, true);
else
extensions.put(extension, false);
} catch (CoreException e) {
logger.error("Failed to load extension "+element,e); //$NON-NLS-1$
}
}
return extensions;
}
}