1 package org.columba.mail.pgp; 19 20 import java.util.Hashtable ; 21 import java.util.Map ; 22 import java.util.Properties ; 23 import java.util.logging.Logger ; 24 25 import org.columba.api.plugin.IExtension; 26 import org.columba.api.plugin.IExtensionHandler; 27 import org.columba.api.plugin.PluginHandlerNotFoundException; 28 import org.columba.core.gui.externaltools.ExternalToolsManager; 29 import org.columba.core.logging.Logging; 30 import org.columba.core.plugin.PluginManager; 31 import org.columba.mail.config.MailConfig; 32 import org.columba.mail.config.SecurityItem; 33 import org.waffel.jscf.JSCFConnection; 34 import org.waffel.jscf.JSCFDriverManager; 35 import org.waffel.jscf.JSCFException; 36 import org.waffel.jscf.gpg.GPGDriver; 37 38 46 public class JSCFController { 47 48 49 private static final Logger LOG = Logger.getLogger("org.columba.mail.pgp"); 50 51 private static JSCFController myInstance = null; 52 53 private static Map connectionMap; 54 55 61 public static JSCFController getInstance() { 62 if (myInstance == null) { 63 myInstance = new JSCFController(); 64 registerDrivers(); 65 connectionMap = new Hashtable (); 66 } 67 68 return myInstance; 69 } 70 71 private static void registerDrivers() { 72 try { 73 JSCFDriverManager.registerJSCFDriver(new GPGDriver()); 76 } catch (JSCFException e) { 77 78 e.printStackTrace(); 79 } 80 } 81 82 97 public JSCFConnection getConnection(String userID) throws JSCFException { 98 SecurityItem pgpItem = MailConfig.getInstance().getAccountList() 99 .getDefaultAccount().getPGPItem(); 100 JSCFConnection con = (JSCFConnection) connectionMap.get(userID); 101 102 if (con == null) { 103 LOG.fine("no connection for userID (" + userID 104 + ") found. Creating a new Connection."); 105 con = JSCFDriverManager.getConnection("jscf:gpg:"); 108 109 111 IExtensionHandler handler = null; 112 String path = null; 113 try { 114 LOG.fine("try to get the handler"); 115 handler = PluginManager 116 .getInstance().getExtensionHandler( 117 "org.columba.core.externaltools"); 118 LOG.fine("recived Handler ... getting path from it"); 119 path = ExternalToolsManager.getInstance() 120 .getLocationOfExternalTool("gpg").getPath(); 121 LOG.fine("setting path: " + path); 122 } catch (PluginHandlerNotFoundException e) { 123 LOG.fine("PluginHandler not found" + e); 124 if (Logging.DEBUG) { 125 e.printStackTrace(); 126 } 127 } 128 129 133 Properties props = con.getProperties(); 134 if (path == null) { 135 throw new ProgramNotFoundException("invalid path"); 136 } 137 props.put("PATH", path); 138 if (handler != null) { 139 IExtension extension = handler.getExtension("gpg"); 140 141 LOG.fine("gpg userId: " + extension.getMetadata().getId()); 142 } 143 LOG.info("gpg path: " + props.get("PATH")); 144 props.put("USERID", pgpItem.get("id")); 145 LOG.info("current gpg userID: " + props.get("USERID")); 146 con.setProperties(props); 147 connectionMap.put(userID, con); 148 } 149 150 return con; 151 } 152 153 165 public JSCFConnection getConnection() throws JSCFException { 166 SecurityItem pgpItem = MailConfig.getInstance().getAccountList() 167 .getDefaultAccount().getPGPItem(); 168 169 return getConnection(pgpItem.get("id")); 170 } 171 } | Popular Tags |