blob: 53692877b60a48f2eba039847470c8e526af95a4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
/*
* Copyright (c) 2003-2007 Israfil Consulting Services Corporation
* Copyright (c) 2003-2007 Christian Edward Gruber
* All Rights Reserved
*
* $Id: Types.java 129 2006-12-31 23:20:02Z cgruber $
*/
package net.israfil.foundation.valuemodel;
/**
* An interface for objects that can notify observers of changes to itself
* before the change. The objects thus notified can veto the change. The
* specific behaviour for vetoing is undefined and is dependent upon the
* particular implementation of the vetoable object and its vetoers.
* The changing object should call the provided callback signature, with the
* parameter being the object that was changed in its new state. The vetoer
* is responsible for knowing what it needs to know in order to validate or
* veto the change.
*
* Using a dynamic selector rather than a strong interface allows code
* to be notified of the change even if it was not constructed with the
* notification interface, though it does need to match the signature.
*
* @author <a href="mailto:cgruber@israfil.net">Christian Edward Gruber</a>
* @author Latest: $Author: cgruber $
* @version $Revision: 129 $
*/
public interface Vetoable {
/** Add one or more vetoers to this object, with a callback method spec
* that will be invoked upon a data change. The callback method should
* contain three parameters. The first is the notification source (the
* holder or whatever), the second the old value, and the third the new
* value. It also should return a boolean approving the change (or
* returning false to veto it)
*/
public void addVetoers(String callback, Object ... approvers);
/**
* Remove one or more vetoers from vetoable object.
*/
public void removeVetoers(Object ... approvers);
}
|