01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17:
18: /* $Id: ElementListObserver.java 426576 2006-07-28 15:44:37Z jeremias $ */
19:
20: package org.apache.fop.layoutmgr;
21:
22: import java.util.Iterator;
23: import java.util.List;
24:
25: /**
26: * This class is used to observe Knuth element lists generated within the layout managers. This
27: * is mainly used for the purpose of automated testing. This implementation here does nothing.
28: * Please see the subclass within the test code.
29: */
30: public class ElementListObserver {
31:
32: private static List activeObservers = null;
33:
34: /**
35: * Adds a new Observer to the list.
36: * @param observer the observer implementation
37: */
38: public static void addObserver(Observer observer) {
39: if (!isObservationActive()) {
40: activeObservers = new java.util.ArrayList();
41: }
42: activeObservers.add(observer);
43: }
44:
45: /**
46: * Removes an Observer from the list. This call simply returns if the observer was not on
47: * the list and does nothing.
48: * @param observer the observer to remove
49: */
50: public static void removeObserver(Observer observer) {
51: if (isObservationActive()) {
52: activeObservers.remove(observer);
53: }
54: }
55:
56: /**
57: * Notifies all registered observers about the element list.
58: * @param elementList the Knuth element list
59: * @param category the category for the element list (example: main, static-content, table-cell)
60: * @param id ID for the element list (may be null)
61: */
62: public static void observe(List elementList, String category,
63: String id) {
64: if (isObservationActive()) {
65: if (category == null) {
66: throw new NullPointerException(
67: "category must not be null");
68: }
69: Iterator i = activeObservers.iterator();
70: while (i.hasNext()) {
71: ((Observer) i.next())
72: .observe(elementList, category, id);
73: }
74: }
75: }
76:
77: /** @return true if observation is active, i.e. Observers are registered. */
78: public static boolean isObservationActive() {
79: return activeObservers != null;
80: }
81:
82: /**
83: * Implement this interface to receive notifications on element lists.
84: */
85: public interface Observer {
86:
87: /**
88: * Notifies the observer about the element list.
89: * @param elementList the Knuth element list
90: * @param category the category for the element list (example: main, static-content or
91: * table-cell)
92: * @param id ID for the element list (may be null)
93: */
94: void observe(List elementList, String category, String id);
95:
96: }
97:
98: }
|