samples/misuse/src/org/apidesign/misuse/projectconfig/ProjectConfigurationCorrect.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 30 Oct 2014 21:30:10 +0100
changeset 409 40cabcdcd2be
parent 209 1c999569643b
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.misuse.projectconfig;
     2 
     3 public class ProjectConfigurationCorrect {
     4     // BEGIN: misuse.prjconfig.correct
     5     interface ProjectConfigurationProvider
     6         <Configuration extends ProjectConfiguration> {
     7         public Configuration[] getConfigurations();
     8         public Configuration getActive();
     9         public void setActive(Configuration c);
    10     }
    11     interface ProjectConfiguration {
    12         public String getDisplayName();
    13     }
    14     // END: misuse.prjconfig.correct
    15     
    16     
    17 
    18     /* Following does not work:
    19     static {
    20         // BEGIN: misuse.prjconfig.correct.trivial.access
    21         ProjectConfigurationProvider<?> provider = null; // obtain elsewhere;
    22         provider.setActive(provider.getConfigurations()[0]);
    23         // END: misuse.prjconfig.correct.trivial.access
    24     }
    25     */
    26 
    27     static 
    28     // BEGIN: misuse.prjconfig.correct.access
    29     { 
    30         ProjectConfigurationProvider<?> provider = null; // obtain elsewhere;
    31         resetToZero(provider);
    32     }
    33     // END: misuse.prjconfig.correct.access
    34 
    35     // BEGIN: misuse.prjconfig.correct.openmethod
    36     private static <C extends ProjectConfiguration> void resetToZero(
    37         ProjectConfigurationProvider<C> provider
    38     ) {
    39         provider.setActive(provider.getConfigurations()[0]);
    40     }
    41     // END: misuse.prjconfig.correct.openmethod
    42 
    43     // BEGIN: misuse.prjconfig.correct.openclass
    44     static void workWithProjectConfigurationProvider(
    45         ProjectConfigurationProvider<?> p
    46     ) {
    47         ResetToZero<?> rtz = ResetToZero.create(p);
    48         rtz.obtainFirst();
    49         // after a while
    50         rtz.apply();
    51     }
    52 
    53     static class ResetToZero<C extends ProjectConfiguration> {
    54         C active;
    55         final ProjectConfigurationProvider<C> provider;
    56 
    57         ResetToZero(ProjectConfigurationProvider<C> provider) {
    58             this.provider = provider;
    59         }
    60 
    61         static <C extends ProjectConfiguration> ResetToZero<C> create(
    62             ProjectConfigurationProvider<C> p
    63         ) {
    64             return new ResetToZero<C>(p);
    65         }
    66 
    67         public void obtainFirst() {
    68             active = provider.getConfigurations()[0];
    69         }
    70 
    71         public void apply() {
    72             provider.setActive(active);
    73         }
    74     }
    75     // END: misuse.prjconfig.correct.openclass
    76 
    77 }