/******************************************************************************* * Copyright (c) 2010 Oak Ridge National Laboratory. * 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 ******************************************************************************/ package org.csstudio.swt.widgets.introspection; import java.beans.BeanDescriptor; import java.beans.BeanInfo; import java.beans.EventSetDescriptor; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.MethodDescriptor; import java.beans.PropertyDescriptor; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.draw2d.Figure; /**The default widget introspector, which will filter out the non widget properties from {@link Figure}. * @author Xihui Chen * */ public class DefaultWidgetIntrospector { public static String[] FIGURE_NON_PROPERTIES = new String[]{ "children", "class", "clientArea", "coordinateSystem", "clippingStrategy", "focusTraversable", "insets", "layoutManager", "localBackgroundColor", "localForegroundColor", "maximumSize", "minimumSize", "mirrored", "parent", "preferredSize", "requestFocusEnabled", "toolTip", "showing", "updateManager", "valid", "beanInfo" }; public BeanInfo getBeanInfo(Class<?> beanClass) throws IntrospectionException { Introspector.flushFromCaches(beanClass); BeanInfo bi = Introspector.getBeanInfo(beanClass); BeanDescriptor bd = bi.getBeanDescriptor(); MethodDescriptor mds[] = bi.getMethodDescriptors(); EventSetDescriptor esds[] = bi.getEventSetDescriptors(); PropertyDescriptor pds[] = bi.getPropertyDescriptors(); List<PropertyDescriptor> filteredPDList = new ArrayList<PropertyDescriptor>(); List<String> nonPropList = Arrays.asList(getNonProperties()); for(PropertyDescriptor pd : pds){ if(!nonPropList.contains(pd.getName()) && pd.getWriteMethod() != null && pd.getReadMethod() != null) filteredPDList.add(pd); } int defaultEvent = bi.getDefaultEventIndex(); int defaultProperty = bi.getDefaultPropertyIndex(); return new GenericBeanInfo(bd, esds, defaultEvent, filteredPDList.toArray(new PropertyDescriptor[filteredPDList.size()]), defaultProperty, mds, null); } public String[] getNonProperties(){ return FIGURE_NON_PROPERTIES; } public String[] concatenateStringArrays(String[] A, String[] B){ String[] C= new String[A.length+B.length]; System.arraycopy(A, 0, C, 0, A.length); System.arraycopy(B, 0, C, A.length, B.length); return C; } }