Clover coverage report - QedeqKernelSe Coverage Report
Coverage timestamp: So Sep 2 2007 02:40:58 CEST
file stats: LOC: 176   Methods: 6
NCLOC: 108   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
Modules.java 58,3% 40,7% 50% 44,4%
coverage coverage
 1    /* $Id: Modules.java,v 1.3 2007/05/10 00:37:51 m31 Exp $
 2    *
 3    * This file is part of the project "Hilbert II" - http://www.qedeq.org
 4    *
 5    * Copyright 2000-2007, Michael Meyling <mime@qedeq.org>.
 6    *
 7    * "Hilbert II" is free software; you can redistribute
 8    * it and/or modify it under the terms of the GNU General Public
 9    * License as published by the Free Software Foundation; either
 10    * version 2 of the License, or (at your option) any later version.
 11    *
 12    * This program is distributed in the hope that it will be useful,
 13    * but WITHOUT ANY WARRANTY; without even the implied warranty of
 14    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 15    * GNU General Public License for more details.
 16    */
 17   
 18    package org.qedeq.kernel.bo.load;
 19   
 20    import java.io.IOException;
 21    import java.util.ArrayList;
 22    import java.util.HashMap;
 23    import java.util.Iterator;
 24    import java.util.List;
 25    import java.util.Map;
 26   
 27    import org.qedeq.kernel.bo.module.LoadingState;
 28    import org.qedeq.kernel.bo.module.ModuleAddress;
 29    import org.qedeq.kernel.bo.module.ModuleProperties;
 30    import org.qedeq.kernel.log.ModuleEventLog;
 31    import org.qedeq.kernel.trace.Trace;
 32   
 33    /**
 34    * Encapsulates all modules.
 35    */
 36    class Modules {
 37   
 38   
 39    /** properties of modules; key: ModuleAddress, value: ModuleProperties.*/
 40    private final Map moduleProperties = new HashMap();
 41   
 42   
 43    /**
 44    * Get module properties for an URL. If it is unkown it will be created.
 45    *
 46    * @param url location of module
 47    * @return module properties
 48    * @throws IOException url is mailformed
 49    */
 50  13 final ModuleProperties getModuleProperties(final String url) throws IOException {
 51  13 synchronized (moduleProperties) {
 52  13 final ModuleAddress address = new DefaultModuleAddress(url);
 53  13 if (moduleProperties.containsKey(address)) {
 54  13 return (ModuleProperties) moduleProperties.get(address);
 55    } else {
 56  0 final ModuleProperties prop = new DefaultModuleProperties(address);
 57  0 moduleProperties.put(address, prop);
 58  0 return prop;
 59    }
 60    }
 61    }
 62   
 63   
 64    /**
 65    * Get module properties for an module address. If it is unkown it will be created.
 66    *
 67    * @param address module address
 68    * @return module properties
 69    */
 70  91 final ModuleProperties getModuleProperties(final ModuleAddress address) {
 71  91 synchronized (moduleProperties) {
 72  91 if (moduleProperties.containsKey(address)) {
 73  58 return (ModuleProperties) moduleProperties.get(address);
 74    } else {
 75  33 final ModuleProperties prop = new DefaultModuleProperties(address);
 76  33 moduleProperties.put(address, prop);
 77  33 return prop;
 78    }
 79    }
 80    }
 81   
 82   
 83    /**
 84    * Remove all modules from memory.
 85    */
 86  0 final void removeAllModules() {
 87  0 final String method = "removeAllModules";
 88  0 Trace.begin(this, method);
 89  0 try {
 90  0 synchronized (moduleProperties) {
 91  0 for (final Iterator iterator
 92    = moduleProperties.entrySet().iterator();
 93  0 iterator.hasNext(); ) {
 94  0 Map.Entry entry = (Map.Entry) iterator.next();
 95  0 final ModuleProperties prop = (ModuleProperties) entry.getValue();
 96  0 Trace.trace(this, method, "remove " + prop);
 97  0 ModuleEventLog.getInstance().removeModule(prop);
 98    }
 99  0 moduleProperties.clear();
 100    }
 101    } catch (RuntimeException e) {
 102  0 Trace.trace(this, method, e);
 103    } finally {
 104  0 Trace.end(this, method);
 105    }
 106    }
 107   
 108   
 109    /**
 110    * Remove a QEDEQ module from memory.
 111    *
 112    * @param prop Defines the module.
 113    */
 114  0 final void removeModuleAndDependents(final ModuleProperties prop) {
 115  0 final String method = "removeModuleAndDependents";
 116  0 Trace.begin(this, method);
 117  0 try {
 118  0 synchronized (moduleProperties) {
 119  0 Trace.trace(this, method, "remove module and dependents of "
 120    + prop.getAddress());
 121  0 if (!prop.isLoaded()) {
 122  0 Trace.trace(this, method, "removing " + prop.getAddress());
 123  0 ModuleEventLog.getInstance().removeModule(prop);
 124  0 moduleProperties.remove(prop.getModuleAddress());
 125    } else {
 126  0 Trace.trace(this, method, "module number=" + moduleProperties.size());
 127  0 Trace.trace(this, method, "removing module itself: " + prop.getAddress());
 128  0 ModuleEventLog.getInstance().removeModule(prop);
 129  0 moduleProperties.remove(prop.getModuleAddress());
 130  0 Trace.trace(this, method, "module number=" + moduleProperties.size());
 131    }
 132    }
 133    } catch (RuntimeException e) {
 134  0 Trace.trace(this, method, e);
 135    } finally {
 136  0 Trace.end(this, method);
 137    }
 138    }
 139   
 140    /**
 141    * Get list of all successfully loaded modules.
 142    *
 143    * @return list of all successfully loaded modules.
 144    */
 145  2 final String[] getAllLoadedModules() {
 146  2 final String method = "getAllModules";
 147  2 Trace.begin(this, method);
 148  2 try {
 149  2 final List list = new ArrayList();
 150  2 synchronized (moduleProperties) {
 151  2 for (final Iterator iterator
 152    = moduleProperties.entrySet().iterator();
 153  35 iterator.hasNext(); ) {
 154  33 Map.Entry entry = (Map.Entry) iterator.next();
 155  33 final ModuleProperties prop = (ModuleProperties) entry.getValue();
 156  33 if (prop.getLoadingState() == LoadingState.STATE_LOADED) {
 157  23 list.add(prop.getAddress());
 158    }
 159    }
 160    }
 161  2 return (String[]) list.toArray(new String[] {});
 162    } finally {
 163  2 Trace.end(this, method);
 164    }
 165    }
 166   
 167    /**
 168    * Get number of QEDEQ modules in STATE_LOADED.
 169    *
 170    * @return Number of loaded modules.
 171    */
 172  0 final int getNumberOfLoadedModules() {
 173  0 return getAllLoadedModules().length;
 174    }
 175   
 176    }