1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.bitrepository.alarm;
26
27 import java.io.BufferedReader;
28 import java.io.File;
29 import java.io.FileReader;
30 import java.io.IOException;
31 import java.util.Properties;
32
33 import org.bitrepository.alarm.handling.handlers.AlarmStorer;
34 import org.bitrepository.alarm.store.AlarmDatabaseManager;
35 import org.bitrepository.alarm.store.AlarmServiceDAO;
36 import org.bitrepository.alarm.store.AlarmStore;
37 import org.bitrepository.common.settings.Settings;
38 import org.bitrepository.common.settings.XMLFileSettingsLoader;
39 import org.bitrepository.protocol.ProtocolComponentFactory;
40 import org.bitrepository.protocol.messagebus.MessageBus;
41 import org.bitrepository.protocol.security.BasicMessageAuthenticator;
42 import org.bitrepository.protocol.security.BasicMessageSigner;
43 import org.bitrepository.protocol.security.BasicOperationAuthorizor;
44 import org.bitrepository.protocol.security.BasicSecurityManager;
45 import org.bitrepository.protocol.security.MessageAuthenticator;
46 import org.bitrepository.protocol.security.MessageSigner;
47 import org.bitrepository.protocol.security.OperationAuthorizor;
48 import org.bitrepository.protocol.security.PermissionStore;
49 import org.bitrepository.protocol.security.SecurityManager;
50 import org.bitrepository.service.ServiceSettingsProvider;
51 import org.bitrepository.service.contributor.ContributorMediator;
52 import org.bitrepository.service.contributor.SimpleContributorMediator;
53 import org.bitrepository.service.database.DatabaseManager;
54 import org.bitrepository.settings.referencesettings.ServiceType;
55
56
57
58
59 public class AlarmServiceFactory {
60
61
62 private static AlarmService alarmService;
63
64 private static String configurationDir;
65
66 private static String privateKeyFile;
67
68
69 private static final String CONFIGFILE = "alarmservice.properties";
70
71 private static final String PRIVATE_KEY_FILE = "org.bitrepository.alarm-service.privateKeyFile";
72
73
74
75
76 private AlarmServiceFactory() { }
77
78
79
80
81
82 public static synchronized void init(String confDir) {
83 configurationDir = confDir;
84 }
85
86
87
88
89
90 public static synchronized AlarmService getAlarmService() {
91 if(alarmService == null) {
92 MessageAuthenticator authenticator;
93 MessageSigner signer;
94 OperationAuthorizor authorizer;
95 PermissionStore permissionStore;
96 SecurityManager securityManager;
97 ServiceSettingsProvider settingsLoader =
98 new ServiceSettingsProvider(new XMLFileSettingsLoader(configurationDir), ServiceType.ALARM_SERVICE);
99
100 Settings settings = settingsLoader.getSettings();
101 try {
102 loadProperties();
103 permissionStore = new PermissionStore();
104 authenticator = new BasicMessageAuthenticator(permissionStore);
105 signer = new BasicMessageSigner();
106 authorizer = new BasicOperationAuthorizor(permissionStore);
107 securityManager = new BasicSecurityManager(settings.getRepositorySettings(), privateKeyFile,
108 authenticator, signer, authorizer, permissionStore,
109 settings.getReferenceSettings().getAlarmServiceSettings().getID());
110
111 MessageBus messageBus = ProtocolComponentFactory.getInstance().getMessageBus(settings,
112 securityManager);
113 ContributorMediator contributorMediator = new SimpleContributorMediator(messageBus, settings, null);
114
115 DatabaseManager alarmDatabaseManager = new AlarmDatabaseManager(
116 settings.getReferenceSettings().getAlarmServiceSettings().getAlarmServiceDatabase());
117 AlarmStore store = new AlarmServiceDAO(alarmDatabaseManager);
118 alarmService = new BasicAlarmService(messageBus, settings, store, contributorMediator);
119
120
121 alarmService.addHandler(new AlarmStorer(store));
122 } catch (IOException e) {
123 throw new RuntimeException(e);
124 }
125 }
126
127 return alarmService;
128 }
129
130
131
132
133
134 private static void loadProperties() throws IOException {
135 Properties properties = new Properties();
136 File propertiesFile = new File(configurationDir, CONFIGFILE);
137 BufferedReader propertiesReader = new BufferedReader(new FileReader(propertiesFile));
138 properties.load(propertiesReader);
139 privateKeyFile = properties.getProperty(PRIVATE_KEY_FILE);
140 }
141 }