author | Jaroslav Tulach <jtulach@netbeans.org> |
Sat, 15 Oct 2011 22:11:18 +0200 | |
changeset 376 | bb34a70d36ba |
parent 345 | f497cf8621b3 |
permissions | -rw-r--r-- |
jtulach@343 | 1 |
package org.apidesign.singletons.api; |
jtulach@343 | 2 |
|
jtulach@343 | 3 |
import java.util.Iterator; |
jtulach@343 | 4 |
import java.util.ServiceLoader; |
jtulach@343 | 5 |
import org.openide.util.Lookup; |
jtulach@343 | 6 |
|
jtulach@343 | 7 |
// BEGIN: singletons.injectable.api |
jtulach@343 | 8 |
public abstract class DialogDisplayer { |
jtulach@343 | 9 |
protected DialogDisplayer() { |
jtulach@343 | 10 |
} |
jtulach@343 | 11 |
|
jtulach@343 | 12 |
/** Ask user a question. |
jtulach@343 | 13 |
* |
jtulach@343 | 14 |
* @param query the text of the question |
jtulach@343 | 15 |
* @return true if user confirmed or false if declined |
jtulach@343 | 16 |
*/ |
jtulach@343 | 17 |
public abstract boolean yesOrNo(String query); |
jtulach@343 | 18 |
|
jtulach@343 | 19 |
public static DialogDisplayer getDefault() { |
jtulach@343 | 20 |
return Impl.DEFAULT; |
jtulach@343 | 21 |
} |
jtulach@343 | 22 |
// FINISH: singletons.injectable.api |
jtulach@343 | 23 |
|
jtulach@343 | 24 |
|
jtulach@343 | 25 |
// BEGIN: singletons.injectable.dummyimpl |
jtulach@343 | 26 |
private static final class Impl extends DialogDisplayer { |
jtulach@343 | 27 |
private static final DialogDisplayer DEFAULT = initialize(); |
jtulach@343 | 28 |
|
jtulach@343 | 29 |
@Override |
jtulach@343 | 30 |
public boolean yesOrNo(String query) { |
jtulach@343 | 31 |
System.err.printf("Saying no to '%s'\n", query); |
jtulach@343 | 32 |
return false; |
jtulach@343 | 33 |
} |
jtulach@343 | 34 |
// FINISH: singletons.injectable.dummyimpl |
jtulach@343 | 35 |
|
jtulach@343 | 36 |
private static DialogDisplayer initialize() { |
jtulach@343 | 37 |
if (Boolean.getBoolean("singleton.jdk6")) { |
jtulach@343 | 38 |
return initializeServiceLoader(); |
jtulach@343 | 39 |
} else { |
jtulach@343 | 40 |
return initializeLookup(); |
jtulach@343 | 41 |
} |
jtulach@343 | 42 |
} |
jtulach@343 | 43 |
|
jtulach@343 | 44 |
// BEGIN: singletons.injectable.serviceloader |
jtulach@343 | 45 |
private static DialogDisplayer initializeServiceLoader() { |
jtulach@343 | 46 |
Iterator<DialogDisplayer> it = null; |
jtulach@343 | 47 |
it = ServiceLoader.load(DialogDisplayer.class).iterator(); |
jtulach@343 | 48 |
return it != null && it.hasNext() ? it.next() : new Impl(); |
jtulach@343 | 49 |
} |
jtulach@343 | 50 |
// END: singletons.injectable.serviceloader |
jtulach@343 | 51 |
|
jtulach@343 | 52 |
// BEGIN: singletons.injectable.lookup |
jtulach@343 | 53 |
private static DialogDisplayer initializeLookup() { |
jtulach@376 | 54 |
final Lookup lkp = Lookup.getDefault(); |
jtulach@376 | 55 |
DialogDisplayer def = lkp.lookup(DialogDisplayer.class); |
jtulach@343 | 56 |
return def != null ? def : new Impl(); |
jtulach@343 | 57 |
} |
jtulach@343 | 58 |
// END: singletons.injectable.lookup |
jtulach@343 | 59 |
} |
jtulach@343 | 60 |
} |