01: /*
02: * $RCSfile: ImagingListenerImpl.java,v $
03: *
04: * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
05: *
06: * Use is subject to license terms.
07: *
08: * $Revision: 1.1 $
09: * $Date: 2005/02/11 04:57:00 $
10: * $State: Exp $
11: */
12: package com.sun.media.jai.util;
13:
14: import java.lang.ref.SoftReference;
15: import javax.media.jai.OperationRegistry;
16: import javax.media.jai.util.ImagingListener;
17:
18: /**
19: * A simply implementation of the interface <code> ImagingListener</code>.
20: * In the method <code>errorOccurred</code>, only the message and the
21: * stack trace of the provided <code>Throwable</code> is printed
22: * into the stream <code>System.err</code>. This keeps the
23: * backward compatibility.
24: *
25: * <p> This class is a singleton that has only one instance. This single
26: * instance can be retrieved by calling the static method
27: * <code>getInstance</code>.
28: *
29: * @see ImagingListener
30: *
31: * @since JAI 1.1.2
32: */
33: public class ImagingListenerImpl implements ImagingListener {
34: private static SoftReference reference = new SoftReference(null);
35:
36: /**
37: * Retrieves the unique instance of this class the construction of
38: * which is deferred until the first invocation of this method.
39: */
40: public static ImagingListenerImpl getInstance() {
41: synchronized (reference) {
42: Object referent = reference.get();
43: ImagingListenerImpl listener;
44: if (referent == null) {
45: // First invocation or SoftReference has been cleared.
46: reference = new SoftReference(
47: listener = new ImagingListenerImpl());
48: } else {
49: // SoftReference has not been cleared.
50: listener = (ImagingListenerImpl) referent;
51: }
52:
53: return listener;
54: }
55: }
56:
57: /**
58: * The constructor.
59: */
60: private ImagingListenerImpl() {
61: }
62:
63: public synchronized boolean errorOccurred(String message,
64: Throwable thrown, Object where, boolean isRetryable)
65: throws RuntimeException {
66: // Silent the RuntimeException occuring in any OperationRegistry
67: // and rethrown all the other RuntimeExceptions.
68: if (thrown instanceof RuntimeException
69: && !(where instanceof OperationRegistry))
70: throw (RuntimeException) thrown;
71:
72: System.err.println("Error: " + message);
73: System.err.println("Occurs in: "
74: + ((where instanceof Class) ? ((Class) where).getName()
75: : where.getClass().getName()));
76: thrown.printStackTrace(System.err);
77: return false;
78: }
79: }
|