Hello, Sergey. > Why we have a duplicate version of StandardEncodings in AddFlavorTest and > DataFlavorUtil? To avoid referencing internal DataFlavorUtil.
With best regards. Petr. On 25 июля 2014 г., at 12:59, Sergey Bylokhov <sergey.bylok...@oracle.com> wrote: > Hi, Petr. > Why we have a duplicate version of StandardEncodings in AddFlavorTest and > DataFlavorUtil? > > On 25.07.2014 12:48, Petr Pchelko wrote: >> Hello, Peter. >> >> Sorry for misunderstanding. >> I've updated the review: >> http://cr.openjdk.java.net/~pchelko/9/8037485/webrev.05/ >> >> With best regards. Petr. >> >> On 25 июля 2014 г., at 10:41, Peter Levart <peter.lev...@gmail.com> wrote: >> >>> 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 >>> > > > -- > Best regards, Sergey. >