All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tcdng.unify.web.ui.widget.writer.container.FlyoutMenuWriter Maven / Gradle / Ivy

/*
 * Copyright 2018-2023 The Code Department.
 * 
 * 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 com.tcdng.unify.web.ui.widget.writer.container;

import java.util.ArrayList;
import java.util.List;

import com.tcdng.unify.core.UnifyException;
import com.tcdng.unify.core.annotation.Component;
import com.tcdng.unify.core.annotation.Writes;
import com.tcdng.unify.core.constant.ApplicationAttributeConstants;
import com.tcdng.unify.core.ui.Menu;
import com.tcdng.unify.core.ui.MenuItem;
import com.tcdng.unify.core.ui.MenuItemSet;
import com.tcdng.unify.core.ui.MenuSet;
import com.tcdng.unify.core.util.DataUtils;
import com.tcdng.unify.core.util.StringUtils;
import com.tcdng.unify.core.util.json.JsonWriter;
import com.tcdng.unify.web.ui.widget.Container;
import com.tcdng.unify.web.ui.widget.ResponseWriter;
import com.tcdng.unify.web.ui.widget.Widget;
import com.tcdng.unify.web.ui.widget.panel.AbstractFlyoutMenu;
import com.tcdng.unify.web.ui.widget.panel.FlyoutMenu;
import com.tcdng.unify.web.ui.widget.writer.AbstractPanelWriter;
import com.tcdng.unify.web.util.HtmlUtils;

/**
 * Flyout menu writer.
 * 
 * @author The Code Department
 * @since 1.0
 */
@Writes(FlyoutMenu.class)
@Component("flyoutmenu-writer")
public class FlyoutMenuWriter extends AbstractPanelWriter {

    private static final int DYNAMIC_CHILD_OFFSET = 10;

    private static final String MENU_CATEGORY_CLASSBASE = "opcat";

    private static final String MENUITEM_CATEGORY_CLASSBASE = "mcat";

    private static final String ORIGINAL_MENU_PATHID = "ORIGINAL_MENU_PATHID";

    @Override
    protected void doWriteBehavior(ResponseWriter writer, Widget widget) throws UnifyException {
        FlyoutMenu flyoutMenu = (FlyoutMenu) widget;
        List menuWinIdList = new ArrayList();
        for (String id : flyoutMenu.getActiveMenuItemIds()) {
            MenuItem menuItem = flyoutMenu.getActiveMenuItem(id);
            if (menuItem.isMain()) {
                String popupId = "pop_" + id;
                String popupContentId = "popc_" + id;
                String menuWinId = "win_" + id;
                String json = new JsonWriter()
                                    .beginObject()
                                        .write("menuWinId", menuWinId)
                                        .write("windowId", flyoutMenu.getSliderWinId())
                                        .write("popupId", popupId)
                                        .write("popupContentId", popupContentId)
                                        .write("vertical", flyoutMenu.isVertical())
                                    .endObject().toString();
                writeOpenPopupJS(writer, flyoutMenu, "onmouseover", id, widget.getBinding(), null, popupId, 500,
                        "repositionmenupopup", json, null, null);
                menuWinIdList.add(menuWinId);
            }
        }

        writer.beginFunction("ux.rigFlyoutMenu");
        writer.writeParam("pId", flyoutMenu.getId());
        writer.writeParam("pContId", flyoutMenu.getContainerId());
        // Resolves out of bean context error which usually happens of menu reload
        String originalPathId = (String) getSessionAttribute(ORIGINAL_MENU_PATHID);
        if (!StringUtils.isBlank(originalPathId)) {
            writer.writeCommandURLParam("pCmdURL", originalPathId);
        } else {
            originalPathId = getRequestContextUtil().getResponsePathParts().getControllerPathId();
            setSessionAttribute(ORIGINAL_MENU_PATHID, originalPathId);
            writer.writeCommandURLParam("pCmdURL");
        }

        writer.writeParam("pMenuWinId", DataUtils.toArray(String.class, menuWinIdList));
        writer.writeParam("pNavId", flyoutMenu.getNavId());
        writer.writeParam("pVertical", flyoutMenu.isVertical());

        MenuSet menuSet = (MenuSet) getApplicationAttribute(ApplicationAttributeConstants.APPLICATION_MENUSET);
        if (menuSet.isShowSelect()) {
            writer.writeParam("pSelId", flyoutMenu.getSelectId());
            writer.writeParam("pCurSelId", flyoutMenu.getCurrentSelCtrl().getId());
        }

        JsonWriter itemsJson = new JsonWriter();
        itemsJson.beginArray();
        for (String id : flyoutMenu.getActiveMenuItemIds()) {
            MenuItem menuItem = flyoutMenu.getActiveMenuItem(id);
            if (getViewDirective(menuItem.getPrivilege()).isVisible()) {
                if (!StringUtils.isBlank(menuItem.getActionPath())) {
                    itemsJson.beginObject();
                    itemsJson.write("id",id);
                    itemsJson.write("main", menuItem.isMain());
                    itemsJson.write("actionPath", getContextURL(menuItem.getActionPath()));
                    if (!StringUtils.isBlank(menuItem.getOriginPath())) {
                        itemsJson.write("originPath", menuItem.getOriginPath());
                    }
                    itemsJson.endObject();
                }
            }
        }
        itemsJson.endArray();
        writer.writeParam("pMenuItems", itemsJson);

        writer.endFunction();
    }

