Open Source Repository

Home /spring/spring-context-3.0.5 | Repository Home



org/springframework/context/support/ReadOnlySystemAttributesMap.java
/*
 * Copyright 2002-2009 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.context.support;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

/**
 * Read-only {@code Map<String, String>} implementation that is backed by system properties or environment
 * variables.
 *
 <p>Used by {@link AbstractApplicationContext} when a {@link SecurityManager} prohibits access to {@link
 * System#getProperties()} or {@link System#getenv()}.
 *
 @author Arjen Poutsma
 @since 3.0
 */
abstract class ReadOnlySystemAttributesMap implements Map<String, String> {

  public boolean containsKey(Object key) {
    return get(key!= null;
  }

  public String get(Object key) {
    if (key instanceof String) {
      String attributeName = (Stringkey;
      return getSystemAttribute(attributeName);
    }
    else {
      return null;
    }
  }

  public boolean isEmpty() {
    return false;
  }

  /**
   * Template method that returns the underlying system attribute.
   *
   <p>Implementations typically call {@link System#getProperty(String)} or {@link System#getenv(String)} here.
   */
  protected abstract String getSystemAttribute(String attributeName);

  // Unsupported

  public int size() {
    throw new UnsupportedOperationException();
  }

  public String put(String key, String value) {
    throw new UnsupportedOperationException();
  }

  public boolean containsValue(Object value) {
    throw new UnsupportedOperationException();
  }

  public String remove(Object key) {
    throw new UnsupportedOperationException();
  }

  public void clear() {
    throw new UnsupportedOperationException();
  }

  public Set<String> keySet() {
    throw new UnsupportedOperationException();
  }

  public void putAll(Map<? extends String, ? extends String> m) {
    throw new UnsupportedOperationException();
  }

  public Collection<String> values() {
    throw new UnsupportedOperationException();
  }

  public Set<Entry<String, String>> entrySet() {
    throw new UnsupportedOperationException();
  }

}