EMMA Coverage Report (generated Fri Feb 14 08:28:31 UTC 2014)
[all classes][org.qedeq.kernel.se.config]

COVERAGE SUMMARY FOR SOURCE FILE [QedeqConfig.java]

nameclass, %method, %block, %line, %
QedeqConfig.java100% (1/1)100% (46/46)96%  (500/520)95%  (108/114)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class QedeqConfig100% (1/1)100% (46/46)96%  (500/520)95%  (108/114)
createAbsolutePath (String): File 100% (1/1)62%  (33/53)57%  (8/14)
QedeqConfig (File, String, File): void 100% (1/1)100% (14/14)100% (4/4)
createRelativePath (File): String 100% (1/1)100% (5/5)100% (1/1)
getBasisDirectory (): File 100% (1/1)100% (3/3)100% (1/1)
getBufferDirectory (): File 100% (1/1)100% (12/12)100% (4/4)
getConnectionTimeout (): int 100% (1/1)100% (5/5)100% (1/1)
getGenerationDirectory (): File 100% (1/1)100% (12/12)100% (4/4)
getHttpNonProxyHosts (): String 100% (1/1)100% (14/14)100% (4/4)
getHttpProxyHost (): String 100% (1/1)100% (14/14)100% (4/4)
getHttpProxyPort (): String 100% (1/1)100% (14/14)100% (4/4)
getKeyValue (String): String 100% (1/1)100% (5/5)100% (1/1)
getKeyValue (String, String): String 100% (1/1)100% (6/6)100% (1/1)
getKeyValue (String, boolean): boolean 100% (1/1)100% (11/11)100% (1/1)
getKeyValue (String, int): int 100% (1/1)100% (6/6)100% (1/1)
getLocalModulesDirectory (): File 100% (1/1)100% (12/12)100% (4/4)
getLogFile (): File 100% (1/1)100% (8/8)100% (1/1)
getLogFileString (): String 100% (1/1)100% (10/10)100% (4/4)
getModuleHistory (): String [] 100% (1/1)100% (5/5)100% (1/1)
getPreviouslyLoadedModules (): String [] 100% (1/1)100% (5/5)100% (1/1)
getReadTimeout (): int 100% (1/1)100% (5/5)100% (1/1)
getServiceEntries (Service): Parameters 100% (1/1)100% (16/16)100% (1/1)
getServiceKeyValue (Service, String, String): String 100% (1/1)100% (15/15)100% (1/1)
getServiceKeyValue (Service, String, boolean): boolean 100% (1/1)100% (15/15)100% (1/1)
getServiceKeyValue (Service, String, int): int 100% (1/1)100% (15/15)100% (1/1)
isAutoReloadLastSessionChecked (): boolean 100% (1/1)100% (7/7)100% (1/1)
isTraceOn (): boolean 100% (1/1)100% (7/7)100% (1/1)
saveModuleHistory (List): void 100% (1/1)100% (29/29)100% (4/4)
setAutoReloadLastSessionChecked (boolean): void 100% (1/1)100% (9/9)100% (2/2)
setBufferDirectory (File): void 100% (1/1)100% (9/9)100% (3/3)
setConnectionTimeout (int): void 100% (1/1)100% (5/5)100% (2/2)
setGenerationDirectory (File): void 100% (1/1)100% (9/9)100% (3/3)
setHttpNonProxyHosts (String): void 100% (1/1)100% (5/5)100% (2/2)
setHttpProxyHost (String): void 100% (1/1)100% (5/5)100% (2/2)
setHttpProxyPort (String): void 100% (1/1)100% (5/5)100% (2/2)
setKeyValue (String, String): void 100% (1/1)100% (6/6)100% (2/2)
setKeyValue (String, boolean): void 100% (1/1)100% (9/9)100% (2/2)
setKeyValue (String, int): void 100% (1/1)100% (6/6)100% (2/2)
setLocalModulesDirectory (File): void 100% (1/1)100% (9/9)100% (3/3)
setPreviouslyLoadedModules (String []): void 100% (1/1)100% (28/28)100% (4/4)
setReadTimeout (int): void 100% (1/1)100% (5/5)100% (2/2)
setServiceKeyValue (Service, String, String): void 100% (1/1)100% (15/15)100% (2/2)
setServiceKeyValue (Service, String, boolean): void 100% (1/1)100% (15/15)100% (2/2)
setServiceKeyValue (Service, String, int): void 100% (1/1)100% (15/15)100% (2/2)
setServiceKeyValues (Service, Parameters): void 100% (1/1)100% (29/29)100% (6/6)
setTraceOn (boolean): void 100% (1/1)100% (9/9)100% (2/2)
store (): void 100% (1/1)100% (4/4)100% (2/2)

