alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

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)!");

 	}

}



... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.