| /******************************************************************************* |
| * Copyright (c) 2011, 2012 EclipseSource and others. |
| * 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: |
| * EclipseSource - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.rap.rwt.internal.protocol; |
| |
| import java.lang.reflect.Field; |
| import java.util.ArrayList; |
| import java.util.LinkedHashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.widgets.Widget; |
| |
| |
| public final class StylesUtil { |
| |
| private static final Map<String, Integer> availableStyles; |
| |
| static { |
| availableStyles = new LinkedHashMap<String, Integer>(); |
| initializeAvailableStyles(); |
| } |
| |
| private static void initializeAvailableStyles() { |
| Field[] constants = SWT.class.getDeclaredFields(); |
| for( Field constant : constants ) { |
| if( constant.getType() == int.class ) { |
| addStyleToMap( constant ); |
| } |
| } |
| } |
| |
| private static void addStyleToMap( Field constant ) { |
| String styleName = constant.getName(); |
| try { |
| constant.setAccessible( true ); |
| Integer value = new Integer( constant.getInt( null ) ); // use null because we access statics |
| availableStyles.put( styleName, value ); |
| } catch( Exception e ) { |
| String causeMessage = "Could not initialize SWT styles map with constant " + styleName; |
| throw new RuntimeException( causeMessage ); |
| } |
| } |
| |
| public static String[] filterStyles( Widget widget, String... allowedStyles ) { |
| List<String> containedStyles = findContainedStyles( widget, allowedStyles ); |
| if( containedStyles.isEmpty() ) { |
| containedStyles.add( "NONE" ); |
| } |
| String[] result = new String[ containedStyles.size() ]; |
| return containedStyles.toArray( result ); |
| } |
| |
| private static List<String> findContainedStyles( Widget widget, String... allowedStyles ) { |
| List<String> containedStyles = new ArrayList<String>(); |
| for( String allowedStyle : allowedStyles ) { |
| Integer object = availableStyles.get( allowedStyle ); |
| if( object == null ) { |
| throw new IllegalArgumentException( allowedStyle + " is not an existing SWT style" ); |
| } |
| if( ( widget.getStyle() & object.intValue() ) != 0 ) { |
| containedStyles.add( allowedStyle ); |
| } |
| } |
| return containedStyles; |
| } |
| |
| private StylesUtil() { |
| // prevent instantiation |
| } |
| } |