/******************************************************************************* * Copyright (c) 2007, 2008 Innoopract Informationssysteme GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Innoopract Informationssysteme GmbH - initial API and implementation ******************************************************************************/ package org.eclipse.rwt.internal.branding; import javax.servlet.http.HttpServletRequest; import org.eclipse.rwt.RWT; import org.eclipse.rwt.branding.AbstractBranding; import org.eclipse.rwt.branding.Header; import org.eclipse.rwt.internal.service.*; import org.eclipse.rwt.internal.util.URLHelper; public final class BrandingUtil { private static final String ATTR_BRANDING_ID = BrandingUtil.class.getName() + "#brandingId"; public static void replacePlaceholder( final StartupPageTemplateHolder template, final StartupPageTemplateHolder.Variable variable, final String replacement ) { String safeReplacement = replacement == null ? "" : replacement; template.replace( variable, safeReplacement ); } public static String headerMarkup( final AbstractBranding branding ) { Header[] headers = branding.getHeaders(); StringBuffer buffer = new StringBuffer(); appendFavIconMarkup( buffer, branding ); if( headers != null ) { for( int i = 0; i < headers.length; i++ ) { Header header = headers[ i ]; appendHeaderMarkup( buffer, header ); buffer.append( "\n" ); } } return buffer.toString(); } public static AbstractBranding findBranding() { HttpServletRequest request = ContextProvider.getRequest(); String servletName = URLHelper.getSerlvetName(); String entryPoint = request.getParameter( RequestParams.STARTUP ); AbstractBranding branding = BrandingManager.get( servletName, entryPoint ); RWT.getSessionStore().setAttribute( ATTR_BRANDING_ID, branding.getId() ); return branding; } /** * Return the id of the current branding. This is only available after * {@link #findBranding()} has been called. * @return the id of the current branding or <code>null</code>. */ public static String getCurrentBrandingId() { return ( String ) RWT.getSessionStore().getAttribute( ATTR_BRANDING_ID ); } ////////////////// // Helping methods private static void appendFavIconMarkup( final StringBuffer buffer, final AbstractBranding branding ) { String favIcon = branding.getFavIcon(); if( favIcon != null && !"".equals( favIcon ) ) { String[] names = new String[] { "rel", "type", "href" }; String favIconUrl = RWT.getResourceManager().getLocation( favIcon ); String[] values = new String[] { "shortcut icon", "image/x-icon", favIconUrl }; Header header = new Header( "link", names, values ); appendHeaderMarkup( buffer, header ); buffer.append( "\n" ); } } private static String appendHeaderMarkup( final StringBuffer buffer, final Header header ) { buffer.append( "<" ); buffer.append( header.getTagName() ); buffer.append( " " ); String[] names = header.getNames(); String[] values = header.getValues(); for( int i = 0; i < names.length; i++ ) { String name = names[ i ]; String value = values[ i ]; if( name != null && value != null ) { buffer.append( name ); buffer.append( "=\"" ); buffer.append( value ); buffer.append( "\" " ); } } buffer.append( "/>" ); return buffer.toString(); } private BrandingUtil() { // prevent instantiation } }