samples/misuse/src/org/apidesign/misuse/projectconfig/ProjectConfigurationCorrect.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:56:12 +0200
changeset 132 3bc4c54f4bcc
parent 101 c27834b52df0
child 153 b5cbb797ec0a
permissions -rw-r--r--
Truncating all examples to 80 characters per line
     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 }