/*
* Copyright (c) 1996, 2020, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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.
*/
package java.beans;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.ImageProducer;
import java.net.URL;
import java.security.AccessController;
import java.security.PrivilegedAction;
This is a support class to make it easier for people to provide
BeanInfo classes.
It defaults to providing "noop" information, and can be selectively
overriden to provide more explicit information on chosen topics.
When the introspector sees the "noop" values, it will apply low
level introspection and design patterns to automatically analyze
the target bean.
Since: 1.1
/**
* This is a support class to make it easier for people to provide
* BeanInfo classes.
* <p>
* It defaults to providing "noop" information, and can be selectively
* overriden to provide more explicit information on chosen topics.
* When the introspector sees the "noop" values, it will apply low
* level introspection and design patterns to automatically analyze
* the target bean.
*
* @since 1.1
*/
public class SimpleBeanInfo implements BeanInfo {
Constructs a SimpleBeanInfo
. /**
* Constructs a {@code SimpleBeanInfo}.
*/
public SimpleBeanInfo() {}
Deny knowledge about the class and customizer of the bean.
You can override this if you wish to provide explicit info.
/**
* Deny knowledge about the class and customizer of the bean.
* You can override this if you wish to provide explicit info.
*/
@Override
public BeanDescriptor getBeanDescriptor() {
return null;
}
Deny knowledge of properties. You can override this
if you wish to provide explicit property info.
/**
* Deny knowledge of properties. You can override this
* if you wish to provide explicit property info.
*/
@Override
public PropertyDescriptor[] getPropertyDescriptors() {
return null;
}
Deny knowledge of a default property. You can override this
if you wish to define a default property for the bean.
/**
* Deny knowledge of a default property. You can override this
* if you wish to define a default property for the bean.
*/
@Override
public int getDefaultPropertyIndex() {
return -1;
}
Deny knowledge of event sets. You can override this
if you wish to provide explicit event set info.
/**
* Deny knowledge of event sets. You can override this
* if you wish to provide explicit event set info.
*/
@Override
public EventSetDescriptor[] getEventSetDescriptors() {
return null;
}
Deny knowledge of a default event. You can override this
if you wish to define a default event for the bean.
/**
* Deny knowledge of a default event. You can override this
* if you wish to define a default event for the bean.
*/
@Override
public int getDefaultEventIndex() {
return -1;
}
Deny knowledge of methods. You can override this
if you wish to provide explicit method info.
/**
* Deny knowledge of methods. You can override this
* if you wish to provide explicit method info.
*/
@Override
public MethodDescriptor[] getMethodDescriptors() {
return null;
}
Claim there are no other relevant BeanInfo objects. You
may override this if you want to (for example) return a
BeanInfo for a base class.
/**
* Claim there are no other relevant BeanInfo objects. You
* may override this if you want to (for example) return a
* BeanInfo for a base class.
*/
@Override
public BeanInfo[] getAdditionalBeanInfo() {
return null;
}
Claim there are no icons available. You can override
this if you want to provide icons for your bean.
/**
* Claim there are no icons available. You can override
* this if you want to provide icons for your bean.
*/
@Override
public Image getIcon(final int iconKind) {
final BeanDescriptor descriptor = getBeanDescriptor();
if (descriptor != null) {
final Class<?> type = descriptor.getBeanClass();
if (type != null && type.getClassLoader() == null
&& type.getAnnotation(JavaBean.class) != null) {
final String name = type.getName();
final int index = name.lastIndexOf('.');
if (name.substring(0, index).equals("javax.swing")) {
final String className = type.getSimpleName();
switch (iconKind) {
case ICON_COLOR_32x32:
return loadImage(className, "Color32.gif");
case ICON_COLOR_16x16:
return loadImage(className, "Color16.gif");
case ICON_MONO_32x32:
return loadImage(className, "Mono32.gif");
case ICON_MONO_16x16:
return loadImage(className, "Mono16.gif");
}
}
}
}
return null;
}
This is a utility method to help in loading standard icon images.
Params: - resourceName – A pathname relative to the directory holding the
class file of the current class
See Also: Returns: an image object. May be null if the load failed.
/**
* This is a utility method to help in loading standard icon images.
*
* @param resourceName A pathname relative to the directory holding the
* class file of the current class
* @return an image object. May be null if the load failed.
* @see java.beans.SimpleBeanInfo#loadImage(String)
*/
private Image loadStandardImage(final String resourceName) {
return AccessController.doPrivileged(
(PrivilegedAction<Image>) () -> loadImage(resourceName));
}
This is a utility method to help in loading standard icon images.
Params: - resourceName – A pathname relative to the directory holding the
class file of the current class
- suffix – A
String
containing a file suffix (e.g.,
"Color32.gif" or "Mono32.gif")
See Also: Returns: an image object. May be null if the load failed.
/**
* This is a utility method to help in loading standard icon images.
*
* @param resourceName A pathname relative to the directory holding the
* class file of the current class
* @param suffix A {@code String} containing a file suffix (<i>e.g.</i>,
* "Color32.gif" or "Mono32.gif")
* @return an image object. May be null if the load failed.
* @see java.beans.SimpleBeanInfo#loadImage(String)
*/
private Image loadImage(final String resourceName, final String suffix) {
final String prefix = "/javax/swing/beaninfo/images/";
final Image image = loadStandardImage(prefix + resourceName + suffix);
return image == null ? loadStandardImage(prefix + "JComponent" + suffix)
: image;
}
This is a utility method to help in loading icon images. It takes the
name of a resource file associated with the current object's class file
and loads an image object from that file. Typically images will be GIFs.
Params: - resourceName – A pathname relative to the directory holding the
class file of the current class. For example, "wombat.gif".
Returns: an image object or null if the resource is not found or the
resource could not be loaded as an Image
/**
* This is a utility method to help in loading icon images. It takes the
* name of a resource file associated with the current object's class file
* and loads an image object from that file. Typically images will be GIFs.
*
* @param resourceName A pathname relative to the directory holding the
* class file of the current class. For example, "wombat.gif".
* @return an image object or null if the resource is not found or the
* resource could not be loaded as an Image
*/
public Image loadImage(final String resourceName) {
try {
final URL url = getClass().getResource(resourceName);
if (url != null) {
final ImageProducer ip = (ImageProducer) url.getContent();
if (ip != null) {
return Toolkit.getDefaultToolkit().createImage(ip);
}
}
} catch (final Exception ignored) {
}
return null;
}
}