jtulach@343: package org.apidesign.singletons.api; jtulach@343: jtulach@343: import java.util.Iterator; jtulach@343: import java.util.ServiceLoader; jtulach@343: import org.openide.util.Lookup; jtulach@343: jtulach@343: // BEGIN: singletons.injectable.api jtulach@343: public abstract class DialogDisplayer { jtulach@343: protected DialogDisplayer() { jtulach@343: } jtulach@343: jtulach@343: /** Ask user a question. jtulach@343: * jtulach@343: * @param query the text of the question jtulach@343: * @return true if user confirmed or false if declined jtulach@343: */ jtulach@343: public abstract boolean yesOrNo(String query); jtulach@343: jtulach@343: public static DialogDisplayer getDefault() { jtulach@343: return Impl.DEFAULT; jtulach@343: } jtulach@343: // FINISH: singletons.injectable.api jtulach@343: jtulach@343: jtulach@343: // BEGIN: singletons.injectable.dummyimpl jtulach@343: private static final class Impl extends DialogDisplayer { jtulach@343: private static final DialogDisplayer DEFAULT = initialize(); jtulach@343: jtulach@343: @Override jtulach@343: public boolean yesOrNo(String query) { jtulach@343: System.err.printf("Saying no to '%s'\n", query); jtulach@343: return false; jtulach@343: } jtulach@343: // FINISH: singletons.injectable.dummyimpl jtulach@343: jtulach@343: private static DialogDisplayer initialize() { jtulach@343: if (Boolean.getBoolean("singleton.jdk6")) { jtulach@343: return initializeServiceLoader(); jtulach@343: } else { jtulach@343: return initializeLookup(); jtulach@343: } jtulach@343: } jtulach@343: jtulach@343: // BEGIN: singletons.injectable.serviceloader jtulach@343: private static DialogDisplayer initializeServiceLoader() { jtulach@343: Iterator it = null; jtulach@343: it = ServiceLoader.load(DialogDisplayer.class).iterator(); jtulach@343: return it != null && it.hasNext() ? it.next() : new Impl(); jtulach@343: } jtulach@343: // END: singletons.injectable.serviceloader jtulach@343: jtulach@343: // BEGIN: singletons.injectable.lookup jtulach@343: private static DialogDisplayer initializeLookup() { jtulach@376: final Lookup lkp = Lookup.getDefault(); jtulach@376: DialogDisplayer def = lkp.lookup(DialogDisplayer.class); jtulach@343: return def != null ? def : new Impl(); jtulach@343: } jtulach@343: // END: singletons.injectable.lookup jtulach@343: } jtulach@343: }