<AWT Dev> [9] Review Request: 8037485 Refactor java.awt.datatransfer to eliminate dependency on AWT
Peter Levart
peter.levart at gmail.com
Fri Jul 25 06:41:34 UTC 2014
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
More information about the awt-dev
mailing list