View Javadoc

1   /**
2    *
3    * Copyright 2003-2004 The Apache Software Foundation
4    *
5    *  Licensed under the Apache License, Version 2.0 (the "License");
6    *  you may not use this file except in compliance with the License.
7    *  You may obtain a copy of the License at
8    *
9    *     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  package org.apache.geronimo.security.remoting.jmx;
19  import java.io.ObjectStreamException;
20  import java.io.Serializable;
21  import java.net.URI;
22  
23  import org.apache.geronimo.interceptor.Invocation;
24  import org.apache.geronimo.interceptor.InvocationKey;
25  
26  /**
27   * @version $Rev: 417891 $ $Date: 2006-06-28 15:45:07 -0700 (Wed, 28 Jun 2006) $
28   */
29  public final class InvocationSupport implements Serializable, InvocationKey {
30  
31      private static final long serialVersionUID = 3690191053600796981L;
32  
33      // Be careful here.  If you change the ordinals, this class must be changed on evey client.
34      private static int MAX_ORDINAL = 2;
35      private static final InvocationSupport[] values = new InvocationSupport[MAX_ORDINAL + 1];
36      private static final InvocationSupport REMOTE_URI = new InvocationSupport("REMOTE_URI", 0);
37      private static final InvocationSupport INVOCATION_TYPE = new InvocationSupport("INVOCATION_TYPE", 1);
38  
39      public static URI getRemoteURI(Invocation invocation) {
40          return (URI) invocation.get(REMOTE_URI);
41      }
42      public static void putRemoteURI(Invocation invocation, URI remoteURI) {
43          invocation.put(REMOTE_URI, remoteURI);
44      }
45      public static InvocationType getInvocationType(Invocation invocation) {
46          return (InvocationType) invocation.get(INVOCATION_TYPE);
47      }
48      public static void putInvocationType(Invocation invocation, InvocationType type) {
49          invocation.put(INVOCATION_TYPE, type);
50      }
51  
52      private final transient String name;
53      private final int ordinal;
54  
55      private InvocationSupport(String name, int ordinal) {
56          assert ordinal < MAX_ORDINAL;
57          assert values[ordinal] == null;
58          this.name = name;
59          this.ordinal = ordinal;
60          values[ordinal] = this;
61      }
62  
63      public String toString() {
64          return name;
65      }
66  
67      Object readResolve() throws ObjectStreamException {
68          return values[ordinal];
69      }
70  
71      static public boolean isAncestor(ClassLoader parent, ClassLoader child) {
72          // Root child? ancestor must be root too.
73          if (child == null)
74              return parent == null;
75          // Root parent is the ancestor of all classloaders.
76          if (parent == null)
77              return true;
78  
79          while (child != null) {
80              if (child.equals(parent))
81                  return true;
82              child = child.getParent();
83          }
84          return false;
85      }
86  
87      /**
88       * @see org.apache.geronimo.interceptor.InvocationKey#isTransient()
89       */
90      public boolean isTransient() {
91          return true;
92      }
93  
94  }