Clover coverage report - QedeqKernelSe Coverage Report
Coverage timestamp: Sa Dez 22 2007 01:35:21 CET
file stats: LOC: 177   Methods: 6
NCLOC: 109   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
Modules.java 91,7% 88,9% 83,3% 88,9%
coverage coverage
 1    /* $Id: Modules.java,v 1.4 2007/12/21 23:33:46 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.net.URL;
 22    import java.util.ArrayList;
 23    import java.util.HashMap;
 24    import java.util.Iterator;
 25    import java.util.List;
 26    import java.util.Map;
 27   
 28    import org.qedeq.kernel.bo.module.LoadingState;
 29    import org.qedeq.kernel.bo.module.ModuleAddress;
 30    import org.qedeq.kernel.bo.module.ModuleProperties;
 31    import org.qedeq.kernel.log.ModuleEventLog;
 32    import org.qedeq.kernel.trace.Trace;
 33   
 34    /**
 35    * Encapsulates all modules.
 36    */
 37    class Modules {
 38   
 39   
 40    /** properties of modules; key: ModuleAddress, value: ModuleProperties.*/
 41    private final Map moduleProperties = new HashMap();
 42   
 43   
 44    /**
 45    * Get module properties for an URL. If it is unkown it will be created.
 46    *
 47    * @param url location of module
 48    * @return module properties
 49    * @throws IOException url is mailformed
 50    */
 51  2596 final ModuleProperties getModuleProperties(final URL url) throws IOException {
 52  2596 synchronized (moduleProperties) {
 53  2596 final ModuleAddress address = new DefaultModuleAddress(url);
 54  2594 if (moduleProperties.containsKey(address)) {
 55  2594 return (ModuleProperties) moduleProperties.get(address);
 56    } else {
 57  0 final ModuleProperties prop = new DefaultModuleProperties(address);
 58  0 moduleProperties.put(address, prop);
 59  0 return prop;
 60    }
 61    }
 62    }
 63   
 64   
 65    /**
 66    * Get module properties for an module address. If it is unkown it will be created.
 67    *
 68    * @param address module address
 69    * @return module properties
 70    */
 71  5918 final ModuleProperties getModuleProperties(final ModuleAddress address) {
 72  5918 synchronized (moduleProperties) {
 73  5919 if (moduleProperties.containsKey(address)) {
 74  5459 return (ModuleProperties) moduleProperties.get(address);
 75    } else {
 76  460 final ModuleProperties prop = new DefaultModuleProperties(address);
 77  460 moduleProperties.put(address, prop);
 78  460 return prop;
 79    }
 80    }
 81    }
 82   
 83   
 84    /**
 85    * Remove all modules from memory.
 86    */
 87  4 final void removeAllModules() {
 88  4 final String method = "removeAllModules";
 89  4 Trace.begin(this, method);
 90  4 try {
 91  4 synchronized (moduleProperties) {
 92  4 for (final Iterator iterator
 93    = moduleProperties.entrySet().iterator();
 94  42 iterator.hasNext(); ) {
 95  38 Map.Entry entry = (Map.Entry) iterator.next();
 96  38 final ModuleProperties prop = (ModuleProperties) entry.getValue();
 97  38 Trace.trace(this, method, "remove " + prop);
 98  38 ModuleEventLog.getInstance().removeModule(prop);
 99    }
 100  4 moduleProperties.clear();
 101    }
 102    } catch (RuntimeException e) {
 103  0 Trace.trace(this, method, e);
 104    } finally {
 105  4 Trace.end(this, method);
 106    }
 107    }
 108   
 109   
 110    /**
 111    * Remove a QEDEQ module from memory.
 112    *
 113    * @param prop Defines the module.
 114    */
 115  3 final void removeModule(final ModuleProperties prop) {
 116  3 final String method = "removeModule";
 117  3 Trace.begin(this, method);
 118  3 try {
 119  3 synchronized (moduleProperties) {
 120  3 Trace.trace(this, method, "remove module "
 121    + prop.getAddress());
 122  3 if (!prop.isLoaded()) {
 123  1 Trace.trace(this, method, "removing " + prop.getAddress());
 124  1 ModuleEventLog.getInstance().removeModule(prop);
 125  1 moduleProperties.remove(prop.getModuleAddress());
 126    } else {
 127  2 Trace.trace(this, method, "module number=" + moduleProperties.size());
 128  2 Trace.trace(this, method, "removing module itself: " + prop.getAddress());
 129  2 ModuleEventLog.getInstance().removeModule(prop);
 130  2 moduleProperties.remove(prop.getModuleAddress());
 131  2 Trace.trace(this, method, "module number=" + moduleProperties.size());
 132    }
 133    }
 134    } catch (RuntimeException e) {
 135  0 Trace.trace(this, method, e);
 136    } finally {
 137  3 Trace.end(this, method);
 138    }
 139    }
 140   
 141    /**
 142    * Get list of all successfully loaded modules.
 143    *
 144    * @return list of all successfully loaded modules.
 145    */
 146  28 final URL[] getAllLoadedModules() {
 147  28 final String method = "getAllModules";
 148  28 Trace.begin(this, method);
 149  28 try {
 150  28 final List list = new ArrayList();
 151  28 synchronized (moduleProperties) {
 152  28 for (final Iterator iterator
 153    = moduleProperties.entrySet().iterator();
 154  389 iterator.hasNext(); ) {
 155  361 Map.Entry entry = (Map.Entry) iterator.next();
 156  361 final ModuleProperties prop = (ModuleProperties) entry.getValue();
 157  361 if (prop.getLoadingState().getCode() >= LoadingState.STATE_LOADED.getCode()) {
 158  342 list.add(prop.getUrl());
 159    }
 160    }
 161    }
 162  28 return (URL[]) list.toArray(new URL[] {});
 163    } finally {
 164  28 Trace.end(this, method);
 165    }
 166    }
 167   
 168    /**
 169    * Get number of QEDEQ modules in STATE_LOADED.
 170    *
 171    * @return Number of loaded modules.
 172    */
 173  0 final int getNumberOfLoadedModules() {
 174  0 return getAllLoadedModules().length;
 175    }
 176   
 177    }