Package org.wso2.carbon.ui

Source Code of org.wso2.carbon.ui.CarbonUIUtil

/*
* Copyright 2005-2007 WSO2, Inc. (http://wso2.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 org.wso2.carbon.ui;

import org.apache.axis2.context.ConfigurationContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.osgi.framework.BundleContext;
import org.wso2.carbon.CarbonConstants;
import org.wso2.carbon.ui.deployment.beans.CarbonUIDefinitions;
import org.wso2.carbon.ui.deployment.beans.Menu;
import org.wso2.carbon.ui.internal.CarbonUIServiceComponent;
import org.wso2.carbon.utils.CarbonUtils;
import org.wso2.carbon.utils.ConfigurationContextService;
import org.wso2.carbon.utils.NetworkUtils;
import org.wso2.carbon.base.ServerConfiguration;
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;

/**
* Utility class for Carbon UI
*/
public class CarbonUIUtil {
    private static Log log = LogFactory.getLog(CarbonUIUtil.class);
    private static BundleContext bundleContext = null;

    //To store the product specific params
    private static HashMap productParams = new HashMap();

    /**
     * Get a proxy object to the business logic implementation class.
     * <p/>
     * This proxy could be a handle to an OSGi service or a Web services client
     *
     * @param clientClassObject Web services client
     * @param osgiObjectClass   OSGi service class
     * @param session           The HTTP Session
     * @return Proxy object
     * @deprecated Do not use this method. Simply use the relevant client.
     */
    public static Object getServerProxy(Object clientClassObject,
                                        Class osgiObjectClass,
                                        HttpSession session) {
        return clientClassObject;
    }

    public static void setBundleContext(BundleContext context) {
        bundleContext = context;
    }

    public static BundleContext getBundleContext() {
        return bundleContext;
    }

    public static String getIndexPageURL(ServerConfiguration serverConfig) {
        return serverConfig.getFirstProperty(CarbonConstants.INDEX_PAGE_URL);
    }

    public static String getIndexPageURL(ServletContext servletContext, HttpSession httpSession) {
        String url;
        Object obj = httpSession.getAttribute(CarbonConstants.INDEX_PAGE_URL);
        if (obj != null && obj instanceof String) {
            // Index Page URL is present in the servlet session
            url = (String) obj;
        } else {
            url = (String) servletContext.getAttribute(CarbonConstants.INDEX_PAGE_URL);
        }
        return url;
    }

    public static String getServerURL(ServerConfiguration serverConfig) {
        ConfigurationContext serverCfgCtx =
                CarbonUIServiceComponent.getConfigurationContextService().getServerConfigContext();
        return CarbonUtils.getServerURL(serverConfig, serverCfgCtx);
    }

    public static String getServerURL(ServletContext servletContext, HttpSession httpSession) {
        return CarbonUtils.getServerURL(servletContext, httpSession,
                CarbonUIServiceComponent.
                        getConfigurationContextService().getServerConfigContext());
    }

    public static boolean isSuperTenant(HttpServletRequest request) {
        return request.getSession().getAttribute(MultitenantConstants.IS_SUPER_TENANT) != null &&
                request.getSession().getAttribute(MultitenantConstants.IS_SUPER_TENANT)
                        .equals(Boolean.toString(true));
    }

    public static String https2httpURL(String url) {
        if (url.indexOf("${carbon.https.port}") != -1) {
            String httpPort = CarbonUtils.getTransportPort(CarbonUIServiceComponent
                    .getConfigurationContextService(), "http")
                    + "";
            url = url.replace("${carbon.https.port}", httpPort);
        } else {
            // TODO: This is a hack to gaurd against the above if condition failing.
            // Need to dig into the root of the problem
            url = url.replace("https", "http");
            String httpsPort = CarbonUtils.getTransportPort(CarbonUIServiceComponent
                    .getConfigurationContextService(), "https")
                    + "";
            String httpPort = CarbonUtils.getTransportPort(CarbonUIServiceComponent
                    .getConfigurationContextService(), "http")
                    + "";
            url = url.replace(httpsPort, httpPort);
        }
        return url;
    }

