/*******************************************************************************
* Copyright 2011 Alex 'Ript' Malyshev <alexript@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package net.autosauler.ballance.client.gui;
import java.util.Set;
import net.autosauler.ballance.client.Ballance_autosauler_net;
import net.autosauler.ballance.client.databases.StructureFactory;
import net.autosauler.ballance.client.gui.images.Images;
import net.autosauler.ballance.client.gui.messages.M;
import net.autosauler.ballance.shared.UserRole;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.layout.AccordionLayout;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.VerticalPanel;
/**
* The Class LeftMenu.
*/
public class LeftMenu {
/** The panel. */
private final ContentPanel panel;
/** The role. */
private UserRole role = null;
/**
* Instantiates a new left menu.
*/
public LeftMenu(ContentPanel parent) {
panel = new ContentPanel();
panel.setHeaderVisible(false);
panel.setLayout(new AccordionLayout());
panel.setWidth("240px");
buildContent();
parent.add(panel);
}
/**
* Builds the admin pane.
*/
private void buildAdminPane() {
if (role.isAdmin()) {
ContentPanel cp = new ContentPanel();
cp.setAnimCollapse(true);
cp.setHeading(M.menu.adminPanel());
cp.setIcon(AbstractImagePrototype.create(Images.menu.adminPanel()));
cp.setLayout(new FitLayout());
VerticalPanel adminpanel = new VerticalPanel();
adminpanel.add(getMenuItem(M.menu.itemDatabase(), "dbpane",
Images.menu.icoDatabase()));
adminpanel.add(getMenuItem(M.menu.itemUsers(), "editusers",
Images.menu.icoUser()));
adminpanel.add(getMenuItem(M.menu.itemStructure(), "editstruct",
Images.menu.Structure()));
adminpanel.add(getMenuItem(M.menu.itemDocumentation(), "editdoc",
Images.menu.Structure()));
cp.add(adminpanel);
panel.add(cp);
}
}
/**
* Builds the content.
*/
public void buildContent() {
clear();
role = Ballance_autosauler_net.sessionId.getUserrole();
buildAdminPane();
buildDocumentsPane();
buildFinancesPane();
buildManagerPane();
buildForAllPane();
buildGuestPane();
panel.recalculate();
panel.layout(true); // hack for forced redraw after rebuild
}
/**
* Builds the documents pane.
*/
private void buildDocumentsPane() {
if (role.isAdmin() || role.isDocuments()) {
ContentPanel cp = new ContentPanel();
cp.setAnimCollapse(true);
cp.setHeading(M.menu.documentsPanel());
cp.setIcon(AbstractImagePrototype.create(Images.menu
.documentsPanel()));
cp.setLayout(new FitLayout());
VerticalPanel documentspanel = new VerticalPanel();
Set<String> items = StructureFactory
.getMenuItemsFor(UserRole.ROLE_DOCUMENTS);
for (String item : items) {
String itemname = StructureFactory.getDescription(item)
.getName()
.getName(LocaleInfo.getCurrentLocale().getLocaleName());
documentspanel.add(getMenuItem(itemname, item,
StructureFactory.getMenuIcon(item)));
}
cp.add(documentspanel);
panel.add(cp);
}
}
/**
* Builds the finances pane.
*/
private void buildFinancesPane() {
if (role.isAdmin() || role.isFinances()) {
ContentPanel cp = new ContentPanel();
cp.setAnimCollapse(true);
cp.setHeading(M.menu.financesPanel());
cp.setIcon(AbstractImagePrototype.create(Images.menu
.financesPanel()));
cp.setLayout(new FitLayout());
VerticalPanel financesspanel = new VerticalPanel();
Set<String> items = StructureFactory
.getMenuItemsFor(UserRole.ROLE_FINANCES);
for (String item : items) {
String itemname = StructureFactory.getDescription(item)
.getName()
.getName(LocaleInfo.getCurrentLocale().getLocaleName());
financesspanel.add(getMenuItem(itemname, item,
StructureFactory.getMenuIcon(item)));
}
cp.add(financesspanel);
panel.add(cp);
}
}
/**
* Builds the for all pane.
*/
private void buildForAllPane() {
if (!role.isGuest()) {
ContentPanel cp = new ContentPanel();
cp.setAnimCollapse(true);
cp.setHeading(M.menu.forAllPanel());
cp.setIcon(AbstractImagePrototype.create(Images.menu.forAllPanel()));
cp.setLayout(new FitLayout());
VerticalPanel allpanel = new VerticalPanel();
allpanel.add(getMenuItem(M.menu.itemReportCurrval(), "currval",
Images.menu.icoCurrval()));
allpanel.add(getMenuItem(M.menu.itemChangelog(), "changelog",
Images.menu.icoChangelog()));
cp.add(allpanel);
panel.add(cp);
}
}
/**
* Builds the guest pane.
*/
private void buildGuestPane() {
ContentPanel cp = new ContentPanel();
cp.setAnimCollapse(true);
cp.setHeading(M.menu.guestPanel());
cp.setIcon(AbstractImagePrototype.create(Images.menu.guestPanel()));
cp.setLayout(new FitLayout());
VerticalPanel guestpanel = new VerticalPanel();
guestpanel.add(getMenuItem(M.menu.itemHelloToAll(), "start",
Images.menu.icoInfo()));
guestpanel.add(getMenuItem(M.menu.itemLicense(), "license",
Images.menu.icoCopyright()));
cp.add(guestpanel);
panel.add(cp);
}
/**
* Builds the manager pane.
*/
private void buildManagerPane() {
if (role.isAdmin() || role.isManager()) {
ContentPanel cp = new ContentPanel();
cp.setAnimCollapse(true);
cp.setHeading(M.menu.managerPanel());
cp.setIcon(AbstractImagePrototype.create(Images.menu.managerPanel()));
cp.setLayout(new FitLayout());
VerticalPanel managerpanel = new VerticalPanel();
Set<String> items = StructureFactory
.getMenuItemsFor(UserRole.ROLE_MANAGER);
for (String item : items) {
String itemname = StructureFactory.getDescription(item)
.getName()
.getName(LocaleInfo.getCurrentLocale().getLocaleName());
managerpanel.add(getMenuItem(itemname, item,
StructureFactory.getMenuIcon(item)));
}
cp.add(managerpanel);
panel.add(cp);
}
}
/**
* Clear.
*/
public void clear() {
panel.removeAll();
ContentPanel cp = new ContentPanel();
panel.add(cp); // hack for hidden first panel
cp.hide();
role = null;
}
/**
* Gets the menu item.
*
* @param text
* the text
* @param tag
* the tag
* @param image
* the image
* @return the menu item
*/
private HorizontalPanel getMenuItem(String text, String tag,
ImageResource image) {
HorizontalPanel hPanel = new HorizontalPanel();
hPanel.setSpacing(5);
hPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP);
hPanel.add(new Image(image));
Hyperlink link = new Hyperlink(text, tag);
hPanel.add(link);
return hPanel;
}
}