gr.abiss.calipso.wicket.helpMenu.HelpMenuPanel.java Source code

Java tutorial

Introduction

Here is the source code for gr.abiss.calipso.wicket.helpMenu.HelpMenuPanel.java

Source

/*
 * Copyright (c) 2007 - 2010 Abiss.gr <info@abiss.gr>  
 *
 *  This file is part of Calipso, a software platform by www.Abiss.gr.
 *
 *  Calipso is free software: you can redistribute it and/or modify 
 *  it under the terms of the GNU Affero General Public License as published by 
 *  the Free Software Foundation, either version 3 of the License, or 
 *  (at your option) any later version.
 * 
 *  Calipso is distributed in the hope that it will be useful, 
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 *  GNU Affero General Public License for more details.
 * 
 *  You should have received a copy of the GNU General Public License 
 *  along with Calipso. If not, see http://www.gnu.org/licenses/agpl.html
 */

package gr.abiss.calipso.wicket.helpMenu;

import gr.abiss.calipso.domain.AssetType;
import gr.abiss.calipso.domain.ItemSearch;
import gr.abiss.calipso.domain.SavedSearch;
import gr.abiss.calipso.domain.Space;
import gr.abiss.calipso.domain.State;
import gr.abiss.calipso.domain.User;
import gr.abiss.calipso.exception.CalipsoSecurityException;
import gr.abiss.calipso.util.BreadCrumbUtils;
import gr.abiss.calipso.util.ItemUtils;
import gr.abiss.calipso.wicket.BasePanel;
import gr.abiss.calipso.wicket.ItemFormPage;
import gr.abiss.calipso.wicket.ItemFormPanel;
import gr.abiss.calipso.wicket.ItemListPanel;
import gr.abiss.calipso.wicket.SingleSpacePanel;
import gr.abiss.calipso.wicket.SpacePage;
import gr.abiss.calipso.wicket.asset.AssetSpacePage;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.extensions.breadcrumb.BreadCrumbLink;
import org.apache.wicket.extensions.breadcrumb.IBreadCrumbModel;
import org.apache.wicket.extensions.breadcrumb.IBreadCrumbParticipant;
import org.apache.wicket.extensions.breadcrumb.panel.BreadCrumbPanel;
import org.apache.wicket.extensions.breadcrumb.panel.IBreadCrumbPanelFactory;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.model.Model;
import org.apache.wicket.util.value.ValueMap;
import org.hibernate.Hibernate;

/**
 * Help menu is a menu, that has the most
 * standard user actions for every page.
 *  
 *
 */
public class HelpMenuPanel extends BasePanel {

    private static final long serialVersionUID = 1L;
    protected static final Logger logger = Logger.getLogger(HelpMenuPanel.class);

    public HelpMenuPanel(String id) {
        super(id);
        init();
    }

    public HelpMenuPanel(String id, IBreadCrumbModel breadCrumbModel) {
        super(id, breadCrumbModel);
        init();
    }

