001    /*
002    *
003    * ====================================================================
004    *
005    * Copyright 2004 The Apache Software Foundation 
006    *
007    * Licensed under the Apache License, Version 2.0 (the "License");
008    * you may not use this file except in compliance with the License.
009    * You may obtain a copy of the License at
010    *
011    *     http://www.apache.org/licenses/LICENSE-2.0
012    *
013    * Unless required by applicable law or agreed to in writing, software
014    * distributed under the License is distributed on an "AS IS" BASIS,
015    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016    * See the License for the specific language governing permissions and
017    * limitations under the License.
018    *
019    */
020    package org.apache.commons.contract.store;
021    
022    import org.apache.commons.contract.Context;
023    import org.apache.commons.contract.Store;
024    import org.apache.commons.contract.StoreException;
025    import org.apache.commons.contract.constraints.CastException;
026    import org.apache.commons.contract.constraints.StringConstraints;
027    import org.apache.commons.i18n.bundles.ErrorBundle;
028    
029    public class Environment implements Store {
030        public final static String ID = "environment";
031        
032        public void put(String key, Object value, Context context) throws StoreException {
033            try {
034                System.setProperty(key, (String)StringConstraints.UNCONSTRAINED.cast(value, context));
035            } catch (CastException e) {
036                throw new StoreException(new ErrorBundle("storesStringsOnly"), e);
037            }
038        }
039    
040        public Object get(String key, Context context) throws StoreException {
041            return System.getProperty(key);
042        }
043    
044        public void dispose(String key, Context context) throws StoreException {
045            throw new StoreException(new ErrorBundle("disposeNotAvailable"));
046        }
047        
048        public String getId() {
049            return ID;
050        }
051    }