jtulach@287: package org.apidesign.friendpackage.impl; jtulach@0: jtulach@0: import javax.swing.event.ChangeListener; jtulach@287: import org.apidesign.friendpackage.api.Item; jtulach@0: jtulach@0: /** jtulach@0: * jtulach@0: * @author Jaroslav Tulach jtulach@0: */ jtulach@3: // BEGIN: design.less.friend.Accessor jtulach@0: public abstract class Accessor { jtulach@128: private static volatile Accessor DEFAULT; jtulach@128: public static Accessor getDefault() { jtulach@128: Accessor a = DEFAULT; jtulach@286: if (a == null) { jtulach@286: throw new IllegalStateException("Something is wrong: " + a); jtulach@128: } jtulach@286: return a; jtulach@128: } jtulach@128: jtulach@128: public static void setDefault(Accessor accessor) { jtulach@128: if (DEFAULT != null) { jtulach@128: throw new IllegalStateException(); jtulach@128: } jtulach@128: DEFAULT = accessor; jtulach@0: } jtulach@0: jtulach@0: public Accessor() { jtulach@0: } jtulach@0: jtulach@0: protected abstract Item newItem(); jtulach@0: protected abstract void addChangeListener(Item item, ChangeListener l); jtulach@286: // FINISH: design.less.friend.Accessor jtulach@286: jtulach@286: // BEGIN: design.less.friend.InitAPI jtulach@376: private static final Class INIT_API_CLASS = loadClass( jtulach@376: Item.class.getName() jtulach@376: ); jtulach@286: private static Class loadClass(String name) { jtulach@286: try { jtulach@286: return Class.forName( jtulach@286: name, true, Accessor.class.getClassLoader() jtulach@286: ); jtulach@286: } catch (Exception ex) { jtulach@286: throw new RuntimeException(ex); jtulach@286: } jtulach@286: } jtulach@286: // END: design.less.friend.InitAPI jtulach@0: }