/*
* Licensed to the Apache Software Foundation ( ASF ) under one
* or more contributor license agreements . See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership . The ASF licenses this file
* to you under the Apache License , Version 2 . 0 ( the
* " License " ) ; you may not use this file except in compliance
* with the License . You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing ,
* software distributed under the License is distributed on an
* " AS IS " BASIS , WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND , either express or implied . See the License for the
* specific language governing permissions and limitations
* under the License .
*/
/*
* 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<ss.length; i++)
out(str + "[" + i + "]=" + ss[i]);
}
}
public void reset()
{
this .oldValue = null ;
this .newValue = null ;
this .propertyName = null ;
this .source = null ;
this .index = -1 ;
this .raise = false ;
this .raised = false ;
this .printStringArray = false ;
}
public void printStringArray()
{
this .printStringArray = true ;
}
public void traceParagraphs(Chapter c)
{
this .tracePara = c;
}
public void veto()
{
this .raise = true ;
}
public void vetoableChange(PropertyChangeEvent e)
throws PropertyVetoException
{
if (this .raised)
out(this .title+ " received an undo event:" );
else
out(this .title + " received veto event:" );
this .oldValue = e.getOldValue();
this .newValue = e.getNewValue();
this .propertyName = e.getPropertyName();
this .source = e.getSource();
String n = this .propertyName;
this .index = gm.getPropertyIndex(n);
out("<Lnr:" + this .listenerName + " Evt:" + n +
" Src:" + this .source.getClass().getName() + ">" );
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<p.length; i++)
out("From event listener: " + p[i]);
}
if (this .printStringArray)
{
this .printStringValues((String[])this .oldValue, "oldValues" );
this .printStringValues((String[])this .newValue, "newValues" );
}
if (this .raise && !this .raised)
{
out("Listener: raising PropertyVetoException" );
this .raised = true ;
throw new PropertyVetoException("value rejected" , e);
}
//out("received " + this.oldValue + "/" + this.newValue + "/" +
// this.propertyName);
}
public void removeMode()
{
this .remove = true ;
}
public Object oldValue()
{
return this .oldValue;
}
public String stringOldValue()
{
if (this .oldValue == null )
return "<null>" ;
else
return this .oldValue.toString();
}
public Object newValue()
{
return this .newValue;
}
public String stringNewValue()
{
if (this .newValue == null )
return "<null>" ;
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)!" );
}
}
Messung V0.5 in Prozent C=96 H=94 G=94
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland