Package org.openengsb.ui.admin.global.menu

Source Code of org.openengsb.ui.admin.global.menu.MenuTemplate

/**
* Licensed to the Austrian Association for Software Tool Integration (AASTI)
* under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright
* ownership. The AASTI licenses this file to you 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 org.openengsb.ui.admin.global.menu;

import java.io.Serializable;
import java.util.ArrayList;

import javax.inject.Inject;
import javax.inject.Named;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
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.request.resource.ResourceReference;
import org.apache.wicket.resource.loader.ComponentStringResourceLoader;
import org.openengsb.core.api.security.model.SecurityAttributeEntry;
import org.openengsb.core.common.SecurityAttributeProviderImpl;
import org.openengsb.ui.admin.edb.EdbClient;
import org.openengsb.ui.admin.global.BookmarkablePageLabelLink;
import org.openengsb.ui.admin.index.Index;
import org.openengsb.ui.admin.sendEventPage.SendEventPage;
import org.openengsb.ui.admin.serviceListPage.ServiceListPage;
import org.openengsb.ui.admin.taskOverview.TaskOverview;
import org.openengsb.ui.admin.testClient.TestClient;
import org.openengsb.ui.admin.userService.UserListPage;
import org.openengsb.ui.admin.wiringPage.WiringPage;

@SuppressWarnings("serial")
public class MenuTemplate extends Panel {

    private final ArrayList<MenuItem> menuItems = new ArrayList<MenuItem>();
    private final ArrayList<String> avialableItems = new ArrayList<String>();

    private static String menuIndex;

    @Inject
    @Named("attributeStore")
    private SecurityAttributeProviderImpl attributeStore;

    public MenuTemplate(String id, String menuIndex) {
        super(id);

        MenuTemplate.menuIndex = menuIndex;
        initMainMenuItems();
        initMainMenu();
    }

    private void initMainMenuItems() {
        addMenuItem("Index", Index.class, Index.PAGE_NAME_KEY, Index.PAGE_DESCRIPTION_KEY);
        addMenuItem("UserService", UserListPage.class, UserListPage.PAGE_NAME_KEY, UserListPage.PAGE_DESCRIPTION_KEY,
            "ROLE_ADMIN");
        addMenuItem("TestClient", TestClient.class, TestClient.PAGE_NAME_KEY, TestClient.PAGE_DESCRIPTION_KEY);
        addMenuItem("SendEventPage", SendEventPage.class, SendEventPage.PAGE_NAME_KEY,
            SendEventPage.PAGE_DESCRIPTION_KEY);
        addMenuItem("ServiceListPage", ServiceListPage.class, ServiceListPage.PAGE_NAME_KEY,
            ServiceListPage.PAGE_DESCRIPTION_KEY);
        addMenuItem("TaskOverview", TaskOverview.class, TaskOverview.PAGE_NAME_KEY, TaskOverview.PAGE_DESCRIPTION_KEY);
        addMenuItem("WiringPage", WiringPage.class, WiringPage.PAGE_NAME_KEY, WiringPage.PAGE_DESCRIPTION_KEY,
            "ROLE_ADMIN");
        addMenuItem("EdbClient", EdbClient.class, EdbClient.PAGE_NAME_KEY, EdbClient.PAGE_DESCRIPTION_KEY);
    }

    private void initMainMenu() {
        if (MenuTemplate.getActiveIndex() == null || !avialableItems.contains(MenuTemplate.getActiveIndex())) {
            // update menu item to index, because page index is not found!
            MenuTemplate.menuIndex = "Index";
        }

        // generate main navigation
        ListView<MenuItem> menuItemsList = new ListView<MenuItem>("menuItems", menuItems) {
            @Override
            protected void populateItem(ListItem<MenuItem> item) {
                MenuItem menuItem = item.getModelObject();
                item.add(menuItem.getLink());

                Label itemDescription = new Label("itemDescripton", menuItem.getItemDescription());
                item.add(itemDescription);

                if (menuItem.getIcon() != null) {
                    String backgroundAttribute = "background:url('resources/"
                            + menuItem.getIcon().getExtension() + "') no-repeat scroll left center transparent;";
                    item.add(AttributeModifier.replace("style", backgroundAttribute));
                }

                if (item.getIndex() == menuItems.size() - 1) {
                    item.add(AttributeModifier.replace("class", "lastElement"));
                }

                // set menu item to active
                if (menuItem.getItemName().equals(MenuTemplate.getActiveIndex())) {
                    item.add(AttributeModifier.replace("class", "activeElement"));
                }
            }
        };
        add(menuItemsList);
    }

    /**
     * get the name of the current active menu item
     */
    public static String getActiveIndex() {
        return MenuTemplate.menuIndex;
    }

    /**
     * Adds a new item to main header navigation where the index defines the name of the index, which should be the
     * class name; linkClass defines the class name to be linked to; langKey defines the language key for the text which
     * should be displayed and authority defines who is authorized to see the link
     */
    public void addMenuItem(String index, Class<? extends WebPage> linkClass, String langKey, String langDescKey,
            String... authority) {
        addMenuItem(index, linkClass, langKey, langDescKey, null, authority);
    }

    @SuppressWarnings({ "unchecked", "rawtypes" })
    public void addMenuItem(String index, Class<? extends WebPage> linkClass, String langKey, String langDescKey,
            ResourceReference icon, String... authority) {

        ComponentStringResourceLoader csrl = new ComponentStringResourceLoader();
        String label =
            csrl.loadStringResource(linkClass, langKey, getSession().getLocale(), getSession().getStyle(), "");
        String description =
            csrl.loadStringResource(linkClass, langDescKey, getSession().getLocale(), getSession().getStyle(), "");
        BookmarkablePageLabelLink pageLabelLink = new BookmarkablePageLabelLink("link", linkClass, label);
        addAuthorizationRoles(pageLabelLink, authority);

        if (icon == null) {
            menuItems.add(new MenuItem(index, pageLabelLink, description));
        } else {
            menuItems.add(new MenuItem(index, pageLabelLink, description, icon));
        }
        avialableItems.add(index);
    }

    private void addAuthorizationRoles(BookmarkablePageLabelLink<?> pageLabelLink, String... authority) {
        if (authority == null) {
            return;
        }
        for (String a : authority) {
            attributeStore.putAttribute(pageLabelLink, new SecurityAttributeEntry(a, "RENDER"));
        }
    }

    private static class MenuItem implements Serializable {
        private final String index;
        private final String itemDescription;
        private final BookmarkablePageLabelLink<? extends WebPage> link;
        private final ResourceReference icon;

        public MenuItem(String index, BookmarkablePageLabelLink<? extends WebPage> link, String itemDescription) {
            this.index = index;
            this.link = link;
            icon = null;
            this.itemDescription = itemDescription;
        }

        public MenuItem(String index, BookmarkablePageLabelLink<? extends WebPage> link, String itemDescription,
                ResourceReference icon) {
            this.index = index;
            this.link = link;
            this.icon = icon;
            this.itemDescription = itemDescription;
        }

        public String getItemName() {
            return index;
        }

        public BookmarkablePageLabelLink<? extends WebPage> getLink() {
            return link;
        }

        public ResourceReference getIcon() {
            return icon;
        }

        public String getItemDescription() {
            return itemDescription;
        }
    }

}
TOP

Related Classes of org.openengsb.ui.admin.global.menu.MenuTemplate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.