/* * Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ /* * @test * @bug 4274639 4305280 * @summary Tests PropertyDescriptor/PropertyEditorSupport improvements * @author Mark Davidson */ import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.beans.PropertyEditor; import java.beans.PropertyEditorSupport; import java.beans.SimpleBeanInfo; public class Test4274639 { private static String STRING_PROPERTY = "string"; private static String INTEGER_PROPERTY = "integer"; private static String STRING_VALUE = "Test Text"; private static Integer INTEGER_VALUE = 261074; public static void main(String[] args) { TestBean bean = new TestBean(STRING_VALUE); if (!STRING_VALUE.equals(bean.getString())) throw new Error("unexpected string property: " + bean.getString()); boolean string = false; boolean integer = false; for (PropertyDescriptor pd : BeanUtils.getPropertyDescriptors(bean.getClass())) { String name = pd.getName(); System.out.println(" - " + name); if (name.equals(STRING_PROPERTY)) { // This tests createPropertyEditor such that the PropertyEditor // returned will have the bean as the source object. Class type = pd.getPropertyEditorClass(); if (!StringEditor.class.equals(type)) throw new Error("unexpected property editor type: " + type); PropertyEditor editor = pd.createPropertyEditor(bean); if (editor == null) throw new Error("property editor cannot be created"); if (STRING_VALUE != editor.getValue()) throw new Error("unexpected value: " + editor.getValue()); Object source = ((PropertyEditorSupport) editor).getSource(); if (source != bean) throw new Error("unexpected source: " + source); string = true; } if (name.equals(INTEGER_PROPERTY)) { // This tests createPropertyEditor such that the PropertyEditor // returned will be just a new instance Class type = pd.getPropertyEditorClass(); if (!IntegerEditor.class.equals(type)) throw new Error("unexpected property editor type: " + type); PropertyEditor editor = pd.createPropertyEditor(bean); if (editor == null) throw new Error("property editor cannot be created"); if (INTEGER_VALUE != editor.getValue()) throw new Error("unexpected value: " + editor.getValue()); Object source = ((PropertyEditorSupport) editor).getSource(); if (source != editor) throw new Error("unexpected source: " + source); integer = true; } } if (!string) throw new Error("string property is not tested"); if (!integer) throw new Error("integer property is not tested"); } public static final class TestBean { private String string; private int integer; public TestBean() { this.string = "default"; this.integer = 0; } public TestBean(String string) { setString(string); } public String getString() { return this.string; } public void setString(String string) { this.string = string; } public int getInteger() { return this.integer; } public void setInteger(int integer) { this.integer = integer; } } public static final class TestBeanBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { PropertyDescriptor[] pds = new PropertyDescriptor[2]; try { pds[0] = new PropertyDescriptor(STRING_PROPERTY, TestBean.class); pds[0].setPropertyEditorClass(StringEditor.class); pds[1] = new PropertyDescriptor(INTEGER_PROPERTY, TestBean.class); pds[1].setPropertyEditorClass(IntegerEditor.class); } catch (IntrospectionException exception) { throw new Error("unexpected error", exception); } return pds; } } // Public constructor was added for 4305280 public static final class StringEditor extends PropertyEditorSupport { public StringEditor(Object source) { super(source); if (source instanceof TestBean) { TestBean test = (TestBean) source; setValue(test.getString()); } } } // Will use the default public constructor // that uses this property editor as the source. public static final class IntegerEditor extends PropertyEditorSupport { public Object getValue() { return INTEGER_VALUE; // default value is hard coded } } }