/* * Copyright (C) 2011 Nicolas Peransin. All rights reserved. * Use is subject to license terms. */ package org.mypsycho.swing.app.reflect; import java.beans.IntrospectionException; import java.lang.reflect.InvocationTargetException; import javax.swing.JComponent; import javax.swing.RootPaneContainer; import org.mypsycho.beans.DescriptorExtension; /** * Class for ... * <p>Details</p> * * @author Peransin Nicolas * */ public class ClientComponentProperty extends DescriptorExtension { public static DescriptorExtension createComponentInstance() throws IntrospectionException { return new ClientComponentProperty(JComponent.class); } public static DescriptorExtension createWindowInstance() throws IntrospectionException { return new ClientComponentProperty(RootPaneContainer.class); } /** * */ ClientComponentProperty(Class<?> type) throws IntrospectionException { super(type, "clientProperty"); } @Override public boolean isReadable(Object bean, boolean collection) { return collection; } @Override public boolean isWriteable(Object bean, boolean collection) { return collection; } @Override public boolean isCollection() { return true; } @Override public Class<?> getPropertyType(boolean collection) { return collection ? Object.class : null; } @Override public Object get(Object bean, String key) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { if (bean instanceof RootPaneContainer) { return get(((RootPaneContainer) bean).getRootPane(), key); } return ((JComponent) bean).getClientProperty(key); } @Override public void set(Object bean, String key, Object value) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { if (bean instanceof RootPaneContainer) { set(((RootPaneContainer) bean).getRootPane(), key, value); } else { ((JComponent) bean).putClientProperty(key, value); } } }