View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership. The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License. You may obtain a copy of the License at
9    * 
10   *      http://www.apache.org/licenses/LICENSE-2.0
11   * 
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  package org.apache.river.action;
20  
21  import java.security.AccessController;
22  import java.security.PrivilegedAction;
23  import java.util.logging.Logger;
24  import java.util.logging.Level;
25  
26  /**
27   * A convenience class for retrieving the string value of a system
28   * property as a privileged action.
29   *
30   * <p>An instance of this class can be used as the argument of {@link
31   * AccessController#doPrivileged(PrivilegedAction)
32   * AccessController.doPrivileged} or <code>
33   * net.jini.security.Security#doPrivileged(PrivilegedAction) Security.doPrivileged</code>.
34   *
35   * <p>The following code retrieves the value of the system property
36   * named <code>"prop"</code> as a privileged action:
37   *
38   * <pre>
39   * String s = (String) String.doPrivileged(
40   *                 new GetPropertyAction("prop"));
41   * </pre>
42   *
43   * <p>If the protection domain of the immediate caller of
44   * <code>doPrivileged</code> or the protection domain of this class
45   * does not imply the permissions necessary for the operation, the
46   * behavior is as if the system property is not defined.
47   *
48   * @author	Sun Microsystems, Inc.
49   * 
50   * @see		PrivilegedAction
51   * @see		AccessController
52   * <code>see		net.jini.security.Security</code>
53   * @since 2.0
54   **/
55  public class GetPropertyAction implements PrivilegedAction<String> {
56  
57      private static final Logger logger =
58  	Logger.getLogger("org.apache.river.action.GetPropertyAction");
59      
60      private final String theProp;
61      private final String defaultVal;
62  
63      /**
64       * Constructor that takes the name of the system property whose
65       * string value needs to be determined.
66       *
67       * @param	theProp the name of the system property
68       **/
69      public GetPropertyAction(String theProp) {
70  	this.theProp = theProp;
71  	defaultVal = null;
72      }
73  
74      /**
75       * Constructor that takes the name of the system property and the
76       * default value of that property.
77       *
78       * @param	theProp the name of the system property
79       * @param	defaultVal the default value
80       **/
81      public GetPropertyAction(String theProp, String defaultVal) {
82  	this.theProp = theProp;
83  	this.defaultVal = defaultVal;
84      }
85  
86      /**
87       * Determines the string value of the system property whose name
88       * was specified in the constructor.
89       *
90       * <p>If the system property is defined, then this method returns
91       * its value.  Otherwise, if a default value was supplied to this
92       * object's constructor, then this method returns that default
93       * value, or else <code>null</code> is returned.
94       *
95       * @return	the string value of the system property or the default
96       * value, or <code>null</code>
97       **/
98      @Override
99      public String run() {
100 	try {
101 	    String value = System.getProperty(theProp);
102 	    if (value != null) {
103 		return value;
104 	    }
105 	} catch (SecurityException e) {
106 	    if (logger.isLoggable(Level.FINE)) {
107 		logger.logp( Level.FINE,
108 		    GetPropertyAction.class.toString(), "run()",
109 		    "security exception reading \"{0}\", returning {1}"
110                     , new Object[] {theProp, defaultVal});
111                 throw e;
112 	    }             
113 	}
114 	return defaultVal;
115     }
116 }