On 07/24/2014 01:22 PM, Petr Pchelko wrote:
Thank you for the review.
I’ve updated the fix:http://cr.openjdk.java.net/~pchelko/9/8037485/webrev.04/

I’ve fixed all suggestions except one:
>Another optimization/simplification is possible. You could merge the 
DesktopDatatransferServiceHolder and default implementation into one class:
No, I could not. The default implementation is a member of desktop module while 
DataFlavorUtil is a part of data transfer module.


Hi Petr,

Sorry, I haven't been clear/precise enough. I meant to say that you could merge the DesktopDatatransferServiceHolder class and the "fall-back" empty implementation into one class (instead of having DesktopDatatransferServiceHolder a separate class and "fall-back" implementation being anonymous inner class). You save one class and eliminate some boilerplate:

public class DataFlavorUtil {

    public static DesktopDatatransferService getDesktopService() {
        return DesktopDatatransferServiceImpl.INSTANCE;
    }

private static final class DesktopDatatransferServiceImpl implements DesktopDatatransferService {
        static final DesktopDatatransferService INSTANCE;
        static {
            ServiceLoader<DesktopDatatransferService> loader =
ServiceLoader.load(DesktopDatatransferService.class, null); Iterator<DesktopDatatransferService> iterator = loader.iterator();
            if (iterator.hasNext()) {
                INSTANCE = iterator.next();
            } else {
                INSTANCE = new DesktopDatatransferServiceImpl();
            }
        }

                    /**
                     * System singleton FlavorTable.
                     * Only used if there is no desktop
                     * to provide an appropriate FlavorMap.
                     */
                    private volatile FlavorMap flavorMap;

                    @Override
                    public void invokeOnEventThread(Runnable r) {
                        r.run();
                    }

                    @Override
                    public String getDefaultUnicodeEncoding() {
                        return StandardCharsets.UTF_8.name();
                    }

                    @Override
public FlavorMap getFlavorMap(Supplier<FlavorMap> supplier) {
                        FlavorMap map = flavorMap;
                        if (map == null) {
                            synchronized (this) {
                                map = flavorMap;
                                if (map == null) {
                                    flavorMap = map = supplier.get();
                                }
                            }
                        }
                        return map;
                    }

                    @Override
                    public boolean isDesktopPresent() {
                        return false;
                    }

                    @Override
public LinkedHashSet<DataFlavor> getPlatformMappingsForNative(String nat) {
                        return new LinkedHashSet<>();
                    }

                    @Override
public LinkedHashSet<String> getPlatformMappingsForFlavor(DataFlavor df) {
                        return new LinkedHashSet<>();
                    }

                    @Override
public void registerTextFlavorProperties(String nat, String charset, String eoln, String terminators) {
                        // Not needed if desktop module is absent
                    }
    }




...but it is good as is.

Regards, Peter

Reply via email to