Clover coverage report - QedeqKernelSe Coverage Report
Coverage timestamp: Sa Dez 22 2007 01:35:21 CET
file stats: LOC: 189   Methods: 5
NCLOC: 87   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
LoadRequiredModules.java 100% 82,4% 100% 85,4%
coverage coverage
 1    /* $Id: LoadRequiredModules.java,v 1.1 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.control;
 19   
 20    import java.net.URL;
 21   
 22    import org.qedeq.kernel.base.module.Import;
 23    import org.qedeq.kernel.base.module.ImportList;
 24    import org.qedeq.kernel.bo.module.DependencyState;
 25    import org.qedeq.kernel.bo.module.ModuleDataException;
 26    import org.qedeq.kernel.bo.module.ModuleProperties;
 27    import org.qedeq.kernel.bo.module.ModuleReferenceList;
 28    import org.qedeq.kernel.bo.module.QedeqBo;
 29    import org.qedeq.kernel.bo.visitor.AbstractModuleVisitor;
 30    import org.qedeq.kernel.bo.visitor.QedeqNotNullTransverser;
 31    import org.qedeq.kernel.common.SourceFileExceptionList;
 32    import org.qedeq.kernel.context.KernelContext;
 33    import org.qedeq.kernel.log.ModuleEventLog;
 34    import org.qedeq.kernel.trace.Trace;
 35    import org.qedeq.kernel.xml.mapper.ModuleDataException2XmlFileException;
 36    import org.qedeq.kernel.xml.parser.DefaultSourceFileExceptionList;
 37   
 38   
 39    /**
 40    * Load all required QEDEQ modules.
 41    *
 42    * @version $Revision: 1.1 $
 43    * @author Michael Meyling
 44    */
 45    public final class LoadRequiredModules extends AbstractModuleVisitor {
 46   
 47    /** Transverse QEDEQ module with this transverser. */
 48    private final QedeqNotNullTransverser transverser;
 49   
 50    /** QEDEQ BO object to work on. */
 51    private final QedeqBo qedeq;
 52   
 53    /** List of required QEDEQ modules. */
 54    private final ModuleReferenceList required;
 55   
 56    /**
 57    * Constructor.
 58    *
 59    * @param qedeq QEDEQ BO object.
 60    */
 61  2411 private LoadRequiredModules(final QedeqBo qedeq) {
 62  2411 this.qedeq = qedeq;
 63  2411 this.transverser = new QedeqNotNullTransverser(qedeq.getModuleAddress().getURL(), this);
 64  2411 required = new ModuleReferenceList();
 65    }
 66   
 67    /**
 68    * Load all required QEDEQ modules for a given QEDEQ module.
 69    *
 70    * @param qedeqBo Basic QEDEQ module object.
 71    * @throws ModuleDataException Major problem occurred.
 72    */
 73    /*
 74    public static void loadRequired(final QedeqBo qedeqBo)
 75    throws ModuleDataException {
 76    final String method = "loadRequired(QedeqBo)";
 77    final ModuleProperties prop = KernelContext.getInstance().getModuleProperties(
 78    qedeqBo.getModuleAddress().getAddress()); // TODO mime 20071026: this is no good code!
 79    prop.setDependencyProgressState(DependencyState.STATE_LOADING_REQUIRED_MODULES);
 80    final LoadRequiredModules converter = new LoadRequiredModules(qedeqBo);
 81    try {
 82    converter.loadRequired();
 83    prop.setLoadedRequiredModules(converter.required);
 84    } catch (ModuleDataException e) {
 85    prop.setDependencyFailureState(DependencyState.STATE_LOADING_REQUIRED_MODULES_FAILED,
 86    ModuleDataException2XmlFileException.createXmlFileExceptionList(e,
 87    qedeqBo.getQedeq()));
 88    throw e;
 89    } catch (final RuntimeException e) { // last catch
 90    Trace.fatal(LoadRequiredModules.class, method, "programming error", e);
 91    ModuleDataException me = new LoadRequiredModuleException(10, e.toString(),
 92    converter.transverser.getCurrentContext());
 93    final XmlFileExceptionList xl =
 94    new DefaultXmlFileExceptionList(e);
 95    prop.setDependencyFailureState(
 96    DependencyState.STATE_LOADING_REQUIRED_MODULES_FAILED, xl);
 97    ModuleEventLog.getInstance().stateChanged(prop);
 98    throw me;
 99    } catch (final Throwable e) { // last catch
 100    ModuleDataException me = new LoadRequiredModuleException(10, e.toString(),
 101    converter.transverser.getCurrentContext());
 102    final XmlFileExceptionList xl =
 103    new DefaultXmlFileExceptionList(e);
 104    prop.setDependencyFailureState(
 105    DependencyState.STATE_LOADING_REQUIRED_MODULES_FAILED, xl);
 106    ModuleEventLog.getInstance().stateChanged(prop);
 107    throw me;
 108    }
 109    }
 110    */
 111    /**
 112    * Load all required QEDEQ modules for a given QEDEQ module.
 113    *
 114    * @param qedeqUrl Basic QEDEQ module object.
 115    * @throws ModuleDataException Major problem occurred.
 116    * @throws SourceFileExceptionList
 117    */
 118  2569 public static void loadRequired(final URL qedeqUrl)
 119    throws ModuleDataException, SourceFileExceptionList {
 120  2569 final String method = "loadRequired(QedeqBo)";
 121  2569 final ModuleProperties prop = KernelContext.getInstance().getModuleProperties(
 122    qedeqUrl); // TODO mime 20071026: this is no good code!
 123   
 124    // did we check this already?
 125  2567 if (prop.getDependencyState().areAllRequiredLoaded()) {
 126  156 return;
 127    }
 128  2411 final QedeqBo bo = KernelContext.getInstance().loadModule(qedeqUrl);
 129  2411 prop.setDependencyProgressState(DependencyState.STATE_LOADING_REQUIRED_MODULES);
 130  2411 final LoadRequiredModules converter = new LoadRequiredModules(bo);
 131  2411 try {
 132  2411 converter.loadRequired();
 133  41 prop.setLoadedRequiredModules(converter.required);
 134    } catch (ModuleDataException e) {
 135  2345 prop.setDependencyFailureState(DependencyState.STATE_LOADING_REQUIRED_MODULES_FAILED,
 136    ModuleDataException2XmlFileException.createXmlFileExceptionList(e,
 137    bo.getQedeq()));
 138  2335 throw e;
 139    } catch (final RuntimeException e) { // last catch
 140  0 Trace.fatal(LoadRequiredModules.class, method, "programming error", e);
 141  0 ModuleDataException me = new LoadRequiredModuleException(10, e.toString(),
 142    converter.transverser.getCurrentContext());
 143  0 final SourceFileExceptionList xl =
 144    new DefaultSourceFileExceptionList(e);
 145  0 prop.setDependencyFailureState(
 146    DependencyState.STATE_LOADING_REQUIRED_MODULES_FAILED, xl);
 147  0 ModuleEventLog.getInstance().stateChanged(prop);
 148  0 throw me;
 149    } catch (final Throwable e) { // last catch
 150  24 ModuleDataException me = new LoadRequiredModuleException(10, e.toString(),
 151    converter.transverser.getCurrentContext());
 152  14 final SourceFileExceptionList xl =
 153    new DefaultSourceFileExceptionList(e);
 154  14 prop.setDependencyFailureState(
 155    DependencyState.STATE_LOADING_REQUIRED_MODULES_FAILED, xl);
 156  14 ModuleEventLog.getInstance().stateChanged(prop);
 157  14 throw me;
 158    }
 159    }
 160   
 161    /**
 162    * Load all required QEDEQ modules for a given QEDEQ module.
 163    *
 164    * @throws ModuleDataException Exception during transversion.
 165    */
 166  2411 private final void loadRequired() throws ModuleDataException {
 167  2411 transverser.accept(qedeq.getQedeq());
 168    }
 169   
 170  2543 public void visitEnter(final Import imp) throws ModuleDataException {
 171  2543 try {
 172  2543 final QedeqBo other = KernelContext.getInstance().loadModule(qedeq,
 173    imp.getSpecification());
 174  2541 required.add(transverser.getCurrentContext(), imp.getLabel(),
 175    other.getModuleAddress().getURL());
 176  2541 loadRequired(other.getModuleAddress().getURL());
 177    } catch (SourceFileExceptionList e) {
 178  1 Trace.trace(this, "visitEnter(Import)", e);
 179  1 throw new LoadRequiredModuleException(e.get(0).getErrorCode(),
 180    "import of module labeled \"" + imp.getLabel() + "\" failed: "
 181    + e.get(0).getMessage(), transverser.getCurrentContext());
 182    }
 183    }
 184   
 185  27 public void visitLeave(final ImportList imports) {
 186  27 transverser.setBlocked(true);
 187    }
 188   
 189    }