1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. 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 package org.apache.commons.vfs2.util; 18 19 /** 20 * Factory to create an instance of a Cryptor. 21 * 22 * @since 2.0 23 */ 24 public final class CryptorFactory { 25 26 /** 27 * The System property name to identify the Cryptor class to be used. 28 */ 29 public static final String CRYPTOR_CLASS = "org.apache.commons.vfs2.cryptor"; 30 31 private static Cryptor instance; 32 33 /** 34 * Prevent instantiation of the class. 35 */ 36 private CryptorFactory() { 37 38 } 39 40 /** 41 * Allows the Cryptor class to be set programmatically. 42 * 43 * @param cryptor The Cryptor. 44 */ 45 public static synchronized void setCryptor(final Cryptor cryptor) { 46 instance = cryptor; 47 } 48 49 /** 50 * Return the Cryptor. If one has not been previously set, create it. The Cryptor class can be set by setting the 51 * "org.apache.commons.vfs2.cryptor" System property to the name of the Cryptor class. 52 * 53 * @return The Cryptor. 54 */ 55 public static synchronized Cryptor getCryptor() { 56 if (instance != null) { 57 return instance; 58 } 59 60 final String cryptorClass = System.getProperty(CRYPTOR_CLASS); 61 if (cryptorClass != null) { 62 try { 63 final Class<?> clazz = Class.forName(cryptorClass); 64 instance = (Cryptor) clazz.newInstance(); 65 return instance; 66 } catch (final Exception ex) { 67 throw new RuntimeException("Unable to create Cryptor " + cryptorClass, ex); 68 } 69 } 70 instance = new DefaultCryptor(); 71 return instance; 72 } 73 }