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