harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alexei Fedotov" <alexei.fedo...@gmail.com>
Subject [classlib][swing] javax.swing.JComponent is not supposed to be imported by awt
Date Thu, 25 Oct 2007 21:12:20 GMT
Hello,

I'm currently looking through the swing and awt code to find out what
should be done to make drag and drop work. Today I find out that the
class org.apache.harmony.awt.text.TextUtils contains nearly the same
functionality as javax.swing.TransferHandler [2]. Thanks to Evgeniya
Maenkova! She explained me that AWT cannot reuse
javax.swing.TransferHandler due to referenced javax.swing.JComponent
which is heavy class. I have looked through the dev@ list and couldn't
find that this core principle of our client API was referenced here
before.

Finally I've prepared a patch to remove another existing reference to
JComponent from org.apache.harmony.awt.text.TextUtils [1]. Could
anyone review and commit the patch?

Thanks!

[1] https://issues.apache.org/jira/browse/HARMONY-5023
[2]
org.apache.harmony.awt.text.TextUtils:
    public static final boolean importData(final TextKit textKit,
                                        final Transferable t) {

        if (t == null) {
            return false;
        }
        DataFlavor[] flavors = t.getTransferDataFlavors();
        DataFlavor flavor = null;
        for (DataFlavor element : flavors) {
            flavor = element;
            if (String.class.isAssignableFrom(flavor.getRepresentationClass()))
{
                break;
            }
            flavor = null;
        }
        if (flavor != null) {
            try {
                String text = (String) t.getTransferData(flavor);
                textKit.replaceSelectedText(text);
                return true;
            } catch (UnsupportedFlavorException e) {
                return false;
            } catch (IOException e) {
                return false;
            }
        }
        return false;
    }

javax.swing.TransferHandler:
    public boolean importData(final JComponent c,
                              final Transferable t) {
        PropertyDescriptor descriptor = getPropertyDescriptor(c);
        if (descriptor == null) {
            return false;
        }
        Class propertyType = descriptor.getPropertyType();
        DataFlavor flavor = getPrefferedFlavor(t, propertyType);
        if (flavor == null) {
            return false;
        }

        try {
            Object value = t.getTransferData(flavor);
            Method writer = descriptor.getWriteMethod();
            writer.invoke(c, new Object[]{value});
            return true;
        } catch (UnsupportedFlavorException e) {
        } catch (IOException e) {
        } catch (InvocationTargetException e) {
        } catch (IllegalAccessException e) {
        }
        return false;
    }




-- 
With best regards,
Alexei,
ESSD, Intel

Mime
View raw message