1/*
2 * Copyright (c) 1997, 2004, 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 java.security;
27
28/**
29 * A GuardedObject is an object that is used to protect access to
30 * another object.
31 *
32 * <p>A GuardedObject encapsulates a target object and a Guard object,
33 * such that access to the target object is possible
34 * only if the Guard object allows it.
35 * Once an object is encapsulated by a GuardedObject,
36 * access to that object is controlled by the <code>getObject</code>
37 * method, which invokes the
38 * <code>checkGuard</code> method on the Guard object that is
39 * guarding access. If access is not allowed,
40 * an exception is thrown.
41 *
42 * @see Guard
43 * @see Permission
44 *
45 * @author Roland Schemers
46 * @author Li Gong
47 */
48
49public class GuardedObject implements java.io.Serializable {
50
51    private static final long serialVersionUID = -5240450096227834308L;
52
53    private Object object; // the object we are guarding
54    private Guard guard;   // the guard
55
56    /**
57     * Constructs a GuardedObject using the specified object and guard.
58     * If the Guard object is null, then no restrictions will
59     * be placed on who can access the object.
60     *
61     * @param object the object to be guarded.
62     *
63     * @param guard the Guard object that guards access to the object.
64     */
65
66    public GuardedObject(Object object, Guard guard)
67    {
68        this.guard = guard;
69        this.object = object;
70    }
71
72    /**
73     * Retrieves the guarded object, or throws an exception if access
74     * to the guarded object is denied by the guard.
75     *
76     * @return the guarded object.
77     *
78     * @exception SecurityException if access to the guarded object is
79     * denied.
80     */
81    public Object getObject()
82        throws SecurityException
83    {
84        if (guard != null)
85            guard.checkGuard(object);
86
87        return object;
88    }
89
90    /**
91     * Writes this object out to a stream (i.e., serializes it).
92     * We check the guard if there is one.
93     */
94    private void writeObject(java.io.ObjectOutputStream oos)
95        throws java.io.IOException
96    {
97        if (guard != null)
98            guard.checkGuard(object);
99
100        oos.defaultWriteObject();
101    }
102}
103