samples/singletons/src/org/apidesign/singletons/api/DialogDisplayer.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 30 Oct 2014 21:30:10 +0100
changeset 409 40cabcdcd2be
parent 345 f497cf8621b3
permissions -rw-r--r--
Updating to NBMs from NetBeans 8.0.1 as some of them are required to run on JDK8
     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             Iterator<DialogDisplayer> it = null;
    47             it = ServiceLoader.load(DialogDisplayer.class).iterator();
    48             return it != null && it.hasNext() ? it.next() : new Impl();
    49         }
    50         // END: singletons.injectable.serviceloader
    51 
    52         // BEGIN: singletons.injectable.lookup
    53         private static DialogDisplayer initializeLookup() {
    54             final Lookup lkp = Lookup.getDefault();
    55             DialogDisplayer def = lkp.lookup(DialogDisplayer.class);
    56             return def != null ? def : new Impl();
    57         }
    58         // END: singletons.injectable.lookup
    59     }
    60 }