samples/misuse/src/org/apidesign/misuse/projectconfig/ProjectConfigurationCorrect.java
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/samples/misuse/src/org/apidesign/misuse/projectconfig/ProjectConfigurationCorrect.java Sat Jun 14 09:54:22 2008 +0200
1.3 @@ -0,0 +1,71 @@
1.4 +package org.apidesign.misuse.projectconfig;
1.5 +
1.6 +public class ProjectConfigurationCorrect {
1.7 + // BEGIN: misuse.prjconfig.correct
1.8 + interface ProjectConfigurationProvider<Configuration extends ProjectConfiguration> {
1.9 + Configuration[] getConfigurations();
1.10 + Configuration getActive();
1.11 + void setActive(Configuration c);
1.12 + }
1.13 + interface ProjectConfiguration {
1.14 + public String getDisplayName();
1.15 + }
1.16 + // END: misuse.prjconfig.correct
1.17 +
1.18 +
1.19 +
1.20 + /* Following does not work:
1.21 + static {
1.22 + // BEGIN: misuse.prjconfig.correct.trivial.access
1.23 + ProjectConfigurationProvider<?> provider = null; // obtain from somewhere;
1.24 + provider.setActive(provider.getConfigurations()[0]);
1.25 + // END: misuse.prjconfig.correct.trivial.access
1.26 + }
1.27 + */
1.28 +
1.29 + static {
1.30 + // BEGIN: misuse.prjconfig.correct.access
1.31 + ProjectConfigurationProvider<?> provider = null; // obtain from somewhere;
1.32 + resetToZero(provider);
1.33 + // END: misuse.prjconfig.correct.access
1.34 + }
1.35 +
1.36 + // BEGIN: misuse.prjconfig.correct.openmethod
1.37 + private static <C extends ProjectConfiguration> void resetToZero(
1.38 + ProjectConfigurationProvider<C> provider
1.39 + ) {
1.40 + provider.setActive(provider.getConfigurations()[0]);
1.41 + }
1.42 + // END: misuse.prjconfig.correct.openmethod
1.43 +
1.44 + // BEGIN: misuse.prjconfig.correct.openclass
1.45 + static void workWithProjectConfigurationProvider(ProjectConfigurationProvider<?> p) {
1.46 + ResetToZero<?> rtz = ResetToZero.create(p);
1.47 + rtz.obtainFirst();
1.48 + // after a while
1.49 + rtz.apply();
1.50 + }
1.51 +
1.52 + static class ResetToZero<C extends ProjectConfiguration> {
1.53 + C active;
1.54 + final ProjectConfigurationProvider<C> provider;
1.55 +
1.56 + ResetToZero(ProjectConfigurationProvider<C> provider) {
1.57 + this.provider = provider;
1.58 + }
1.59 +
1.60 + static <C extends ProjectConfiguration> ResetToZero<C> create(ProjectConfigurationProvider<C> p) {
1.61 + return new ResetToZero<C>(p);
1.62 + }
1.63 +
1.64 + public void obtainFirst() {
1.65 + active = provider.getConfigurations()[0];
1.66 + }
1.67 +
1.68 + public void apply() {
1.69 + provider.setActive(active);
1.70 + }
1.71 + }
1.72 + // END: misuse.prjconfig.correct.openclass
1.73 +
1.74 +}