samples/friendpackage/src/org/apidesign/friendpackage/impl/Accessor.java
changeset 287 e1186601a720
parent 286 ac16aae50d58
child 376 bb34a70d36ba
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/samples/friendpackage/src/org/apidesign/friendpackage/impl/Accessor.java	Fri Oct 24 21:15:50 2008 +0200
     1.3 @@ -0,0 +1,47 @@
     1.4 +package org.apidesign.friendpackage.impl;
     1.5 +
     1.6 +import javax.swing.event.ChangeListener;
     1.7 +import org.apidesign.friendpackage.api.Item;
     1.8 +
     1.9 +/**
    1.10 + *
    1.11 + * @author Jaroslav Tulach
    1.12 + */
    1.13 +// BEGIN: design.less.friend.Accessor
    1.14 +public abstract class Accessor {
    1.15 +    private static volatile Accessor DEFAULT;
    1.16 +    public static Accessor getDefault() {
    1.17 +        Accessor a = DEFAULT;
    1.18 +        if (a == null) {
    1.19 +            throw new IllegalStateException("Something is wrong: " + a);
    1.20 +        }
    1.21 +        return a;
    1.22 +    }
    1.23 +
    1.24 +    public static void setDefault(Accessor accessor) {
    1.25 +        if (DEFAULT != null) {
    1.26 +            throw new IllegalStateException();
    1.27 +        }
    1.28 +        DEFAULT = accessor;
    1.29 +    }
    1.30 +    
    1.31 +    public Accessor() {
    1.32 +    }
    1.33 +
    1.34 +    protected abstract Item newItem();
    1.35 +    protected abstract void addChangeListener(Item item, ChangeListener l);
    1.36 +// FINISH: design.less.friend.Accessor
    1.37 +
    1.38 +    // BEGIN: design.less.friend.InitAPI
    1.39 +    private static final Class<?> INIT_API_CLASS = loadClass(Item.class.getName());
    1.40 +    private static Class<?> loadClass(String name) {
    1.41 +        try {
    1.42 +            return Class.forName(
    1.43 +                name, true, Accessor.class.getClassLoader()
    1.44 +            );
    1.45 +        } catch (Exception ex) {
    1.46 +            throw new RuntimeException(ex);
    1.47 +        }
    1.48 +    }
    1.49 +    // END: design.less.friend.InitAPI
    1.50 +}