samples/misuse/src/org/apidesign/misuse/projectconfig/ProjectConfigurationCorrect.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 10:04:51 +0200
changeset 209 1c999569643b
parent 202 ef6b1931fb5c
child 210 acf2c31e22d4
permissions -rw-r--r--
to the end of daily_life
     1 package org.apidesign.misuse.projectconfig;
     2 
     3 public class ProjectConfigurationCorrect {
     4     // BEGIN: misuse.prjconfig.correct
     5     interface ProjectConfigurationProvider
     6         <Configuration extends ProjectConfiguration> {
     7         Configuration[] getConfigurations();
     8         Configuration getActive();
     9         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         ProjectConfigurationProvider<?> provider = null; // obtain elsewhere;
    30         resetToZero(provider);
    31         // END: misuse.prjconfig.correct.access
    32     }
    33 
    34     // BEGIN: misuse.prjconfig.correct.openmethod
    35     private static <C extends ProjectConfiguration> void resetToZero(
    36         ProjectConfigurationProvider<C> provider
    37     ) {
    38         provider.setActive(provider.getConfigurations()[0]);
    39     }
    40     // END: misuse.prjconfig.correct.openmethod
    41 
    42     // BEGIN: misuse.prjconfig.correct.openclass
    43     static void workWithProjectConfigurationProvider(
    44         ProjectConfigurationProvider<?> p
    45     ) {
    46         ResetToZero<?> rtz = ResetToZero.create(p);
    47         rtz.obtainFirst();
    48         // after a while
    49         rtz.apply();
    50     }
    51 
    52     static class ResetToZero<C extends ProjectConfiguration> {
    53         C active;
    54         final ProjectConfigurationProvider<C> provider;
    55 
    56         ResetToZero(ProjectConfigurationProvider<C> provider) {
    57             this.provider = provider;
    58         }
    59 
    60         static <C extends ProjectConfiguration> ResetToZero<C> create(
    61             ProjectConfigurationProvider<C> p
    62         ) {
    63             return new ResetToZero<C>(p);
    64         }
    65 
    66         public void obtainFirst() {
    67             active = provider.getConfigurations()[0];
    68         }
    69 
    70         public void apply() {
    71             provider.setActive(active);
    72         }
    73     }
    74     // END: misuse.prjconfig.correct.openclass
    75 
    76 }