|
What this is
This file is included in the DevDaily.com
"Java Source Code
Warehouse" project. The intent of this project is to help you "Learn
Java by Example" TM.
Other links
The source code
/*
* TestVeto - test the vetoable events
*
*/
import java.io.*;
import java.util.*;
import org.w3c.dom.*;
import java.beans.*;
import org.netbeans.modules.schema2beans.*;
import book.*;
public class TestVeto extends BaseTest
{
public static void main(String[] argv) {
BaseTest o = new TestVeto();
if (argv.length > 0)
o.setDocumentDir(argv[0]);
try {
o.run();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
System.exit(0);
}
public class MyListener implements VetoableChangeListener
{
GraphManager gm;
String listenerName;
String title;
Object oldValue;
Object newValue;
String propertyName;
Object source;
int index;
boolean remove;
// Used to check that the event is triggered once the changed are done
Chapter tracePara;
boolean raise = false;;
boolean raised = false;
boolean printStringArray = false;
public MyListener(String title, BaseBean bean)
{
this.listenerName = bean.name();
gm = bean.graphManager();
this.remove = false;
this.title = title;
out("new listener for " + this.title + " / " + this.listenerName);
}
public void printStringValues(String[] ss, String str)
{
if (ss == null)
out(str + " is null");
else
{
if (ss.length == 0)
out(str + ".length = 0");
else
for(int i=0; i");
if (remove)
{
out("<" + gm.getPropertyName(n) + "[" + this.index +
"]" + " - Parent: " + gm.getPropertyParentName(n) + ">");
}
else
{
out("<" + gm.getPropertyName(n) + "[" + this.index +
"]" + " - Parent: " + gm.getPropertyParentName(n) +
"/" + gm.getPropertyParent(n).getClass().getName() + ">");
}
if (this.tracePara != null)
{
String[] p = this.tracePara.getParagraph();
for (int i=0; i";
else
return this.oldValue.toString();
}
public Object newValue()
{
return this.newValue;
}
public String stringNewValue()
{
if (this.newValue == null)
return "";
else
return this.newValue.toString();
}
public String name()
{
return this.propertyName;
}
public String toString()
{
return this.name() + " raised from source " +
this.source.getClass().getName();
}
}
public void run()
throws Exception
{
Book book;
this.readDocument();
out("creating the bean graph");
book = Book.createGraph(this.doc);
GraphManager gm = book.graphManager();
out("bean graph created");
//out(book.toString());
/*
* Book
* Index[1,n]
* Word - String
* Ref[1,n]
* Page - String
* Line - String
* Chapter[1,n]
* Comment? - String
* Paragraph[0,n] - String
* Summary? - String
* Author[1,n] - String
* Good - Boolean
* Available - Boolean
*/
//
// Set a listener on the root
//
MyListener l = new MyListener("Book listener", book);
book.addVetoableChangeListener(l);
//GraphManager.debug(true);
setTest("simple change event on the root - no veto");
l.reset();
String s = "This book is about how to veto changes";
// Change a property on the root - this should raises an event
book.setSummary(s);
// Check the received event
check(l.oldValue() == null, "(old value)");
check(l.newValue().equals(s), "(new value)");
check(book.getSummary().equals(s), "(new value)");
boolean gotException = false;
setTest("simple change event on the root - veto");
l.reset();
l.veto();
String s2 = "this is the new value";
s = book.getSummary();
try {
book.setSummary(s2);
} catch(PropertyVetoException ve) {
check(book.getSummary().equals(s), "(got exception & same value)");
gotException = true;
}
if (!gotException)
check(false, " didn't get the veto exception (1)!");
setTest("Try to listen for a non vetoable property");
gotException = false;
try {
book.addVetoableChangeListener("Reviews", l);
} catch(Exception e) {
check(true, "got exception:\n" + e.getMessage());
gotException = true;
}
if (!gotException)
check(false, " didn't get the runtime exception (2)!");
setTest("Indexed final property");
l.reset();
String [] ss = {"Author1", "Author2", "Author3"};
l.printStringArray();
book.setAuthor(ss);
l.reset();
l.veto();
l.printStringArray();
String [] ss2 = {"Author1_new", "Author2_new"};
try {
book.setAuthor(ss2);
} catch(PropertyVetoException ve) {
check(true, "(got exception)");
gotException = true;
}
if (!gotException)
check(false, " didn't get the veto exception (3)!");
l.printStringValues(book.getAuthor(), "getAuthor()");
setTest("Set a second listener to get two events");
MyListener l2 = new MyListener("Author listener", book);
l.reset();
l2.reset();
gotException = false;
try {
book.addVetoableChangeListener("author", l2);
} catch(Exception e) {
check(false, "got exception:\n" + e.getMessage());
gotException = true;
}
String [] ss3 = {"re-Author1_new", "re-Author2_new"};
book.setAuthor(ss3);
l.printStringValues(book.getAuthor(), "getAuthor()");
l.reset();
l2.reset();
l.veto();
String [] ss4 = {"only_one_author"};
try {
book.setAuthor(ss4);
} catch(PropertyVetoException ve) {
check(true, "(got exception)");
gotException = true;
}
if (!gotException)
check(false, " didn't get the veto exception (4)!");
}
}
|