    @Override
    protected void writeLayoutContent(ResponseWriter writer, Container container) throws UnifyException {
        AbstractFlyoutMenu flyoutMenu = (AbstractFlyoutMenu) container;
        flyoutMenu.clear();
        writer.write("
"); writer.write("
"); if (flyoutMenu.isVertical()) { writer.write("
"); } else { writer.write("
"); } writer.write("
"); writer.write("
    "); StringBuilder psb = new StringBuilder(); // Menu set select MenuSet menuSet = (MenuSet) getApplicationAttribute(ApplicationAttributeConstants.APPLICATION_MENUSET); boolean isShowMenu = true; if (menuSet.isShowSelect()) { List visibleIndexList = new ArrayList(); for (int i = 0; i < menuSet.size(); i++) { if (getViewDirective(menuSet.getMenu(i).getPrivilege()).isVisible()) { visibleIndexList.add(i); } } if (!visibleIndexList.isEmpty() && !visibleIndexList.contains(flyoutMenu.getCurrentSel())) { flyoutMenu.setCurrentSel(visibleIndexList.get(0)); } writer.write("
  • "); isShowMenu = !visibleIndexList.isEmpty(); } if (isShowMenu && !menuSet.isEmpty()) { // Menu items int childIndex = DYNAMIC_CHILD_OFFSET; Menu menu = menuSet.getMenu(flyoutMenu.getCurrentSel()); String opcat = MENU_CATEGORY_CLASSBASE; String mcat = MENUITEM_CATEGORY_CLASSBASE; if (StringUtils.isNotBlank(menu.getColorScheme())) { String scheme = menu.getColorScheme(); opcat += scheme; mcat += scheme; } else { opcat = getUserColorStyleClass(opcat); mcat = getUserColorStyleClass(mcat); } for (MenuItemSet menuItemSet : menu.getMenuItemSetList()) { if (getViewDirective(menuItemSet.getPrivilege()).isVisible()) { String menuId = flyoutMenu.getNamingIndexedId(childIndex++); flyoutMenu.addActiveMenuItem(menuId, menuItemSet); writer.write("
  • "); writer.write(""); writer.writeWithHtmlEscape(resolveSessionMessage(menuItemSet.getCaption())); writer.write(""); writer.write("
  • "); List menuItemList = menuItemSet.getMenuItemList(); if (!menuItemList.isEmpty()) { psb.append(""); psb.append(""); psb.append("
"); } } } } writer.write(""); writer.write("
"); writer.write("
"); writer.write("
"); writer.write("
"); writer.writeStructureAndContent(flyoutMenu.getCurrentSelCtrl()); writer.write(psb.toString()); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy