samples/friendpackage/src/apipkg/Item.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 10:03:27 +0200
changeset 190 8b87a7d88b31
parent 154 0fd5e9c500b9
child 285 321b25b8f6f8
permissions -rw-r--r--
Addressing issues at http://wiki.apidesign.org/index.php/Allow_Access_Only_From_Friend_Code
jtulach@0
     1
package apipkg;
jtulach@0
     2
jtulach@0
     3
import implpkg.Accessor;
jtulach@0
     4
import javax.swing.event.ChangeEvent;
jtulach@0
     5
import javax.swing.event.ChangeListener;
jtulach@0
     6
jtulach@0
     7
/** Class in API that everyone can use.
jtulach@0
     8
 *
jtulach@0
     9
 * @author Jaroslav Tulach
jtulach@0
    10
 */
jtulach@3
    11
// BEGIN: design.less.friend.Item
jtulach@0
    12
public final class Item {
jtulach@0
    13
    private int value;
jtulach@0
    14
    private ChangeListener listener;
jtulach@3
    15
jtulach@3
    16
    // BEGIN: design.less.friend.Item.static
jtulach@0
    17
    static {
jtulach@128
    18
        Accessor.setDefault(new AccessorImpl());
jtulach@0
    19
    }
jtulach@3
    20
    // END: design.less.friend.Item.static
jtulach@0
    21
    
jtulach@190
    22
    /** Only friends can create instances. */
jtulach@0
    23
    Item() {
jtulach@0
    24
    }
jtulach@0
    25
    
jtulach@190
    26
    /** Anyone can change value of the item. 
jtulach@0
    27
     */
jtulach@190
    28
    public void setValue(int newValue) {
jtulach@190
    29
        value = newValue;
jtulach@0
    30
        ChangeListener l = listener;
jtulach@0
    31
        if (l != null) {
jtulach@0
    32
            l.stateChanged(new ChangeEvent(this));
jtulach@0
    33
        }
jtulach@0
    34
    }
jtulach@0
    35
    
jtulach@0
    36
    /** Anyone can get the value of the item. 
jtulach@0
    37
     */
jtulach@0
    38
    public int getValue() {
jtulach@0
    39
        return value;
jtulach@0
    40
    }
jtulach@0
    41
    
jtulach@190
    42
    /** Only friends can listen to changes.
jtulach@0
    43
     */
jtulach@0
    44
    void addChangeListener(ChangeListener l) {
jtulach@0
    45
        assert listener == null;
jtulach@0
    46
        listener = l;
jtulach@0
    47
    }
jtulach@0
    48
    
jtulach@0
    49
}
jtulach@3
    50
// END: design.less.friend.Item