001 /* 002 003 $Id: SharpsterDaemon.java,v 1.15 2003/05/08 18:40:54 ndulgheru Exp $ 004 005 */ 006 007 package sharpster.daemon; 008 009 import net.jxta.id.*; 010 import net.jxta.document.*; 011 import java.io.FileInputStream; 012 import java.io.FileOutputStream; 013 import java.io.StringWriter; 014 import java.util.Enumeration; 015 import java.util.LinkedList; 016 import java.util.ListIterator; 017 018 import sharpster.daemon.externalcommunication.ExternalCommunication; 019 import sharpster.daemon.usermanagement.UserManager; 020 import sharpster.daemon.sharemanagement.ShareManager; 021 import sharpster.daemon.filemanagement.FileManager; 022 import sharpster.daemon.filemanagement.LocalFileManager; 023 import sharpster.daemon.filemanagement.CVSManager; 024 import sharpster.daemon.daemonplugin.DaemonPluginManager; 025 import sharpster.daemon.commandmanagement.ExternalCommandManager; 026 import sharpster.daemon.commandmanagement.InternalCommandManager; 027 import sharpster.daemon.clientcommunication.ClientCommunication; 028 import sharpster.daemon.groupmanagement.GroupController; 029 import sharpster.common.*; 030 031 public class SharpsterDaemon { 032 ExternalCommunication externalCommunication; 033 FileManager fileManager; 034 ShareManager shareManager; 035 UserManager userManager; 036 ExternalCommandManager externalCommandManager; 037 InternalCommandManager internalCommandManager; 038 DaemonPluginManager pluginManager; 039 ClientCommunication clientCommunication; 040 Mutex globalMutex; 041 GroupController groupController; 042 043 static String peerName = new String("N/A"); 044 static String jxtaUsername = new String(); 045 static String jxtaPassword = new String(); 046 static String cvsRoot = new String(); 047 static String cvsTemp = new String(); 048 049 public SharpsterDaemon() { 050 } 051 052 public static void main(String[] args) { 053 SharpsterDaemon daemon = new SharpsterDaemon(); 054 System.out.println("Starting Sharpster daemon..."); 055 daemon.initialize(); 056 } 057 058 public static String getPeerName() { 059 return new String(peerName); 060 } 061 062 public static void setPeerName(String name) { 063 peerName = new String(name); 064 } 065 066 public static String getCVSRoot() { 067 return cvsRoot; 068 } 069 070 public static String getCVSTemp() { 071 return cvsTemp; 072 } 073 074 private void readConfigFile(String file) { 075 try { 076 FileInputStream input = new FileInputStream(file); 077 StructuredDocument document = (StructuredTextDocument) 078 StructuredDocumentFactory.newStructuredDocument(new MimeMediaType("text/xml"), input); 079 080 Enumeration parameter = document.getChildren(); 081 082 while(parameter.hasMoreElements()) { 083 Element element = (Element)parameter.nextElement(); 084 String key = (String)element.getKey(); 085 if(key.equals("cvs-repository")) { 086 cvsRoot = (String)element.getValue(); 087 } 088 else if(key.equals("cvs-temporary")) { 089 cvsTemp = (String)element.getValue(); 090 } 091 else if(key.equals("jxta-username")) { 092 jxtaUsername = (String)element.getValue(); 093 System.setProperty("net.jxta.tls.principal", jxtaUsername); 094 } 095 else if(key.equals("jxta-password")) { 096 jxtaPassword = (String)element.getValue(); 097 System.setProperty("net.jxta.tls.password", jxtaPassword); 098 } 099 else { 100 System.out.println("Warning: unknown key found in configuration file ("+key+")."); 101 } 102 } 103 input.close(); 104 } 105 catch(Exception e) { 106 System.out.println("Error: could'nt read the Sharpster config."); 107 System.exit(1); 108 } 109 110 try { 111 java.io.File iofile = new java.io.File(cvsRoot); 112 if(!iofile.isDirectory() || !iofile.isAbsolute()) { 113 System.out.println("Error: The CVS root path is not valid, please check your config/sharpster.cfg."); 114 System.out.println(" Note that the CVS root path has to be absolute, i.e not relative."); 115 System.exit(1); 116 } 117 118 iofile = new java.io.File(cvsTemp); 119 if(!iofile.isDirectory() || !iofile.isAbsolute()) { 120 System.out.println("Error: The CVS temporary path is not valid, please check your config/sharpster.cfg."); 121 System.exit(1); 122 } 123 } 124 catch(Exception e) { 125 } 126 } 127 128 private void initialize() { 129 readConfigFile("config/sharpster.cfg"); 130 131 //Create all objects 132 globalMutex = new Mutex(); 133 externalCommunication = new ExternalCommunication(globalMutex); 134 clientCommunication = new ClientCommunication(globalMutex); 135 fileManager = new FileManager(); 136 userManager = new UserManager(); 137 shareManager = new ShareManager(); 138 externalCommandManager = new ExternalCommandManager(); 139 internalCommandManager = new InternalCommandManager(); 140 pluginManager = new DaemonPluginManager(); 141 groupController = new GroupController(); 142 143 //Initialize all objects 144 externalCommunication.initialize(userManager, 145 externalCommandManager); 146 147 clientCommunication.initialize(internalCommandManager); 148 149 fileManager.initialize(pluginManager); 150 userManager.initialize(); 151 shareManager.initialize(fileManager, userManager, groupController); 152 153 externalCommandManager.initialize(fileManager, shareManager, 154 userManager, externalCommunication, 155 globalMutex); 156 157 internalCommandManager.initialize(fileManager, shareManager, 158 userManager, externalCommunication, 159 globalMutex, groupController); 160 161 groupController.initialize(userManager); 162 163 164 if(!pluginManager.loadPlugins("plugins")) { 165 System.out.println("Warning: error loading plugins."); 166 } 167 else { 168 String[] names = pluginManager.getPluginNames(); 169 for(int i=0;i<names.length;i++) { 170 System.out.println("SD::Loaded plugin: "+names[i]); 171 } 172 } 173 174 if(!userManager.loadFromFile("config/users.cfg")) { 175 System.out.println("Warning: error reading users config."); 176 } 177 if(!fileManager.loadFromFile("config/files.cfg")) { 178 System.out.println("Warning: error reading files config."); 179 } 180 if(!shareManager.loadFromFile("config/shares.cfg")) { 181 System.out.println("Warning: error reading shares config."); 182 } 183 184 userManager.saveToFile(null); 185 fileManager.saveToFile(null); 186 shareManager.saveToFile(null); 187 188 //Start the threads 189 clientCommunication.start(); 190 externalCommunication.start(); 191 192 /*FileCollection files = new FileCollection(); 193 SharedFile file = new SharedFile(); 194 file.setFileName("test/test2/*.txt"); 195 files.addFile(file); 196 ResponseCollection col = externalCommandManager.remoteCheckoutFiles(files,"grendel"); 197 System.out.println(col.toString());*/ 198 } 199 } 200 201