1/* This file is part of the project "Hilbert II" - http://www.qedeq.org
2 *
3 * Copyright 2000-2014,  Michael Meyling <mime@qedeq.org>.
4 *
5 * "Hilbert II" is free software; you can redistribute
6 * it and/or modify it under the terms of the GNU General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15 
16package org.qedeq.kernel.se.config;
17 
18import java.io.File;
19import java.io.IOException;
20import java.util.Iterator;
21import java.util.List;
22 
23import org.qedeq.base.io.IoUtility;
24import org.qedeq.base.io.Parameters;
25import org.qedeq.base.io.Path;
26import org.qedeq.kernel.se.common.Service;
27 
28 
29/**
30 * This class gives a type save access to properties of the application.
31 *
32 * @author  Michael Meyling
33 */
34public class QedeqConfig {
35 
36    /** Default location for newly created QEDEQ modules. */
37    private static final String DEFAULT_LOCAL_MODULES_DIRECTORY
38        = "local";
39 
40    /** Default location for locally buffered module files. */
41    private static final String DEFAULT_LOCAL_BUFFER
42        = "buffer";
43 
44    /** Default location for generated module and document files. */
45    private static final String DEFAULT_GENERATED
46        = "generated";
47 
48    /** Default log file inclusive path. */
49    private static final String DEFAULT_LOG_FILE
50        = "log/log.txt";
51 
52    /** This class organizes the access to the configuration parameters. */
53    private final ConfigAccess configAccess;
54 
55    /** Basis directory of application for all variable data. Basis for all relative paths. */
56    private final File basisDirectory;
57 
58    /**
59     * Constructor.
60     *
61     * @param   configFile       Config file.
62     * @param   description      Config file description.
63     * @param   basisDirectory   Basis directory of application for all variable data. Basis for all
64     *                           new relative paths
65     * @throws  IOException      Config file couldn't be loaded.
66     */
67    public QedeqConfig(final File configFile, final String description, final File basisDirectory)
68            throws IOException {
69        configAccess = new ConfigAccess(configFile, description);
70        this.basisDirectory = basisDirectory.getCanonicalFile();
71    }
72 
73    /**
74     * Store properties in configuration file.
75     *
76     * @throws  IOException Writing failed.
77     */
78    public final void store() throws IOException {
79        configAccess.store();
80    }
81 
82    /**
83     * Get local file directory to save generated files in.
84     *
85     * @return  Generation directory.
86     */
87    public final File getGenerationDirectory() {
88        String location = getKeyValue("generationLocation");
89        if (location == null) {
90            location = QedeqConfig.DEFAULT_GENERATED;
91        }
92        return createAbsolutePath(location);
93    }
94 
95    /**
96     * Set local file directory for generated files.
97     *
98     * @param   location    generation directory.
99     */
100    public final void setGenerationDirectory(final File location) {
101        final String relative = createRelativePath(location);
102        setKeyValue("generationLocation", relative);
103    }
104 
105    /**
106     * Get local file directory for module buffering.
107     *
108     * @return  Buffer directory.
109     */
110    public final File getBufferDirectory() {
111        String location = getKeyValue("bufferLocation");
112        if (location == null) {
113            location = QedeqConfig.DEFAULT_LOCAL_BUFFER;
114        }
115        return createAbsolutePath(location);
116    }
117 
118 
119    /**
120     * Set local file directory for module buffering.
121     * After changing this location the buffer should eventually be cleared.
122     *
123     * @param   location    buffer directory.
124     */
125    public final void setBufferDirectory(final File location) {
126        final String relative = createRelativePath(location);
127        setKeyValue("bufferLocation", relative);
128    }
129 
130    /**
131     * Get directory for newly created QEDEQ module files.
132     *
133     * @return  Directory for newly created QEDEQ modules.
134     */
135    public final File getLocalModulesDirectory() {
136        String location = getKeyValue("localModulesDirectory");
137        if (location == null) {
138            location = QedeqConfig.DEFAULT_LOCAL_MODULES_DIRECTORY;
139        }
140        return createAbsolutePath(location);
141    }
142 
143 
144    /**
145     * Set directory for newly created module files.
146     * After changing this location the buffer should eventually be cleared.
147     *
148     * @param   location    Buffer directory.
149     */
150    public final void setLocalModulesDirectory(final File location) {
151        final String relative = createRelativePath(location);
152        setKeyValue("localModulesDirectory", relative);
153    }
154 
155    /**
156     * Get relative file location for log file.
157     *
158     * @return  Log file path relative to basis directory.
159     */
160    private final String getLogFileString() {
161        final String location = getKeyValue("logLocation");
162        if (location == null) {
163            return QedeqConfig.DEFAULT_LOG_FILE;
164        }
165        return location;
166    }
167 
168    /**
169     * Get file location for log file.
170     *
171     * @return  Log file path.
172     */
173    public final File getLogFile() {
174        return new File(getBasisDirectory(), getLogFileString());
175    }
176 
177    /**
178     * Get history of modules, which were tried to load.
179     *
180     * @return  list of modules.
181     */
182    public final String[] getModuleHistory() {
183        return configAccess.getStringProperties("moduleHistory.");
184    }
185 
186    /**
187     * Save history of modules, which were tried to load.
188     *
189     * @param  modules  list of modules.
190     */
191    public final void saveModuleHistory(final List modules) {
192        configAccess.removeProperties(("moduleHistory."));
193        for (int i = 0; i < modules.size(); i++) {
194            setKeyValue("moduleHistory." + (i + 101),
195            modules.get(i).toString());
196        }
197    }
198 
199    /**
200     * Get list of previously loaded modules.
201     *
202     * @return  list of modules.
203     */
204    public final String[] getPreviouslyLoadedModules() {
205        return configAccess.getStringProperties("loadedModule.");
206    }
207 
208    /**
209     * Set list of previously successfully loaded QEDEQ modules.
210     *
211     * @param   moduleAddresses     This modules were successfully loaded.
212     */
213    public final void setPreviouslyLoadedModules(final String[] moduleAddresses) {
214        configAccess.removeProperties("loadedModule.");
215        for (int i = 0; i < moduleAddresses.length; i++) {
216            setKeyValue("loadedModule." + (i + 1), moduleAddresses[i]);
217        }
218    }
219 
220    /**
221     * Get basis directory of this application.
222     *
223     * @return  Basis directory of application for all variable data. Basis for all relative paths.
224     */
225    public final File getBasisDirectory() {
226        return basisDirectory;
227    }
228 
229    /**
230     * Get file path starting from basis directory of this application.
231     *
232     * @param   path    Go to this path starting from basis directory.
233     * @return  File path resolved against basis application directory as an absolute path.
234     */
235    public final File createAbsolutePath(final String path) {
236        File result = new File(path);
237        final Path ptest = new Path(path.replace(File.separatorChar, '/'), "");
238        if (ptest.isAbsolute()) {
239            try {
240                return result.getCanonicalFile();
241            } catch (Exception e) {
242                // we don't know if we can log something already
243                e.printStackTrace(System.out);
244                System.out.println("we try to continue with file " + result);
245                return result;
246            }
247        }
248        result = new File(getBasisDirectory(), path);
249        try {
250            result = result.getCanonicalFile();
251        } catch (IOException e) {
252            // we don't know if we can log something already
253            e.printStackTrace(System.out);
254        }
255        return result;
256    }
257 
258    /**
259     * Create relative file path starting from basis directory of this application.
260     *
261     * @param   path    Reach this path starting from basis directory.
262     * @return  File path relative to basis application directory.
263     */
264    private final String createRelativePath(final File path) {
265        return IoUtility.createRelativePath(getBasisDirectory(), path);
266    }
267 
268    /**
269     * Get auto reload of last session successfully loaded modules.
270     *
271     * @return auto reload enabled?
272     */
273    public boolean isAutoReloadLastSessionChecked() {
274        return "true".equals(
275            getKeyValue("sessionAutoReload", "true"));
276    }
277 
278    /**
279     * Set auto reload checked modules of last session mode.
280     *
281     * @param  mode     enable auto reload?
282     */
283    public final void setAutoReloadLastSessionChecked(final boolean mode) {
284        setKeyValue("sessionAutoReload", (mode ? "true" : "false"));
285    }
286 
287    /**
288     * Is tracing on? If not, only business and fatal messages are logged.
289     * Otherwise all events are logged according to the log level settings.
290     *
291     * @return  Is tracing on?
292     */
293    public final boolean isTraceOn() {
294        return "true".equals(getKeyValue("traceOn", "false"));
295    }
296 
297    /**
298     * Set tracing on.
299     *
300     * @param  traceOn     Set trace on.
301     */
302    public final void setTraceOn(final boolean traceOn) {
303        setKeyValue("traceOn", (traceOn ? "true" : "false"));
304    }
305 
306    /**
307     * Get connection timeout, especially for TCP/IP connections.
308     *
309     * @return  Connection timeout (in milliseconds).
310     */
311    public int getConnectionTimeout() {
312        return getKeyValue("connectionTimeout", 2000);
313    }
314 
315    /**
316     * Set connection timeout, especially for TCP/IP connections.
317     *
318     * @param   timeout Connection timeout, especially for TCP/IP connections. In milliseconds.
319     */
320    public final void setConnectionTimeout(final int timeout) {
321        setKeyValue("connectionTimeout", timeout);
322    }
323 
324    /**
325     * Get read timeout, especially for TCP/IP connections.
326     *
327     * @return  Read timeout (in milliseconds).
328     */
329    public int getReadTimeout() {
330        return getKeyValue("readTimeout", 1000);
331    }
332 
333    /**
334     * Set read timeout, especially for TCP/IP connections.
335     *
336     * @param   timeout Read timeout, especially for TCP/IP connections. In milliseconds.
337     */
338    public final void setReadTimeout(final int timeout) {
339        setKeyValue("readTimeout", timeout);
340    }
341 
342    /**
343     * Set http proxy host.
344     *
345     * @param  httpProxyHost    Http proxy server.
346     */
347    public final void setHttpProxyHost(final String httpProxyHost) {
348        setKeyValue("http.proxyHost", httpProxyHost);
349    }
350 
351    /**
352     * Get http proxy host. It might be a good idea to ignore this value, if the application
353     * was started via Java Webstart. If none is defined we take the value of the system property
354     * "http.proxyHost".
355 
356     *
357     * @return  Http proxy host. Might be <code>null</code>.
358     */
359    public final String getHttpProxyHost() {
360        final String def = System.getProperty("http.proxyHost");
361        if (def != null) {
362            return getKeyValue("http.proxyHost", def);
363        }
364        return getKeyValue("http.proxyHost");
365    }
366 
367    /**
368     * Set http proxy port.
369     *
370     * @param  httpProxyPort    Http proxy port.
371     */
372    public final void setHttpProxyPort(final String httpProxyPort) {
373        setKeyValue("http.proxyPort", httpProxyPort);
374    }
375 
376    /**
377     * Get http proxy port. It might be a good idea to ignore this value, if the application
378     * was started via Java Webstart. If none is defined we take the value of the system property
379     * "http.proxyPort".
380     *
381     * @return  Http proxy port.  Might be <code>null</code>.
382     */
383    public final String getHttpProxyPort() {
384        final String def = System.getProperty("http.proxyPort");
385        if (def != null) {
386            return getKeyValue("http.proxyPort", def);
387        }
388        return getKeyValue("http.proxyPort");
389    }
390 
391    /**
392     * Set http non proxy hosts.
393     *
394     * @param  httpNonProxyHosts    Http non proxy hosts.  Might be <code>null</code>.
395     */
396    public final void setHttpNonProxyHosts(final String httpNonProxyHosts) {
397        setKeyValue("http.nonProxyHosts", httpNonProxyHosts);
398    }
399 
400    /**
401     * Get non http proxy hosts. It might be a good idea to ignore this value, if the application
402     * was started via Java Webstart. If none is defined we take the value of the system property
403     * "http.nonProxyHosts".
404     *
405     * @return  Http non proxy hosts.  Might be <code>null</code>.
406     */
407    public final String getHttpNonProxyHosts() {
408        final String def = System.getProperty("http.nonProxyHosts");
409        if (def != null) {
410            return getKeyValue("http.nonProxyHosts", def);
411        }
412        return getKeyValue("http.nonProxyHosts");
413    }
414 
415    /**
416     * Get value for given key.
417     *
418     * @param   key     Get value for this key.
419     * @return  Value, maybe <code>null</code>.
420     */
421    protected synchronized String getKeyValue(final String key) {
422        return configAccess.getString(key);
423    }
424 
425    /**
426     * Get value for given key.
427     *
428     * @param   key             Get value for this key.
429     * @param   defaultValue    Default value..
430     * @return  Value. If value for key is originally <code>null</code> <code>defaultValue</code>
431     *          is returned..
432     */
433    protected synchronized String getKeyValue(final String key, final String defaultValue) {
434        return configAccess.getString(key, defaultValue);
435    }
436 
437    /**
438     * Set value for given key.
439     *
440     * @param   key     For this key.
441     * @param   value   Set this value.
442     */
443    protected synchronized void setKeyValue(final String key, final String value) {
444        configAccess.setString(key, value);
445    }
446 
447    /**
448     * Get value for given key.
449     *
450     * @param   key             Get value for this key.
451     * @param   defaultValue    Default value..
452     * @return  Value. If value for key is originally <code>null</code> <code>defaultValue</code>
453     *          is returned..
454     */
455    protected synchronized int getKeyValue(final String key, final int defaultValue) {
456        return configAccess.getInteger(key, defaultValue);
457    }
458 
459    /**
460     * Set value for given key.
461     *
462     * @param   key     For this key.
463     * @param   value   Set this value.
464     */
465    protected synchronized void setKeyValue(final String key, final int value) {
466        configAccess.setInteger(key, value);
467    }
468 
469    /**
470     * Get value for given key.
471     *
472     * @param   key             Get value for this key.
473     * @param   defaultValue    Default value..
474     * @return  Value. If value for key is originally <code>null</code> <code>defaultValue</code>
475     *          is returned.
476     */
477    protected synchronized boolean getKeyValue(final String key, final boolean defaultValue) {
478        return "true".equals(getKeyValue(key, (defaultValue ? "true" : "false")));
479    }
480 
481    /**
482     * Set value for given key.
483     *
484     * @param   key     For this key.
485     * @param   value   Set this value.
486     */
487    protected void setKeyValue(final String key, final boolean value) {
488        setKeyValue(key, (value ? "true" : "false"));
489    }
490 
491    /**
492     * Get service properties from configuration file.
493     *
494     * @param   service  We want to know properties for this service
495     * @return  Map with properties for this service.
496     */
497    public Parameters getServiceEntries(final Service service) {
498        return new Parameters(configAccess.getProperties(service.getServiceId() + "$"));
499    }
500 
501    /**
502     * Get value for given service key.
503     *
504     * @param   service  Setting for this service.
505     * @param   key             Get value for this key.
506     * @param   defaultValue    Default value..
507     * @return  Value. If value for key is originally <code>null</code> <code>defaultValue</code>
508     *          is returned.
509     */
510    public String getServiceKeyValue(final Service service, final String key, final String defaultValue) {
511        return getKeyValue(service.getServiceId() + "$" + key, defaultValue);
512    }
513 
514    /**
515     * Set value for given service key.
516     *
517     * @param   service  Setting for this service.
518     * @param   key     For this key.
519     * @param   value   Set this value.
520     */
521    public void setServiceKeyValue(final Service service, final String key, final String value) {
522        setKeyValue(service.getServiceId() + "$" + key, value);
523    }
524 
525    /**
526     * Set value for given service key.
527     *
528     * @param   service     Setting for this service.
529     * @param   parameters  Parameters for this service.
530     */
531    public void setServiceKeyValues(final Service service, final Parameters parameters) {
532        final Iterator it = parameters.keySet().iterator();
533        while (it.hasNext()) {
534            final String key = (String) it.next();
535            setKeyValue(service.getServiceId() + "$" + key, parameters.getString(key));
536        }
537    }
538 
539    /**
540     * Get value for given service key.
541     *
542     * @param   service         Setting for this service.
543     * @param   key             Get value for this key.
544     * @param   defaultValue    Default value..
545     * @return  Value. If value for key is originally <code>null</code> <code>defaultValue</code>
546     *          is returned.
547     */
548    public int getServiceKeyValue(final Service service, final String key, final int defaultValue) {
549        return getKeyValue(service.getServiceId() + "$" + key, defaultValue);
550    }
551 
552    /**
553     * Set value for given service key.
554     *
555     * @param   service  Setting for this service.
556     * @param   key     For this key.
557     * @param   value   Set this value.
558     */
559    public void setServiceKeyValue(final Service service, final String key, final int value) {
560        setKeyValue(service.getServiceId() + "$" + key, value);
561    }
562 
563    /**
564     * Get value for given service key.
565     *
566     * @param   service         Setting for this service.
567     * @param   key             Get value for this key.
568     * @param   defaultValue    Default value..
569     * @return  Value. If value for key is originally <code>null</code> <code>defaultValue</code>
570     *          is returned.
571     */
572    public boolean getServiceKeyValue(final Service service, final String key, final boolean defaultValue) {
573        return getKeyValue(service.getServiceId() + "$" + key, defaultValue);
574    }
575 
576    /**
577     * Set value for given service key.
578     *
579     * @param   service  Setting for this service.
580     * @param   key     For this key.
581     * @param   value   Set this value.
582     */
583    public void setServiceKeyValue(final Service service, final String key, final boolean value) {
584        setKeyValue(service.getServiceId() + "$" + key, value);
585    }
586 
587}

[all classes][org.qedeq.kernel.se.config]
EMMA 2.1.5320 (stable) (C) Vladimir Roubtsov