samples/misuse/src/org/apidesign/misuse/projectconfig/ProjectConfigurationCorrect.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:58:08 +0200
changeset 153 b5cbb797ec0a
parent 132 3bc4c54f4bcc
child 154 0fd5e9c500b9
permissions -rw-r--r--
up to line 2000
     1 package org.apidesign.misuse.projectconfig;
     2 
     3 public class ProjectConfigurationCorrect {
     4     // BEGIN: misuse.prjconfig.correct
     5     interface ProjectConfigurationProvider<Configuration extends ProjectConfiguration> {
     6         Configuration[] getConfigurations();
     7         Configuration getActive();
     8         void setActive(Configuration c);
     9     }
    10     interface ProjectConfiguration {
    11         public String getDisplayName();
    12     }
    13     // END: misuse.prjconfig.correct
    14     
    15     
    16 
    17     /* Following does not work:
    18     static {
    19         // BEGIN: misuse.prjconfig.correct.trivial.access
    20         ProjectConfigurationProvider<?> provider = null; // obtain from somewhere;
    21         provider.setActive(provider.getConfigurations()[0]);
    22         // END: misuse.prjconfig.correct.trivial.access
    23     }
    24     */
    25 
    26     static { 
    27         // BEGIN: misuse.prjconfig.correct.access
    28         ProjectConfigurationProvider<?> provider = null; // obtain from somewhere;
    29         resetToZero(provider);
    30         // END: misuse.prjconfig.correct.access
    31     }
    32 
    33     // BEGIN: misuse.prjconfig.correct.openmethod
    34     private static <C extends ProjectConfiguration> void resetToZero(
    35         ProjectConfigurationProvider<C> provider
    36     ) {
    37         provider.setActive(provider.getConfigurations()[0]);
    38     }
    39     // END: misuse.prjconfig.correct.openmethod
    40 
    41     // BEGIN: misuse.prjconfig.correct.openclass
    42     static void workWithProjectConfigurationProvider(ProjectConfigurationProvider<?> p) {
    43         ResetToZero<?> rtz = ResetToZero.create(p);
    44         rtz.obtainFirst();
    45         // after a while
    46         rtz.apply();
    47     }
    48 
    49     static class ResetToZero<C extends ProjectConfiguration> {
    50         C active;
    51         final ProjectConfigurationProvider<C> provider;
    52 
    53         ResetToZero(ProjectConfigurationProvider<C> provider) {
    54             this.provider = provider;
    55         }
    56 
    57         static <C extends ProjectConfiguration> ResetToZero<C> create(ProjectConfigurationProvider<C> p) {
    58             return new ResetToZero<C>(p);
    59         }
    60 
    61         public void obtainFirst() {
    62             active = provider.getConfigurations()[0];
    63         }
    64 
    65         public void apply() {
    66             provider.setActive(active);
    67         }
    68     }
    69     // END: misuse.prjconfig.correct.openclass
    70 
    71 }