001 /*
002 * JBoss, Home of Professional Open Source.
003 * Copyright 2008, Red Hat Middleware LLC, and individual contributors
004 * as indicated by the @author tags. See the copyright.txt file in the
005 * distribution for a full listing of individual contributors.
006 *
007 * This is free software; you can redistribute it and/or modify it
008 * under the terms of the GNU Lesser General Public License as
009 * published by the Free Software Foundation; either version 2.1 of
010 * the License, or (at your option) any later version.
011 *
012 * This software is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015 * Lesser General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this software; if not, write to the Free
019 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021 */
022 package org.jboss.dna.graph.connectors;
023
024 import java.security.AccessControlContext;
025 import java.security.AccessController;
026 import javax.security.auth.Subject;
027 import javax.security.auth.login.LoginContext;
028 import org.jboss.dna.common.component.ClassLoaderFactory;
029 import org.jboss.dna.common.component.StandardClassLoaderFactory;
030 import org.jboss.dna.common.util.CheckArg;
031 import org.jboss.dna.common.util.Logger;
032 import org.jboss.dna.graph.ExecutionContext;
033 import org.jboss.dna.graph.properties.NamespaceRegistry;
034 import org.jboss.dna.graph.properties.PropertyFactory;
035 import org.jboss.dna.graph.properties.ValueFactories;
036 import org.jboss.dna.graph.properties.basic.BasicNamespaceRegistry;
037 import org.jboss.dna.graph.properties.basic.BasicPropertyFactory;
038 import org.jboss.dna.graph.properties.basic.StandardValueFactories;
039
040 /**
041 * @author Randall Hauch
042 * @author John Verhaeg
043 */
044 public class BasicExecutionContext implements ExecutionContext {
045
046 private final ClassLoaderFactory classLoaderFactory;
047 private final LoginContext loginContext;
048 private final AccessControlContext accessControlContext;
049 private final Subject subject;
050 private final PropertyFactory propertyFactory;
051 private final ValueFactories valueFactories;
052 private final NamespaceRegistry namespaceRegistry;
053
054 public BasicExecutionContext() {
055 this(new BasicNamespaceRegistry());
056 }
057
058 public BasicExecutionContext( NamespaceRegistry namespaceRegistry ) {
059 this(namespaceRegistry, null, null);
060 }
061
062 public BasicExecutionContext( LoginContext loginContext ) {
063 this(loginContext, new BasicNamespaceRegistry());
064 }
065
066 public BasicExecutionContext( AccessControlContext accessControlContext ) {
067 this(accessControlContext, new BasicNamespaceRegistry());
068 }
069
070 public BasicExecutionContext( LoginContext loginContext,
071 NamespaceRegistry namespaceRegistry ) {
072 this(loginContext, namespaceRegistry, null, null);
073 }
074
075 public BasicExecutionContext( AccessControlContext accessControlContext,
076 NamespaceRegistry namespaceRegistry ) {
077 this(accessControlContext, namespaceRegistry, null, null);
078 }
079
080 public BasicExecutionContext( NamespaceRegistry namespaceRegistry,
081 ValueFactories valueFactories,
082 PropertyFactory propertyFactory ) {
083 this(null, null, namespaceRegistry, valueFactories, propertyFactory);
084 }
085
086 public BasicExecutionContext( LoginContext loginContext,
087 NamespaceRegistry namespaceRegistry,
088 ValueFactories valueFactories,
089 PropertyFactory propertyFactory ) {
090 this(loginContext, null, namespaceRegistry, valueFactories, propertyFactory);
091 }
092
093 public BasicExecutionContext( AccessControlContext accessControlContext,
094 NamespaceRegistry namespaceRegistry,
095 ValueFactories valueFactories,
096 PropertyFactory propertyFactory ) {
097 this(null, accessControlContext, namespaceRegistry, valueFactories, propertyFactory);
098 }
099
100 private BasicExecutionContext( LoginContext loginContext,
101 AccessControlContext accessControlContext,
102 NamespaceRegistry namespaceRegistry,
103 ValueFactories valueFactories,
104 PropertyFactory propertyFactory ) {
105 CheckArg.isNotNull(namespaceRegistry, "namespaceRegistry");
106 this.loginContext = loginContext;
107 this.accessControlContext = accessControlContext;
108 if (loginContext == null) {
109 this.subject = Subject.getSubject(accessControlContext == null ? AccessController.getContext() : accessControlContext);
110 } else {
111 this.subject = loginContext.getSubject();
112 }
113 this.namespaceRegistry = namespaceRegistry;
114 this.valueFactories = valueFactories != null ? valueFactories : new StandardValueFactories(this.namespaceRegistry);
115 this.propertyFactory = propertyFactory != null ? propertyFactory : new BasicPropertyFactory(this.valueFactories);
116 this.classLoaderFactory = new StandardClassLoaderFactory();
117 }
118
119 /**
120 * {@inheritDoc}
121 *
122 * @see org.jboss.dna.common.component.ClassLoaderFactory#getClassLoader(java.lang.String[])
123 */
124 public ClassLoader getClassLoader( String... classpath ) {
125 return this.classLoaderFactory.getClassLoader(classpath);
126 }
127
128 /**
129 * {@inheritDoc}
130 *
131 * @see org.jboss.dna.graph.ExecutionContext#getAccessControlContext()
132 */
133 public AccessControlContext getAccessControlContext() {
134 return accessControlContext;
135 }
136
137 /**
138 * {@inheritDoc}
139 *
140 * @see org.jboss.dna.graph.ExecutionContext#getLoginContext()
141 */
142 public LoginContext getLoginContext() {
143 return loginContext;
144 }
145
146 /**
147 * {@inheritDoc}
148 */
149 public NamespaceRegistry getNamespaceRegistry() {
150 return namespaceRegistry;
151 }
152
153 /**
154 * {@inheritDoc}
155 */
156 public PropertyFactory getPropertyFactory() {
157 return propertyFactory;
158 }
159
160 /**
161 * {@inheritDoc}
162 *
163 * @see org.jboss.dna.graph.ExecutionContext#getSubject()
164 */
165 public Subject getSubject() {
166 return subject;
167 }
168
169 /**
170 * {@inheritDoc}
171 */
172 public ValueFactories getValueFactories() {
173 return valueFactories;
174 }
175
176 /**
177 * {@inheritDoc}
178 *
179 * @see org.jboss.dna.graph.ExecutionContext#getLogger(java.lang.Class)
180 */
181 public Logger getLogger( Class<?> clazz ) {
182 return Logger.getLogger(clazz);
183 }
184
185 /**
186 * {@inheritDoc}
187 *
188 * @see org.jboss.dna.graph.ExecutionContext#getLogger(java.lang.String)
189 */
190 public Logger getLogger( String name ) {
191 return Logger.getLogger(name);
192 }
193 }