    /**
     * Returns url to admin console. eg: https://192.168.1.201:9443/wso2/carbon
     *
     * @param request The HTTPServletRequest
     * @return The URL of the Admin Console
     */
    public static String getAdminConsoleURL(HttpServletRequest request) {

        // Hostname
        String hostName = "localhost";
        try {
            hostName = NetworkUtils.getLocalHostname();
        } catch (Exception ignored) {
        }

        // HTTPS port
        String mgtConsoleTransport = CarbonUtils.getManagementTransport();
        ConfigurationContextService configContextService = CarbonUIServiceComponent
            .getConfigurationContextService();
        int httpsPort = CarbonUtils.getTransportPort(configContextService, mgtConsoleTransport);
        int httpsProxyPort =
            CarbonUtils.getTransportProxyPort(configContextService.getServerConfigContext(),
                                              mgtConsoleTransport);

        // Context
        String context = request.getContextPath();
        if ("/".equals(context)) {
            context = "";
        }

        if (httpsPort == -1) {
            return null;
        }
        return "https://" + hostName + ":" + (httpsProxyPort != -1? httpsProxyPort : httpsPort) +
            context + "/carbon/";
    }

    /**
     * Returns url to admin console.
     *
     * @param context Webapp context root of the Carbon webapp
     * @return The URL of the Admin Console
     */
    public static String getAdminConsoleURL(String context) {
        // Hostname
        String hostName = "localhost";
        try {
            hostName = NetworkUtils.getLocalHostname();
        } catch (Exception ignored) {
        }

        // HTTPS port
        String mgtConsoleTransport = CarbonUtils.getManagementTransport();
        ConfigurationContextService configContextService = CarbonUIServiceComponent
            .getConfigurationContextService();
        int httpsPort = CarbonUtils.getTransportPort(configContextService, mgtConsoleTransport);
        int httpsProxyPort =
            CarbonUtils.getTransportProxyPort(configContextService.getServerConfigContext(),
                                              mgtConsoleTransport);
        // Context
        if ("/".equals(context)) {
            context = "";
        }
        return "https://" + hostName + ":" + (httpsProxyPort != -1? httpsProxyPort : httpsPort) +
            context + "/carbon/";
    }

    /**
     * Get a ServerConfiguration Property
     *
     * @param propertyName Name of the property
     * @return the property
     */
    public static String getServerConfigurationProperty(String propertyName) {
        try {
            ServerConfiguration serverConfig = CarbonUIServiceComponent.getServerConfiguration();
            return serverConfig.getFirstProperty(propertyName);
        } catch (Exception e) {
            String msg = "ServerConfiguration Service not available";
            log.error(msg, e);
        }

        return null;
    }

    public static boolean isContextRegistered(ServletConfig config, String context) {
        URL url;
        try {
            url = config.getServletContext().getResource(context);
        } catch (MalformedURLException e) {
            return false;
        }
        if (url == null) {
            return false;
        } else if (url.toString().indexOf(context) != -1) {
            return true;
        }
        return false;
    }

    /**
     * Returns internationalized string for supplied key.
     *
     * @param key        - key to look for
     * @param i18nBundle - resource bundle
     * @param language   - language
     * @return internationalized key value of key, if no value can be derived
     */
    public static String geti18nString(String key, String i18nBundle, String language) {
        Locale locale = new Locale(language);
        String text = geti18nString(key, i18nBundle, locale);
        return text;
    }

    /**
     * Returns internationalized string for supplied key.
     *
     * @param key        - key to look for
     * @param i18nBundle - resource bundle
     * @param locale     - locale
     * @return internationalized key value of key, if no value can be derived
     */
    public static String geti18nString(String key, String i18nBundle, Locale locale) {
        java.util.ResourceBundle resourceBundle = null;
        try {
            resourceBundle = java.util.ResourceBundle.getBundle(i18nBundle, locale);
        } catch (java.util.MissingResourceException e) {
            if (log.isDebugEnabled()) {
                log
                        .debug("Cannot find resource bundle : " + i18nBundle + " for locale : "
                                + locale);
            }
        }

        String text = key;
        if (resourceBundle != null) {
            String tmp = null;
            try {
                tmp = resourceBundle.getString(key);
            } catch (java.util.MissingResourceException e) {
                // Missing key should not be a blocking factor for UI rendering
                if (log.isDebugEnabled()) {
                    log.debug("Cannot find resource for key :" + key);
                }
            }
            if (tmp != null) {
                text = tmp;
            }
        }
        return text;
    }

