samples/singletons/src/org/apidesign/singletons/api/DialogDisplayer.java
changeset 343 8e220093e4bf
child 345 f497cf8621b3
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/samples/singletons/src/org/apidesign/singletons/api/DialogDisplayer.java	Wed Jan 27 18:30:57 2010 +0100
     1.3 @@ -0,0 +1,60 @@
     1.4 +package org.apidesign.singletons.api;
     1.5 +
     1.6 +import java.util.Iterator;
     1.7 +import java.util.ServiceLoader;
     1.8 +import org.openide.util.Lookup;
     1.9 +
    1.10 +// BEGIN: singletons.injectable.api
    1.11 +public abstract class DialogDisplayer {
    1.12 +    protected DialogDisplayer() {
    1.13 +    }
    1.14 +
    1.15 +    /** Ask user a question.
    1.16 +     *
    1.17 +     * @param query the text of the question
    1.18 +     * @return true if user confirmed or false if declined
    1.19 +     */
    1.20 +    public abstract boolean yesOrNo(String query);
    1.21 +
    1.22 +    public static DialogDisplayer getDefault() {
    1.23 +        return Impl.DEFAULT;
    1.24 +    }
    1.25 +    // FINISH: singletons.injectable.api
    1.26 +
    1.27 +
    1.28 +    // BEGIN: singletons.injectable.dummyimpl
    1.29 +    private static final class Impl extends DialogDisplayer {
    1.30 +        private static final DialogDisplayer DEFAULT = initialize();
    1.31 +        
    1.32 +        @Override
    1.33 +        public boolean yesOrNo(String query) {
    1.34 +            System.err.printf("Saying no to '%s'\n", query);
    1.35 +            return false;
    1.36 +        }
    1.37 +        // FINISH: singletons.injectable.dummyimpl
    1.38 +
    1.39 +        private static DialogDisplayer initialize() {
    1.40 +            if (Boolean.getBoolean("singleton.jdk6")) {
    1.41 +                return initializeServiceLoader();
    1.42 +            } else {
    1.43 +                return initializeLookup();
    1.44 +            }
    1.45 +        }
    1.46 +        
    1.47 +        // BEGIN: singletons.injectable.serviceloader
    1.48 +        private static DialogDisplayer initializeServiceLoader() {
    1.49 +            // see http://singletons.apidesign.org
    1.50 +            Iterator<DialogDisplayer> it = null;
    1.51 +            it = ServiceLoader.load(DialogDisplayer.class).iterator();
    1.52 +            return it != null && it.hasNext() ? it.next() : new Impl();
    1.53 +        }
    1.54 +        // END: singletons.injectable.serviceloader
    1.55 +
    1.56 +        // BEGIN: singletons.injectable.lookup
    1.57 +        private static DialogDisplayer initializeLookup() {
    1.58 +            DialogDisplayer def = Lookup.getDefault().lookup(DialogDisplayer.class);
    1.59 +            return def != null ? def : new Impl();
    1.60 +        }
    1.61 +        // END: singletons.injectable.lookup
    1.62 +    }
    1.63 +}