Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.tcdng.unify.web.ui.PageRequestContextUtilImpl 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;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.codec.binary.Base64;
import com.tcdng.unify.core.AbstractUnifyComponent;
import com.tcdng.unify.core.UnifyException;
import com.tcdng.unify.core.annotation.Component;
import com.tcdng.unify.core.util.DataUtils;
import com.tcdng.unify.core.util.StringUtils;
import com.tcdng.unify.web.ClientRequest;
import com.tcdng.unify.web.ControllerPathParts;
import com.tcdng.unify.web.TargetPath;
import com.tcdng.unify.web.constant.RequestParameterConstants;
import com.tcdng.unify.web.ui.constant.PageRequestParameterConstants;
import com.tcdng.unify.web.ui.widget.Document;
import com.tcdng.unify.web.ui.widget.Page;
import com.tcdng.unify.web.ui.widget.Panel;
import com.tcdng.unify.web.ui.widget.data.Hint;
import com.tcdng.unify.web.ui.widget.data.Hints;
import com.tcdng.unify.web.ui.widget.data.MessageIcon;
import com.tcdng.unify.web.ui.widget.data.ValidationInfo;
/**
* Default implementation of application page request context utility.
*
* @author The Code Department
* @since 1.0
*/
@SuppressWarnings("unchecked")
@Component(WebUIApplicationComponents.APPLICATION_PAGEREQUESTCONTEXTUTIL)
public class PageRequestContextUtilImpl extends AbstractUnifyComponent implements PageRequestContextUtil {
private static final String COMMAND = "COMMAND";
public static final String COMMAND_TAG = "COMMAND_TAG";
private static final String COMMAND_RESULT_MAPPING = "COMMAND_RESULT_MAPPING";
private static final String COMMAND_POSTRESPONSE_PATH = "COMMAND_POSTRESPONSE_PATH";
private static final String TRIGGER_WIDGETID = "TRIGGER_WIDGETID";
private static final String PAGENAME_ALIASES = "PAGENAME_ALIASES";
private static final String REFRESH_PANEL_LONGNAMES = "REFRESH_PANEL_LONGNAMES";
private static final String REFRESH_PANELS = "REFRESH_PANELS";
private static final String SWITCHED_PANELS = "SWITCHED_PANELS";
private static final String REQUEST_DOCUMENT = "REQUEST_DOCUMENT";
private static final String REQUEST_PAGE = "REQUEST_PAGE";
private static final String CONTENT_PAGE = "CONTENT_PAGE";
private static final String REQUEST_POPUP_NAME = "REQUEST_POPUP_NAME";
private static final String REQUEST_POPUP_PANEL = "REQUEST_POPUP_PANEL";
private static final String REQUEST_NONCE = "REQUEST_NONCE";
private static final String RESPONSE_PATHPARTS = "RESPONSE_PATHPARTS";
private static final String CLOSED_PAGEPATHS = "CLOSED_PAGEPATHS";
private static final String DYNAMICPANEL_PAGENAME = "DYNAMICPANEL_PAGENAME";
private static final String USER_HINT_LIST = "USER_HINT_LIST";
private static final String VALIDATION_INFO_LIST = "VALIDATION_INFO_LIST";
private static final String ON_SAVE_LIST = "ON_SAVE_LIST";
private static final String FOCUS_ON_WIDGET = "FOCUS_ON_WIDGET";
private static final String CONSIDER_DEFAULT_FOCUS = "CONSIDER_DEFAULT_FOCUS";
private static final String DEFAULT_FOCUS_ON_WIDGET = "PAGEREQUEST.DEFAULT_FOCUS_ON_WIDGET";
private static final String CONTENT_SCROLL_RESET = "CONTENT_SCROLL_RESET";
private static final String LOW_LATENCY_REQUEST = "LOW_LATENCY_REQUEST";
private static final String DEBOUNCE_WIDGET = "DEBOUNCE_WIDGET";
private static final String NO_PUSH_WIDGET_ID_LIST = "NO_PUSH_WIDGET_ID_LIST";
@Override
public void setRequestPage(Page page) throws UnifyException {
setRequestAttribute(REQUEST_PAGE, page);
}
@Override
public Page getRequestPage() throws UnifyException {
return (Page) getRequestAttribute(REQUEST_PAGE);
}
@Override
public void setContentPage(Page page) throws UnifyException {
setRequestAttribute(CONTENT_PAGE, page);
}
@Override
public Page getContentPage() throws UnifyException {
return (Page) getRequestAttribute(CONTENT_PAGE);
}
@Override
public void setRequestPopupName(String longName) throws UnifyException {
setRequestAttribute(REQUEST_POPUP_NAME, longName);
}
@Override
public String getRequestPopupName() throws UnifyException {
return (String) getRequestAttribute(REQUEST_POPUP_NAME);
}
@Override
public void setRequestPopupPanel(Panel panel) throws UnifyException {
setRequestAttribute(REQUEST_POPUP_PANEL, panel);
}
@Override
public Panel getRequestPopupPanel() throws UnifyException {
return (Panel) getRequestAttribute(REQUEST_POPUP_PANEL);
}
@Override
public void setRequestDocument(Document document) throws UnifyException {
setRequestAttribute(REQUEST_DOCUMENT, document);
}
@Override
public Document getRequestDocument() throws UnifyException {
return (Document) getRequestAttribute(REQUEST_DOCUMENT);
}
@Override
public void setRequestCommand(RequestCommand requestCommand) throws UnifyException {
setRequestAttribute(COMMAND, requestCommand);
}
@Override
public RequestCommand getRequestCommand() throws UnifyException {
return (RequestCommand) getRequestAttribute(COMMAND);
}
@Override
public void setRequestCommandTag(String cmdTag) throws UnifyException {
setRequestAttribute(COMMAND_TAG, cmdTag);
}
@Override
public String getRequestCommandTag() throws UnifyException {
return (String) getRequestAttribute(COMMAND_TAG);
}
@Override
public void setTriggerWidgetId(String widgetId) throws UnifyException {
setRequestAttribute(TRIGGER_WIDGETID, widgetId);
}
@Override
public String getTriggerWidgetId() throws UnifyException {
return (String) getRequestAttribute(TRIGGER_WIDGETID);
}
@Override
public void setCommandResultMapping(String resultMapping) throws UnifyException {
setRequestAttribute(COMMAND_RESULT_MAPPING, resultMapping);
}
@Override
public String getCommandResultMapping() throws UnifyException {
return (String) getRequestAttribute(COMMAND_RESULT_MAPPING);
}
@Override
public void setCommandResponsePath(TargetPath targetPath) throws UnifyException {
setRequestAttribute(COMMAND_POSTRESPONSE_PATH, targetPath);
}
@Override
public TargetPath getCommandResponsePath() throws UnifyException {
return (TargetPath) getRequestAttribute(COMMAND_POSTRESPONSE_PATH);
}
@Override
public int getRequestTriggerDataIndex() throws UnifyException {
String widgetId = (String) getRequestAttribute(TRIGGER_WIDGETID);
if (widgetId != null) {
int dindex = widgetId.lastIndexOf('d');
if (dindex > 0) {
try {
return Integer.parseInt(widgetId.substring(dindex + 1));
} catch (Exception e) {
}
}
}
return -1;
}
@Override
public T getRequestTargetValue(Class targetClazz) throws UnifyException {
return DataUtils.convert(targetClazz, getRequestAttribute(PageRequestParameterConstants.TARGET_VALUE));
}
@Override
public String getRequestConfirmMessage() throws UnifyException {
return DataUtils.convert(String.class, getRequestAttribute(PageRequestParameterConstants.CONFIRM_MSG));
}
@Override
public MessageIcon getRequestConfirmMessageIcon() throws UnifyException {
return MessageIcon.getIconByInt(DataUtils.convert(int.class, getRequestAttribute(PageRequestParameterConstants.CONFIRM_MSGICON)));
}
@Override
public String getRequestConfirmParam() throws UnifyException {
return DataUtils.convert(String.class, getRequestAttribute(PageRequestParameterConstants.CONFIRM_PARAM));
}
@Override
public String getRemoteViewer() throws UnifyException {
return DataUtils.convert(String.class, getRequestAttribute(RequestParameterConstants.REMOTE_VIEWER));
}
@Override
public String getNonce() throws UnifyException {
String nonce = (String) getRequestAttribute(REQUEST_NONCE);
if (nonce == null) {
String base = Long.toString(new Date().getTime());
nonce = Base64.encodeBase64String(base.getBytes());
setRequestAttribute(REQUEST_NONCE, nonce);
}
return nonce;
}
@Override
public boolean isWithNonce() throws UnifyException {
return getRequestAttribute(REQUEST_NONCE) != null;
}
@Override
public boolean isRemoteViewer() throws UnifyException {
return StringUtils.isNotBlank(getRemoteViewer());
}
@Override
public void setResponsePathParts(ControllerPathParts respPathParts) throws UnifyException {
setRequestAttribute(RESPONSE_PATHPARTS, respPathParts);
}
@Override
public ControllerPathParts getResponsePathParts() throws UnifyException {
return (ControllerPathParts) getRequestAttribute(RESPONSE_PATHPARTS);
}
@Override
public void setClosedPagePaths(List pathIdList) throws UnifyException {
setRequestAttribute(CLOSED_PAGEPATHS, pathIdList);
}
@Override
public List getClosedPagePaths() throws UnifyException {
List pathIdList= (List) getRequestAttribute(CLOSED_PAGEPATHS);
if (pathIdList != null) {
return pathIdList;
}
return Collections.emptyList();
}
@Override
public void setDynamicPanelPageName(String pageName, String parentPageName) throws UnifyException {
List dynamicPanelNameList =
(List) getRequestAttribute(DYNAMICPANEL_PAGENAME);
if (dynamicPanelNameList == null) {
dynamicPanelNameList = new ArrayList();
setRequestAttribute(DYNAMICPANEL_PAGENAME, dynamicPanelNameList);
}
dynamicPanelNameList.add(0, new DynamicPanelNames(pageName, parentPageName));
}
@Override
public String getDynamicPanelPageName() throws UnifyException {
List dynamicPanelNameList =
(List) getRequestAttribute(DYNAMICPANEL_PAGENAME);
if (DataUtils.isNotBlank(dynamicPanelNameList)) {
return ((List) getRequestAttribute(DYNAMICPANEL_PAGENAME)).get(0).getPageName();
}
return null;
}
@Override
public String getDynamicPanelParentPageName() throws UnifyException {
List dynamicPanelNameList =
(List) getRequestAttribute(DYNAMICPANEL_PAGENAME);
if (DataUtils.isNotBlank(dynamicPanelNameList)) {
return ((List) getRequestAttribute(DYNAMICPANEL_PAGENAME)).get(0).getParentPageName();
}
return null;
}
@Override
public void clearDynamicPanelPageName() throws UnifyException {
List dynamicPanelNameList =
(List) getRequestAttribute(DYNAMICPANEL_PAGENAME);
if (DataUtils.isNotBlank(dynamicPanelNameList)) {
dynamicPanelNameList.remove(0);
}
}
@Override
public void setResponseRefreshPanels(String... longNames) throws UnifyException {
List list = new ArrayList(Arrays.asList(longNames));
setRequestAttribute(REFRESH_PANEL_LONGNAMES, list);
}
@Override
public List getResponseRefreshPanels() throws UnifyException {
return (List) getRequestAttribute(REFRESH_PANEL_LONGNAMES);
}
@Override
public boolean removeResponseRefreshPanel(String longName) throws UnifyException {
List list = getResponseRefreshPanels();
return list != null && list.remove(longName);
}
@Override
public boolean setResponseRefreshPanels(Panel... panels) throws UnifyException {
for (Panel panel : panels) {
if (panel == null) {
return false;
}
}
setRequestAttribute(REFRESH_PANELS, panels);
return true;
}
@Override
public Panel[] getResponseRefreshWidgetPanels() throws UnifyException {
return (Panel[]) getRequestAttribute(REFRESH_PANELS);
}
@Override
public void setPanelSwitchStateFlag(Panel panel) throws UnifyException {
Set switchedPanels = (Set) getRequestAttribute(SWITCHED_PANELS);
if (switchedPanels == null) {
switchedPanels = new HashSet();
setRequestAttribute(SWITCHED_PANELS, switchedPanels);
}
switchedPanels.add(panel);
}
@Override
public boolean isPanelSwitched(Panel panel) throws UnifyException {
Set switchedPanels = (Set) getRequestAttribute(SWITCHED_PANELS);
return switchedPanels != null && switchedPanels.contains(panel);
}
@Override
public void addPageAlias(String id, String... aliases) throws UnifyException {
Map> aliasMap = (Map>) getRequestAttribute(PAGENAME_ALIASES);
if (aliasMap == null) {
aliasMap = new HashMap>();
setRequestAttribute(PAGENAME_ALIASES, aliasMap);
}
Set set = aliasMap.get(id);
if (set == null) {
set = new HashSet();
aliasMap.put(id, set);
}
for (String alias : aliases) {
set.add(alias);
}
}
@Override
public Set getRequestPageNameAliases(String pageName) throws UnifyException {
Map> childAliasMap = (Map>) getRequestAttribute(PAGENAME_ALIASES);
if (childAliasMap != null && childAliasMap.containsKey(pageName)) {
return childAliasMap.get(pageName);
}
return (Set) Collections.EMPTY_SET;
}
@Override
public Map> getRequestPageNameAliases() throws UnifyException {
return (Map>) getRequestAttribute(PAGENAME_ALIASES);
}
@Override
public void addRequestValidationInfo(String pageName, ValidationInfo validationInfo) throws UnifyException {
Map validationInfos =
(Map) this.getRequestAttribute(VALIDATION_INFO_LIST);
if (validationInfos == null) {
validationInfos = new LinkedHashMap();
setRequestAttribute(VALIDATION_INFO_LIST, validationInfos);
}
ValidationInfo oldValidationInfo = validationInfos.get(pageName);
if (oldValidationInfo != null) {
if (oldValidationInfo.isPass() && !validationInfo.isPass()) {
validationInfos.put(pageName, validationInfo);
}
} else {
validationInfos.put(pageName, validationInfo);
}
}
@Override
public Collection getRequestValidationInfoList() throws UnifyException {
Map map = (Map) getRequestAttribute(VALIDATION_INFO_LIST);
if (map != null) {
return map.values();
}
return Collections.emptyList();
}
@Override
public void addOnSaveContentWidget(String widgetId) throws UnifyException {
List widgetList = (List) getRequestAttribute(ON_SAVE_LIST);
if (widgetList == null) {
widgetList = new ArrayList();
setRequestAttribute(ON_SAVE_LIST, widgetList);
}
widgetList.add(widgetId);
}
@Override
public List getOnSaveContentWidgets() throws UnifyException {
List widgetList = (List) getRequestAttribute(ON_SAVE_LIST);
if (widgetList != null) {
return widgetList;
}
return Collections.emptyList();
}
@Override
public void clearOnSaveContentWidgets() throws UnifyException {
removeRequestAttribute(ON_SAVE_LIST);
}
@Override
public void hintUser(String message, Object... params) throws UnifyException {
hintUser(Hint.MODE.INFO, message, params);
}
@Override
public void hintUser(Hint.MODE mode, String message, Object... params) throws UnifyException {
Hints hints = (Hints) getRequestAttribute(USER_HINT_LIST);
if (hints == null) {
hints = new Hints();
setRequestAttribute(USER_HINT_LIST, hints);
}
hints.add(mode, resolveSessionMessage(message, params));
}
@Override
public Hints getUserHints() throws UnifyException {
return (Hints) getRequestAttribute(USER_HINT_LIST);
}
@Override
public void clearHintUser() throws UnifyException {
removeRequestAttribute(USER_HINT_LIST);
}
@Override
public boolean setFocusOnWidgetId(String id) throws UnifyException {
if(!isRequestAttribute(FOCUS_ON_WIDGET)) {
setRequestAttribute(FOCUS_ON_WIDGET, id);
return true;
}
return false;
}
@Override
public boolean isFocusOnWidget() throws UnifyException {
return isRequestAttribute(FOCUS_ON_WIDGET);
}
@Override
public String getFocusOnWidgetId() throws UnifyException {
return (String) getRequestAttribute(FOCUS_ON_WIDGET);
}
@Override
public void considerDefaultFocusOnWidget() throws UnifyException {
setRequestAttribute(CONSIDER_DEFAULT_FOCUS, Boolean.TRUE);
}
@Override
public void setDefaultFocusOnWidgetId(String id) throws UnifyException {
setSessionAttribute(DEFAULT_FOCUS_ON_WIDGET, id);
}
@Override
public boolean isFocusOnWidgetOrDefault() throws UnifyException {
return isFocusOnWidget()
|| (isRequestAttribute(CONSIDER_DEFAULT_FOCUS) && isSessionAttribute(DEFAULT_FOCUS_ON_WIDGET));
}
@Override
public String getFocusOnWidgetIdOrDefault() throws UnifyException {
if (isFocusOnWidget()) {
return getFocusOnWidgetId();
}
return (String) getSessionAttribute(DEFAULT_FOCUS_ON_WIDGET);
}
@Override
public void clearFocusOnWidget() throws UnifyException {
removeRequestAttribute(FOCUS_ON_WIDGET);
}
@Override
public boolean isNoPushWidgets() throws UnifyException {
return getRequestAttribute(NO_PUSH_WIDGET_ID_LIST) != null;
}
@Override
public void addNoPushWidgetId(String id) throws UnifyException {
List list = (List) getRequestAttribute(NO_PUSH_WIDGET_ID_LIST);
if (list == null) {
list = new ArrayList();
setRequestAttribute(NO_PUSH_WIDGET_ID_LIST, list);
}
list.add(id);
}
@Override
public List getNoPushWidgetIds() throws UnifyException {
return (List) getRequestAttribute(NO_PUSH_WIDGET_ID_LIST);
}
@Override
public void addListItem(String listName, String item) throws UnifyException {
List list = (List) getRequestAttribute(listName);
if (list == null) {
list = new ArrayList();
setRequestAttribute(listName, list);
}
list.add(item);
}
@Override
public void addListItem(String listName, List items) throws UnifyException {
List list = (List) getRequestAttribute(listName);
if (list == null) {
list = new ArrayList();
setRequestAttribute(listName, list);
}
list.addAll(items);
}
@Override
public void registerWidgetDebounce(String widgetId) throws UnifyException {
Collection widgetIds = (Collection) getRequestAttribute(DEBOUNCE_WIDGET);
if (widgetIds == null) {
widgetIds = new ArrayList();
setRequestAttribute(DEBOUNCE_WIDGET, widgetIds);
}
widgetIds.add(widgetId);
}
@Override
public Collection getAndClearRegisteredDebounceWidgetIds() throws UnifyException {
return (Collection) removeRequestAttribute(DEBOUNCE_WIDGET);
}
@Override
public boolean isRegisteredDebounceWidgets() throws UnifyException {
return getRequestAttribute(DEBOUNCE_WIDGET) != null;
}
@Override
public void setContentScrollReset() throws UnifyException {
setRequestAttribute(CONTENT_SCROLL_RESET, Boolean.TRUE);
}
@Override
public boolean isContentScrollReset() throws UnifyException {
return getRequestAttribute(boolean.class, CONTENT_SCROLL_RESET);
}
@Override
public void setLowLatencyRequest() throws UnifyException {
setRequestAttribute(LOW_LATENCY_REQUEST, Boolean.TRUE);
}
@Override
public boolean isLowLatencyRequest() throws UnifyException {
return getRequestAttribute(boolean.class, LOW_LATENCY_REQUEST);
}
@Override
public void clearRequestContext() throws UnifyException {
setRequestAttribute(PageRequestParameterConstants.TARGET_VALUE, null);
setRequestAttribute(PageRequestParameterConstants.WINDOW_NAME, null);
setRequestAttribute(PageRequestParameterConstants.CONFIRM_MSG, null);
setRequestAttribute(PageRequestParameterConstants.CONFIRM_MSGICON, null);
setRequestAttribute(PageRequestParameterConstants.CONFIRM_PARAM, null);
setRequestAttribute(COMMAND, null);
setRequestAttribute(COMMAND_POSTRESPONSE_PATH, null);
setRequestAttribute(PAGENAME_ALIASES, null);
setRequestAttribute(REFRESH_PANEL_LONGNAMES, null);
setRequestAttribute(REQUEST_DOCUMENT, null);
setRequestAttribute(REQUEST_PAGE, null);
setRequestAttribute(RESPONSE_PATHPARTS, null);
setRequestAttribute(USER_HINT_LIST, null);
setRequestAttribute(VALIDATION_INFO_LIST, null);
}
@Override
public void extractRequestParameters(ClientRequest request) throws UnifyException {
setRequestAttribute(PageRequestParameterConstants.TARGET_VALUE,
request.getParameter(PageRequestParameterConstants.TARGET_VALUE));
setRequestAttribute(PageRequestParameterConstants.WINDOW_NAME,
request.getParameter(PageRequestParameterConstants.WINDOW_NAME));
setRequestAttribute(PageRequestParameterConstants.CONFIRM_MSG,
request.getParameter(PageRequestParameterConstants.CONFIRM_MSG));
setRequestAttribute(PageRequestParameterConstants.CONFIRM_MSGICON,
request.getParameter(PageRequestParameterConstants.CONFIRM_MSGICON));
setRequestAttribute(PageRequestParameterConstants.CONFIRM_PARAM,
request.getParameter(PageRequestParameterConstants.CONFIRM_PARAM));
setRequestAttribute(RequestParameterConstants.REMOTE_VIEWER,
request.getParameter(RequestParameterConstants.REMOTE_VIEWER));
setRequestAttribute(RequestParameterConstants.REMOTE_SESSION_ID,
request.getParameter(RequestParameterConstants.REMOTE_SESSION_ID));
}
@Override
protected void onInitialize() throws UnifyException {
}
@Override
protected void onTerminate() throws UnifyException {
}
private class DynamicPanelNames {
String pageName;
String parentPageName;
public DynamicPanelNames(String pageName, String parentPageName) {
this.pageName = pageName;
this.parentPageName = parentPageName;
}
public String getPageName() {
return pageName;
}
public String getParentPageName() {
return parentPageName;
}
}
}