    private void init() {
        final Space space = getCurrentSpace();
        final boolean hasBreadCrumbModel = getBreadCrumbModel() != null;
        if (space == null) {
            WebMarkupContainer empty = new WebMarkupContainer("availableAssetTypesListMenu");
            add(new EmptyPanel("assetTypesHeadingLabel").setRenderBodyOnly(true).setVisible(false));
            empty.setVisible(false);
            add(empty.setRenderBodyOnly(true));
            add(new Label("spaceCreateLink").setVisible(false));
            WebMarkupContainer spaceLink = new WebMarkupContainer("spaceLink");
            spaceLink.setVisible(true);
            add(spaceLink);

        } else {
            if (getCalipso().isAllowedToCreateNewItem(getPrincipal(), space)) {
                // link to create current space
                if (hasBreadCrumbModel) {
                    BreadCrumbLink spaceCreateLink = new BreadCrumbLink("spaceCreateLink", getBreadCrumbModel()) {
                        private static final long serialVersionUID = 1L;

                        @Override
                        protected IBreadCrumbParticipant getParticipant(String id) {
                            List<IBreadCrumbParticipant> breadCrumbList = getBreadCrumbModel()
                                    .allBreadCrumbParticipants();
                            int siz = breadCrumbList.size();
                            if (breadCrumbList.get(siz - 1).equals(getBreadCrumbModel().getActive())) {
                                breadCrumbList.remove(siz - 1);
                            }
                            return new ItemFormPanel(id, getBreadCrumbModel());
                        }
                    };
                    add(spaceCreateLink);
                } else {
                    Link spaceCreateLink = new Link("spaceCreateLink") {
                        private static final long serialVersionUID = 1L;

                        @Override
                        public void onClick() {
                            setResponsePage(ItemFormPage.class);
                        }
                    };
                    add(spaceCreateLink);
                }

            } else {
                add(new Label("spaceCreateLink").setVisible(false));
            }
            if (hasBreadCrumbModel) {

                BreadCrumbLink spaceLink = new BreadCrumbLink("spaceLink", getBreadCrumbModel()) {
                    private static final long serialVersionUID = 1L;

                    @Override
                    protected IBreadCrumbParticipant getParticipant(String id) {
                        List<IBreadCrumbParticipant> breadCrumbList = getBreadCrumbModel()
                                .allBreadCrumbParticipants();
                        int siz = breadCrumbList.size();
                        if (breadCrumbList.get(siz - 1).equals(getBreadCrumbModel().getActive())) {
                            breadCrumbList.remove(siz - 1);
                        }
                        ItemSearch itemSearch = new ItemSearch(getCurrentSpace(), getPrincipal(), this,
                                HelpMenuPanel.this.getCalipso());
                        SingleSpacePanel singleSpacePanel = new SingleSpacePanel(id, getBreadCrumbModel(),
                                itemSearch);
                        return singleSpacePanel;
                    }
                };
                add(spaceLink.setRenderBodyOnly(getPrincipal().isAnonymous()));
                spaceLink.add(new Label("spaceNameLabel", localize(space.getNameTranslationResourceKey())));
            } else {
                Link spaceLink = new Link("spaceLink") {
                    private static final long serialVersionUID = 1L;

                    @Override
                    public void onClick() {
                        setResponsePage(SpacePage.class);
                    }
                };
                add(spaceLink.setRenderBodyOnly(getPrincipal().isAnonymous()));
                spaceLink.add(new Label("spaceNameLabel", localize(space.getNameTranslationResourceKey())));
            }

            List<AssetType> visibleAssetTypes = getCalipso().findAllAssetTypesForSpace(space);
            boolean showAssets = CollectionUtils.isNotEmpty(visibleAssetTypes) && !getPrincipal().isAnonymous();
            RenderedClazzListView availableAssetTypesListMenu = new RenderedClazzListView(
                    "availableAssetTypesListMenu", visibleAssetTypes);
            availableAssetTypesListMenu.setRenderBodyOnly(false);
            add(new Label("assetTypesHeadingLabel", localize("asset.assetTypes")).setVisible(showAssets));
            add(availableAssetTypesListMenu.setVisible(showAssets));
            // render message if no asset types exist
            //         if(CollectionUtils.isEmpty(visibleAssetTypes) || getPrincipal().isAnonymous()){
            //            availableAssetTypesListMenu.setVisible(false);
            //            add(new Label("noAssetTypes", localize("asset.no.assetTypes.exist")).setVisible(!getPrincipal().isAnonymous()));
            //         }
            //         else{
            //            add(new Label("noAssetTypes", "").setVisible(false));
            //         }
        }
        // searches don't depend on spaces
        List<SavedSearch> visibleReports = new ArrayList<SavedSearch>(
                getCalipso().findVisibleSearches(getPrincipal()));
        add(new Label("reports", localize("reports")));
        if (CollectionUtils.isNotEmpty(visibleReports)) {
            add(new ListView("visibleSearchListView", visibleReports) {
                private static final long serialVersionUID = 1L;

                @Override
                protected void populateItem(ListItem listItem) {

                    final SavedSearch savedSearch = (SavedSearch) listItem.getModelObject();
                    if (getBreadCrumbModel() != null && space != null) {
                        BreadCrumbLink savedSearchBreadCrumbLink = new BreadCrumbLink("visbleSearchItem",
                                getBreadCrumbModel()) {

                            private static final long serialVersionUID = 1L;

                            @Override
                            protected IBreadCrumbParticipant getParticipant(String id) {
                                //create PageParameters and ItemSearch classes
                                PageParameters params = new PageParameters(savedSearch.getQueryString(), ",");
                                ItemSearch itemSearch = null;
                                try {
                                    itemSearch = ItemUtils.getItemSearch(getPrincipal(), params, this,
                                            HelpMenuPanel.this.getCalipso());
                                } catch (CalipsoSecurityException e) {
                                    e.printStackTrace();
                                }
                                setCurrentItemSearch(itemSearch);
                                BreadCrumbUtils.removePreviousBreadCrumbPanel(getBreadCrumbModel());
                                return new ItemListPanel(id, getBreadCrumbModel(), savedSearch.getName());
                            }
                        };

                        listItem.add(savedSearchBreadCrumbLink);
                        savedSearchBreadCrumbLink.add(new Label("visbleSearchItemLabel", savedSearch.getName()));
                    } else {
                        listItem.add(new EmptyPanel("visbleSearchItem").setVisible(false));
                    }
                }

            });

            add(new Label("noReports", "").setVisible(false));
        }
        // if there are no visible reports
        else {
            add(new EmptyPanel("visibleSearchListView").setVisible(false));
            add(new Label("noReports", localize("reports.none.available")));
        }

    }

    private class RenderedClazzListView extends ListView {

        private static final long serialVersionUID = 1L;

        public RenderedClazzListView(String id, List<AssetType> list) {
            super(id, list);
        }

        @Override
        protected void populateItem(ListItem item) {
            final AssetType assetType = (AssetType) item.getModelObject();
            Link link = new Link("space") {

                private static final long serialVersionUID = 1L;

                @Override
                public void onClick() {
                    setResponsePage(new AssetSpacePage(assetType));
                }
            };
            link.add(
                    new Label("itemLabel", HelpMenuPanel.this.localize(assetType.getNameTranslationResourceKey())));
            item.add(link);
        }
    }
}