1/*
2 * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package sun.applet;
27
28import java.awt.Toolkit;
29import java.awt.Image;
30import java.lang.ref.SoftReference;
31import sun.awt.image.URLImageSource;
32import java.net.URL;
33
34@Deprecated(since = "9")
35class AppletImageRef {
36    private SoftReference<Image> soft = null;
37
38    URL url;
39
40    /**
41     * Returns a pointer to the object referenced by this Ref.  If the object
42     * has been thrown away by the garbage collector, it will be
43     * reconstituted. This method does everything necessary to ensure that the garbage
44     * collector throws things away in Least Recently Used(LRU) order.  Applications should
45     * never override this method. The get() method effectively caches calls to
46     * reconstitute().
47     */
48    public synchronized Image get() {
49        Image t = check();
50        if (t == null) {
51            t = reconstitute();
52            setThing(t);
53        }
54        return t;
55    }
56
57    /**
58     * Create the Ref
59     */
60    AppletImageRef(URL url) {
61        this.url = url;
62    }
63
64    /**
65     * Flushes the cached object.  Forces the next invocation of get() to
66     * invoke reconstitute().
67     */
68    public synchronized void flush() {
69        SoftReference<Image> s = soft;
70        if (s != null) s.clear();
71        soft = null;
72    }
73
74    /**
75     * Sets the thing to the specified object.
76     * @param thing the specified object
77     */
78    public synchronized void setThing(Image thing) {
79        flush();
80        soft = new SoftReference<>(thing);
81    }
82
83    /**
84     * Checks to see what object is being pointed at by this Ref and returns it.
85     */
86    public synchronized Image check() {
87        SoftReference<Image> s = soft;
88        if (s == null) return null;
89        return s.get();
90    }
91
92    /**
93     * Reconsitute the image.  Only called when the ref has been flushed.
94     */
95    public Image reconstitute() {
96        Image img = Toolkit.getDefaultToolkit().createImage(new URLImageSource(url));
97        return img;
98    }
99}
100