home *** CD-ROM | disk | FTP | other *** search
- package java.beans;
-
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Proxy;
- import java.util.Hashtable;
- import java.util.Vector;
-
- class MetaData {
- private static Hashtable internalPersistenceDelegates = new Hashtable();
- private static Hashtable transientProperties = new Hashtable();
- private static PersistenceDelegate nullPersistenceDelegate = new NullPersistenceDelegate();
- private static PersistenceDelegate enumPersistenceDelegate = new EnumPersistenceDelegate();
- private static PersistenceDelegate primitivePersistenceDelegate = new PrimitivePersistenceDelegate();
- private static PersistenceDelegate defaultPersistenceDelegate = new DefaultPersistenceDelegate();
- private static PersistenceDelegate arrayPersistenceDelegate;
- private static PersistenceDelegate proxyPersistenceDelegate;
-
- static boolean equals(Object var0, Object var1) {
- return var0 == null ? var1 == null : var0.equals(var1);
- }
-
- public static synchronized void setPersistenceDelegate(Class var0, PersistenceDelegate var1) {
- setBeanAttribute(var0, "persistenceDelegate", var1);
- }
-
- public static synchronized PersistenceDelegate getPersistenceDelegate(Class var0) {
- if (var0 == null) {
- return nullPersistenceDelegate;
- } else if (Enum.class.isAssignableFrom(var0)) {
- return enumPersistenceDelegate;
- } else if (ReflectionUtils.isPrimitive(var0)) {
- return primitivePersistenceDelegate;
- } else if (var0.isArray()) {
- if (arrayPersistenceDelegate == null) {
- arrayPersistenceDelegate = new ArrayPersistenceDelegate();
- }
-
- return arrayPersistenceDelegate;
- } else {
- try {
- if (Proxy.isProxyClass(var0)) {
- if (proxyPersistenceDelegate == null) {
- proxyPersistenceDelegate = new ProxyPersistenceDelegate();
- }
-
- return proxyPersistenceDelegate;
- }
- } catch (Exception var5) {
- }
-
- String var1 = var0.getName();
- if (getBeanAttribute(var0, "transient_init") == null) {
- Vector var2 = (Vector)transientProperties.get(var1);
- if (var2 != null) {
- for(int var3 = 0; var3 < var2.size(); ++var3) {
- setPropertyAttribute(var0, (String)var2.get(var3), "transient", Boolean.TRUE);
- }
- }
-
- setBeanAttribute(var0, "transient_init", Boolean.TRUE);
- }
-
- Object var8 = (PersistenceDelegate)getBeanAttribute(var0, "persistenceDelegate");
- if (var8 == null) {
- var8 = (PersistenceDelegate)internalPersistenceDelegates.get(var1);
- if (var8 != null) {
- return (PersistenceDelegate)var8;
- }
-
- internalPersistenceDelegates.put(var1, defaultPersistenceDelegate);
-
- try {
- String var9 = var0.getName();
- Class var10 = Class.forName("java.beans." + var9.replace('.', '_') + "_PersistenceDelegate");
- var8 = (PersistenceDelegate)var10.newInstance();
- internalPersistenceDelegates.put(var1, var8);
- } catch (ClassNotFoundException var6) {
- String[] var4 = getConstructorProperties(var0);
- if (var4 != null) {
- var8 = new DefaultPersistenceDelegate(var4);
- internalPersistenceDelegates.put(var1, var8);
- }
- } catch (Exception var7) {
- System.err.println("Internal error: " + var7);
- }
- }
-
- return (PersistenceDelegate)(var8 != null ? var8 : defaultPersistenceDelegate);
- }
- }
-
- private static String[] getConstructorProperties(Class var0) {
- String[] var1 = null;
- int var2 = 0;
-
- for(Constructor var6 : var0.getConstructors()) {
- String[] var7 = getAnnotationValue(var6);
- if (var7 != null && var2 < var7.length && isValid(var6, var7)) {
- var1 = var7;
- var2 = var7.length;
- }
- }
-
- return var1;
- }
-
- private static String[] getAnnotationValue(Constructor var0) {
- ConstructorProperties var1 = (ConstructorProperties)var0.getAnnotation(ConstructorProperties.class);
- return var1 != null ? var1.value() : null;
- }
-
- private static boolean isValid(Constructor var0, String[] var1) {
- Class[] var2 = var0.getParameterTypes();
- if (var1.length != var2.length) {
- return false;
- } else {
- for(String var6 : var1) {
- if (var6 == null) {
- return false;
- }
- }
-
- return true;
- }
- }
-
- public static BeanInfo getBeanInfo(Class var0) {
- BeanInfo var1 = null;
-
- try {
- var1 = Introspector.getBeanInfo(var0);
- } catch (Throwable var3) {
- var3.printStackTrace();
- }
-
- return var1;
- }
-
- private static PropertyDescriptor getPropertyDescriptor(Class var0, String var1) {
- BeanInfo var2 = getBeanInfo(var0);
- PropertyDescriptor[] var3 = var2.getPropertyDescriptors();
-
- for(int var4 = 0; var4 < var3.length; ++var4) {
- PropertyDescriptor var5 = var3[var4];
- if (var1.equals(var5.getName())) {
- return var5;
- }
- }
-
- return null;
- }
-
- private static void setPropertyAttribute(Class var0, String var1, String var2, Object var3) {
- PropertyDescriptor var4 = getPropertyDescriptor(var0, var1);
- if (var4 == null) {
- System.err.println("Warning: property " + var1 + " is not defined on " + var0);
- } else {
- var4.setValue(var2, var3);
- }
- }
-
- private static void setBeanAttribute(Class var0, String var1, Object var2) {
- getBeanInfo(var0).getBeanDescriptor().setValue(var1, var2);
- }
-
- private static Object getBeanAttribute(Class var0, String var1) {
- return getBeanInfo(var0).getBeanDescriptor().getValue(var1);
- }
-
- private static synchronized void registerConstructor(String var0, String[] var1) {
- internalPersistenceDelegates.put(var0, new DefaultPersistenceDelegate(var1));
- }
-
- private static void removeProperty(String var0, String var1) {
- Vector var2 = (Vector)transientProperties.get(var0);
- if (var2 == null) {
- var2 = new Vector();
- transientProperties.put(var0, var2);
- }
-
- var2.add(var1);
- }
-
- static {
- registerConstructor("java.util.Date", new String[]{"time"});
- registerConstructor("java.beans.Statement", new String[]{"target", "methodName", "arguments"});
- registerConstructor("java.beans.Expression", new String[]{"target", "methodName", "arguments"});
- registerConstructor("java.beans.EventHandler", new String[]{"target", "action", "eventPropertyName", "listenerMethodName"});
- registerConstructor("java.awt.Color", new String[]{"red", "green", "blue", "alpha"});
- registerConstructor("java.awt.Font", new String[]{"name", "style", "size"});
- registerConstructor("java.awt.Cursor", new String[]{"type"});
- registerConstructor("java.awt.ScrollPane", new String[]{"scrollbarDisplayPolicy"});
- registerConstructor("javax.swing.plaf.FontUIResource", new String[]{"name", "style", "size"});
- registerConstructor("javax.swing.plaf.ColorUIResource", new String[]{"red", "green", "blue"});
- registerConstructor("javax.swing.tree.DefaultTreeModel", new String[]{"root"});
- registerConstructor("javax.swing.JTree", new String[]{"model"});
- registerConstructor("javax.swing.tree.TreePath", new String[]{"path"});
- registerConstructor("javax.swing.OverlayLayout", new String[]{"target"});
- registerConstructor("javax.swing.BoxLayout", new String[]{"target", "axis"});
- registerConstructor("javax.swing.Box$Filler", new String[]{"minimumSize", "preferredSize", "maximumSize"});
- registerConstructor("javax.swing.DefaultCellEditor", new String[]{"component"});
- registerConstructor("javax.swing.JSplitPane", new String[]{"orientation"});
- registerConstructor("javax.swing.ImageIcon", new String[]{"description"});
- registerConstructor("javax.swing.JButton", new String[]{"text"});
- registerConstructor("javax.swing.border.BevelBorder", new String[]{"bevelType", "highlightOuterColor", "highlightInnerColor", "shadowOuterColor", "shadowInnerColor"});
- registerConstructor("javax.swing.plaf.BorderUIResource$BevelBorderUIResource", new String[]{"bevelType", "highlightOuterColor", "highlightInnerColor", "shadowOuterColor", "shadowInnerColor"});
- registerConstructor("javax.swing.border.CompoundBorder", new String[]{"outsideBorder", "insideBorder"});
- registerConstructor("javax.swing.plaf.BorderUIResource$CompoundBorderUIResource", new String[]{"outsideBorder", "insideBorder"});
- registerConstructor("javax.swing.border.EmptyBorder", new String[]{"borderInsets"});
- registerConstructor("javax.swing.plaf.BorderUIResource$EmptyBorderUIResource", new String[]{"borderInsets"});
- registerConstructor("javax.swing.border.EtchedBorder", new String[]{"etchType", "highlightColor", "shadowColor"});
- registerConstructor("javax.swing.plaf.BorderUIResource$EtchedBorderUIResource", new String[]{"etchType", "highlightColor", "shadowColor"});
- registerConstructor("javax.swing.border.LineBorder", new String[]{"lineColor", "thickness"});
- registerConstructor("javax.swing.plaf.BorderUIResource$LineBorderUIResource", new String[]{"lineColor", "thickness"});
- registerConstructor("javax.swing.border.SoftBevelBorder", new String[]{"bevelType", "highlightOuterColor", "highlightInnerColor", "shadowOuterColor", "shadowInnerColor"});
- registerConstructor("javax.swing.border.TitledBorder", new String[]{"border", "title", "titleJustification", "titlePosition", "titleFont", "titleColor"});
- registerConstructor("javax.swing.plaf.BorderUIResource$TitledBorderUIResource", new String[]{"border", "title", "titleJustification", "titlePosition", "titleFont", "titleColor"});
- internalPersistenceDelegates.put("java.net.URI", new PrimitivePersistenceDelegate());
- internalPersistenceDelegates.put("javax.swing.plaf.BorderUIResource$MatteBorderUIResource", new javax_swing_border_MatteBorder_PersistenceDelegate());
- removeProperty("java.awt.geom.RectangularShape", "frame");
- removeProperty("java.awt.Rectangle", "bounds");
- removeProperty("java.awt.Dimension", "size");
- removeProperty("java.awt.Point", "location");
- removeProperty("java.awt.Component", "foreground");
- removeProperty("java.awt.Component", "background");
- removeProperty("java.awt.Component", "font");
- removeProperty("java.awt.Component", "visible");
- removeProperty("java.awt.ScrollPane", "scrollPosition");
- removeProperty("java.awt.im.InputContext", "compositionEnabled");
- removeProperty("javax.swing.JComponent", "minimumSize");
- removeProperty("javax.swing.JComponent", "preferredSize");
- removeProperty("javax.swing.JComponent", "maximumSize");
- removeProperty("javax.swing.ImageIcon", "image");
- removeProperty("javax.swing.ImageIcon", "imageObserver");
- removeProperty("javax.swing.JMenu", "accelerator");
- removeProperty("javax.swing.JMenuItem", "accelerator");
- removeProperty("javax.swing.JMenuBar", "helpMenu");
- removeProperty("javax.swing.JScrollPane", "verticalScrollBar");
- removeProperty("javax.swing.JScrollPane", "horizontalScrollBar");
- removeProperty("javax.swing.JScrollPane", "rowHeader");
- removeProperty("javax.swing.JScrollPane", "columnHeader");
- removeProperty("javax.swing.JViewport", "extentSize");
- removeProperty("javax.swing.table.JTableHeader", "defaultRenderer");
- removeProperty("javax.swing.JList", "cellRenderer");
- removeProperty("javax.swing.JList", "selectedIndices");
- removeProperty("javax.swing.DefaultListSelectionModel", "leadSelectionIndex");
- removeProperty("javax.swing.DefaultListSelectionModel", "anchorSelectionIndex");
- removeProperty("javax.swing.JComboBox", "selectedIndex");
- removeProperty("javax.swing.JTabbedPane", "selectedIndex");
- removeProperty("javax.swing.JTabbedPane", "selectedComponent");
- removeProperty("javax.swing.AbstractButton", "disabledIcon");
- removeProperty("javax.swing.JLabel", "disabledIcon");
- removeProperty("javax.swing.text.JTextComponent", "caret");
- removeProperty("javax.swing.text.JTextComponent", "caretPosition");
- removeProperty("javax.swing.text.JTextComponent", "selectionStart");
- removeProperty("javax.swing.text.JTextComponent", "selectionEnd");
- }
- }
-