001 package opendreams.proxy;
002
003 import java.io.IOException;
004 import java.io.InputStream;
005 import java.io.Reader;
006 import java.util.Properties;
007
008 /**
009 * Propriedades para acesso ao OpenDreams.
010 * As seguintes propriedades são obrigatórias:
011 * <ul>
012 * <li>openbus.acs.userLogin
013 * <li>openbus.acs.userPassword
014 * <li>openbus.acs.host
015 * <li>openbus.acs.port
016 * <li>openbus.acs.delegate
017 * <li>org.omg.CORBA.ORBClass
018 * <li>org.omg.CORBA.ORBSingletonClass
019 * </ul>
020 *
021 * @author Tecgraf PUC-Rio
022 *
023 */
024 public class OpenDreamsProperties extends Properties {
025
026 /** Nome default do componente OpenDreams do barramento */
027 public static final String IOPENDREAMS_COMPONENT_NAME = "OpenDreams";
028
029 /** Versão default do componente OpenDreams do barramento*/
030 public static final String IOPENDREAMS_COMPONENT_VERSION = "1.0.0";
031
032 /** Nome default do componente IHierachicalDataService do barramento */
033 public static final String IHIERARCHICALDATASERVICE_COMPONENT_NAME = "ProjectService";
034
035 /** Versão default do componente IHierachicalDataService do barramento */
036 public static final String IHIERARCHICALDATASERVICE_COMPONENT_VERSION = "1.0.0";
037
038 /** Nome default da classe para uso na propriedade <code>org.omg.CORBA.ORBClass</code> do ORB. */
039 public static final String ORB_CLASS = "org.jacorb.orb.ORB";
040
041 /** Nome default da classe para uso na propriedade <code>org.omg.CORBA.ORBSingletonClass</code> do ORB. */
042 public static final String ORB_SINGLETON_CLASS = "org.jacorb.orb.ORBSingleton";
043
044 /**
045 * Nome das propriedades usadas pelo OpenDreams
046 */
047 public static String[] PROPERTIES =
048 new String[] {
049 "openbus.acs.host",
050 "openbus.acs.port",
051 "openbus.acs.entity.name",
052 "openbus.acs.private.key",
053 "openbus.acs.certificate",
054 "openbus.acs.delegate",
055 "opendreams.component.name",
056 "opendreams.component.version",
057 "opendreams.project.name",
058 "dataservice.component.name",
059 "dataservice.component.version",
060 "org.omg.CORBA.ORBClass",
061 "org.omg.CORBA.ORBSingletonClass"};
062
063 /**
064 * Contrói as propriedades para acesso ao OpenDreams a partir das propriedades
065 * especificadas.
066 * Todas as propriedades precisam estar definidas.
067 * @param properties propriedades usadas
068 *
069 * @throws OpenDreamsException se houver algum erro durante a carga das propriedades
070 */
071 public OpenDreamsProperties(Properties properties) throws OpenDreamsException {
072 for (String name : PROPERTIES) {
073 String value = properties.getProperty(name);
074 if (value!=null)
075 this.setProperty(name, value);
076 }
077 }
078
079 /**
080 * Contrói as propriedades para acesso ao OpenDreams carregando de um arquivo.
081 * Todas as propriedades precisam estar definidas.
082 *
083 * @param propertiesFile nome do arquivo de propriedades
084 * @throws OpenDreamsException se houver algum erro durante a carga das propriedades
085 */
086 public OpenDreamsProperties(InputStream propertiesFile) throws OpenDreamsException {
087 try {
088 load(propertiesFile);
089 }
090 catch (IOException e) {
091 throw new OpenDreamsException(
092 "Erro na leitura do arquivo de propriedades " + propertiesFile, e);
093 }
094 }
095
096 /**
097 * Contrói as propriedades para acesso ao OpenDreams carregando de um arquivo.
098 * Todas as propriedades precisam estar definidas.
099 *
100 * @param propertiesFile nome do arquivo de propriedades
101 * @throws OpenDreamsException se houver algum erro durante a carga das propriedades
102 */
103 public OpenDreamsProperties(Reader propertiesFile) throws OpenDreamsException {
104 try {
105 load(propertiesFile);
106 }
107 catch (IOException e) {
108 throw new OpenDreamsException(
109 "Erro na leitura do arquivo de propriedades " + propertiesFile, e);
110 }
111 }
112
113 /**
114 * Obtem o servidor do serviço de acesso do barramento
115 * @return o servidor onde o barramento está executando
116 */
117 public String getHost() {
118 return this.getProperty("openbus.acs.host");
119 }
120
121 /**
122 * Obtem a porta do serviço de acesso do barramento
123 * @return a porta onde o barramento está executando
124 */
125 public int getPort() {
126 return Integer.parseInt(this.getProperty("openbus.acs.port"));
127 }
128
129 /**
130 * Obtem o login do usuário para o qual o acesso está sendo delegado.
131 * @return o login do usuário delegado
132 */
133 public String getDelegate() {
134 return this.getProperty("openbus.acs.delegate");
135 }
136
137 /**
138 * Obtém o nome do usuário para a conexão por certificado
139 * @return o nome do usuário
140 */
141 public String getEntityName() {
142 return this.getProperty("openbus.acs.entity.name");
143 }
144
145 /**
146 * Obtém o nome do arquivo com a chave primária do usuário para a conexão por certificado
147 * @return o nome do arquivo com a chave primária
148 */
149 public String getPrivateKey() {
150 return this.getProperty("openbus.acs.private.key");
151 }
152
153 /**
154 * Obtém o nome do arquivo com o certificado do usuário para a conexão por certificado
155 * @return o nome do arquivo com o certificado público
156 */
157 public String getCertificate() {
158 return this.getProperty("openbus.acs.certificate");
159 }
160
161 /**
162 * Verifica se a credencial deve possuir delegação para outro usuário.
163 * @return verdadeiro, se a credencial deve ser delegada para outro usuário
164 * ou false, caso contrário
165 */
166 public boolean hasDelegation() {
167 String value = getDelegate();
168 if (value!=null &&!value.trim().isEmpty()) {
169 return true;
170 }
171 return false;
172 }
173
174 /**
175 * Obtém o usuário que é passado na credencial para o OpenDreams.
176 * Esse usuário deve existir do servidor CSBase usado para execução.
177 * @return o login de um usuário cadastrado no servidor CSBase
178 */
179 public String getUser() {
180 if (hasDelegation()) {
181 return getDelegate();
182 } else {
183 return getEntityName();
184 }
185 }
186
187 /**
188 * Obtém o nome do componente OpenDreams publicado no barramento.
189 * Se não estiver definido, usa o default @see {@value #IOPENDREAMS_COMPONENT_NAME}.
190 * @return o nome do componente
191 */
192 public String getOpenDreamsComponentName() {
193 String property = this.getProperty("opendreams.component.name");
194 if (property==null || property.isEmpty()) {
195 property = IOPENDREAMS_COMPONENT_NAME;
196 }
197 return property;
198 }
199
200 /**
201 * Obtém a versão do componente OpenDreams publicado no barramento.
202 * A versão possui o formato major.minor.patch.
203 * Se não estiver definido, usa o default @see {@value #IOPENDREAMS_COMPONENT_VERSION}.
204 * @return a versão do componente
205 */
206 public String getOpenDreamsComponentVersion() {
207 String property = this.getProperty("opendreams.component.version");
208 if (property==null || property.isEmpty()) {
209 property = IOPENDREAMS_COMPONENT_VERSION;
210 }
211 return property;
212 }
213
214 /**
215 * Obtém o nome do componente DataService publicado no barramento.
216 * Se não estiver definido, usa o default @see {@value #IHIERARCHICALDATASERVICE_COMPONENT_NAME}.
217 * @return o nome do componente
218 */
219 public String getDataServiceComponentName() {
220 String property = this.getProperty("dataservice.component.name");
221 if (property==null || property.isEmpty()) {
222 property = IHIERARCHICALDATASERVICE_COMPONENT_NAME;
223 }
224 return property;
225 }
226
227 /**
228 * Obtém a versão do componente DataService publicado no barramento.
229 * A versão possui o formato major.minor.patch.
230 * Se não estiver definido, usa o default @see {@value #IHIERARCHICALDATASERVICE_COMPONENT_VERSION}.
231 * @return a versão do componente
232 */
233 public String getDataServiceComponentVersion() {
234 String property = this.getProperty("dataservice.component.version");
235 if (property==null || property.isEmpty()) {
236 property = IHIERARCHICALDATASERVICE_COMPONENT_VERSION;
237 }
238 return property;
239 }
240
241 /**
242 * Obtém o nome do projeto usado para acesso ao OpenDreams.
243 * Essa propriedade é opcional, mas
244 * @return o nome do projeto
245 */
246 public String getProjectName() {
247 return this.getProperty("opendreams.project.name");
248 }
249
250 /**
251 * Obtém o nome da classe para uso na propriedade <code>org.omg.CORBA.ORBClass</code> do ORB.
252 * Se não estiver definido, usa o default @see {@value #ORB_CLASS}.
253 * @return o nome da classe
254 */
255 public String getORBClass() {
256 String property = this.getProperty("org.omg.CORBA.ORBClass");
257 if (property==null || property.isEmpty()) {
258 property = ORB_CLASS;
259 }
260 return property;
261 }
262
263 /**
264 * Obtém o nome da classe para uso na propriedade <code>org.omg.CORBA.ORBSingletonClass</code> do ORB.
265 * Se não estiver definido, usa o default @see {@value #ORB_SINGLETON_CLASS}.
266 * @return o nome da classe
267 */
268 public String getORBSingletonClass() {
269 String property = this.getProperty("org.omg.CORBA.ORBSingletonClass");
270 if (property==null || property.isEmpty()) {
271 property = ORB_SINGLETON_CLASS;
272 }
273 return property;
274 }
275 }