    /**
     * Removed menu item from current user's session. Only current user's menu
     * items are effected.
     *
     * @param menuId
     * @param request
     * @see CarbonUIDefinitions#removeMenuDefinition(String)
     */
    public static void removeMenuDefinition(String menuId, HttpServletRequest request) {
        // TODO : consider removing child menu items as well
        ArrayList<Menu> modifiedMenuDefs = new ArrayList<Menu>();
        Menu[] currentMenus = (Menu[]) request.getSession().getAttribute(
                MenuAdminClient.USER_MENU_ITEMS);
        boolean modified = false;
        if (currentMenus != null) {
            if (menuId != null && menuId.trim().length() > 0) {
                for (int a = 0; a < currentMenus.length; a++) {
                    Menu menu = currentMenus[a];
                    if (menu != null) {
                        if (!menuId.equals(menu.getId())) {
                            modifiedMenuDefs.add(menu);
                            modified = true;
                        } else {
                            if (log.isDebugEnabled()) {
                                log.debug("Removing menu item : " + menuId);
                            }
                        }
                    }
                }
                if (modified) {
                    Menu[] newMenuDefs = new Menu[modifiedMenuDefs.size()];
                    newMenuDefs = modifiedMenuDefs.toArray(newMenuDefs);
                    request.getSession().setAttribute(MenuAdminClient.USER_MENU_ITEMS, newMenuDefs);
                }
            }
        }
    }

    public static String getBundleResourcePath(String resourceName) {
        if (resourceName == null || resourceName.length() == 0)
            return null;

        String resourcePath = resourceName;
        resourcePath = resourcePath.startsWith("/") ? resourcePath.substring(1) : resourcePath;
        resourcePath = (resourcePath.lastIndexOf('/') != -1) ? resourcePath.substring(0,
                resourcePath.indexOf('/')) : resourcePath;

        return resourcePath;
    }

    /**
     * This method is a helper method for checking UI permissions.
     */
    @SuppressWarnings("unchecked")
    public static boolean isUserAuthorized(HttpServletRequest request, String resource) {
        boolean isAuthorized = false;
        List<String> permissions = (List<String>) request.getSession().getAttribute(
                CarbonConstants.UI_USER_PERMISSIONS);
        if (permissions == null) {
            return false;
        }

        for (String permission : permissions) {
            if (resource.startsWith(permission)) {
                isAuthorized = true;
                break;
            }
        }

        return isAuthorized;
    }

    /**
     * Method is used to retrive product xml params
     *
     * @param key = product xml key
     * @return product xml value
     */
    public static Object getProductParam(String key) {
        return productParams.get(key);
    }

    public static void setProductParam(String key, Object value) {
        productParams.put(key, value);
    }

    /**
     * Returns home page location for "Home" link in Carbon UI menu.
     * If defaultHomePage property is available in product.xml this method will return it and if not it'll return
     * default ../admin/index.jsp
     *
     * @return home page location
     */
    public static String getHomePage() {
        Object homePage;
        if ((homePage = getDefaultHomePageProductParam())
                != null) {
            String homePageLocation = (String) homePage;
            if (!homePageLocation.startsWith("/")) {
                // it is assumed that homepage location is provided as a relative path starting
                // from carbon context. This is to support the re-direction url at the login.
                // Therefore here we fix the location to suit the homepage link of the product.
                homePageLocation = "../../" + homePageLocation;
            }
            return homePageLocation;
        }

        return CarbonConstants.CARBON_UI_DEFAULT_HOME_PAGE;

    }

    private static Object getDefaultHomePageProductParam() {
        return getProductParam(CarbonConstants.PRODUCT_XML_WSO2CARBON + CarbonConstants.DEFAULT_HOME_PAGE);
    }
}
TOP

Related Classes of org.wso2.carbon.ui.CarbonUIUtil

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.