Changeset 5926 for branches/cleanup


Ignore:
Timestamp:
02/17/10 10:39:42 (10 years ago)
Author:
callan
Message:

#464 Addition of AbstractService and some more aggressive dependency checks

  • Test cases for the absence of POI, OME-XML, MDB and NetCDF services
Location:
branches/cleanup/components
Files:
8 added
9 edited

Legend:

Unmodified
Added
Removed
  • branches/cleanup/components/bio-formats/build.properties

    r5921 r5926  
    77# Type "ant -p" for a list of targets. 
    88 
    9 component.name           = bio-formats 
    10 component.jar            = bio-formats.jar 
    11 component.version        = 4.1.0 
     9component.name               = bio-formats 
     10component.jar                = bio-formats.jar 
     11component.version            = 4.1.0 
    1212 
    13 component.classpath      = ${artifact.dir}/jai_imageio.jar:\ 
    14                            ${artifact.dir}/loci-common.jar:\ 
    15                            ${artifact.dir}/mdbtools-java.jar:\ 
    16                            ${artifact.dir}/ome-xml.jar:\ 
    17                            ${artifact.dir}/poi-loci.jar:\ 
    18                            ${lib.dir}/forms-1.3.0.jar:\ 
    19                            ${lib.dir}/log4j-1.2.15.jar:\ 
    20                            ${lib.dir}/netcdf-4.0.jar:\ 
    21                            ${lib.dir}/slf4j-api-1.5.10.jar:\ 
    22                            ${lib.dir}/slf4j-log4j12-1.5.10.jar:\ 
    23                            ${lib.dir}/testng-5.11-jdk15.jar 
    24 component.java-version   = 1.5 
    25 component.deprecation    = true 
     13component.classpath          = ${artifact.dir}/jai_imageio.jar:\ 
     14                               ${artifact.dir}/loci-common.jar:\ 
     15                               ${artifact.dir}/mdbtools-java.jar:\ 
     16                               ${artifact.dir}/ome-xml.jar:\ 
     17                               ${artifact.dir}/poi-loci.jar:\ 
     18                               ${lib.dir}/forms-1.3.0.jar:\ 
     19                               ${lib.dir}/log4j-1.2.15.jar:\ 
     20                               ${lib.dir}/netcdf-4.0.jar:\ 
     21                               ${lib.dir}/slf4j-api-1.5.10.jar:\ 
     22                               ${lib.dir}/slf4j-log4j12-1.5.10.jar:\ 
     23                               ${lib.dir}/testng-5.11-jdk15.jar 
     24# Used by TestNG suite that tests the absence of classes from ome-xml.jar 
     25component.classpath.noxml    = ${artifact.dir}/jai_imageio.jar:\ 
     26                               ${artifact.dir}/loci-common.jar:\ 
     27                               ${artifact.dir}/mdbtools-java.jar:\ 
     28                               ${artifact.dir}/poi-loci.jar:\ 
     29                               ${lib.dir}/forms-1.3.0.jar:\ 
     30                               ${lib.dir}/log4j-1.2.15.jar:\ 
     31                               ${lib.dir}/netcdf-4.0.jar:\ 
     32                               ${lib.dir}/slf4j-api-1.5.10.jar:\ 
     33                               ${lib.dir}/slf4j-log4j12-1.5.10.jar:\ 
     34                               ${lib.dir}/testng-5.11-jdk15.jar 
     35# Used by TestNG suite that tests the absence of classes from mdbtools-java.jar 
     36component.classpath.nomdb    = ${artifact.dir}/jai_imageio.jar:\ 
     37                               ${artifact.dir}/loci-common.jar:\ 
     38                               ${artifact.dir}/ome-xml.jar:\ 
     39                               ${artifact.dir}/poi-loci.jar:\ 
     40                               ${lib.dir}/forms-1.3.0.jar:\ 
     41                               ${lib.dir}/log4j-1.2.15.jar:\ 
     42                               ${lib.dir}/netcdf-4.0.jar:\ 
     43                               ${lib.dir}/slf4j-api-1.5.10.jar:\ 
     44                               ${lib.dir}/slf4j-log4j12-1.5.10.jar:\ 
     45                               ${lib.dir}/testng-5.11-jdk15.jar 
     46# Used by TestNG suite that tests the absence of class from poi-loci.jar 
     47component.classpath.nopoi    = ${artifact.dir}/jai_imageio.jar:\ 
     48                               ${artifact.dir}/loci-common.jar:\ 
     49                               ${artifact.dir}/mdbtools-java.jar:\ 
     50                               ${artifact.dir}/ome-xml.jar:\ 
     51                               ${lib.dir}/forms-1.3.0.jar:\ 
     52                               ${lib.dir}/log4j-1.2.15.jar:\ 
     53                               ${lib.dir}/netcdf-4.0.jar:\ 
     54                               ${lib.dir}/slf4j-api-1.5.10.jar:\ 
     55                               ${lib.dir}/slf4j-log4j12-1.5.10.jar:\ 
     56                               ${lib.dir}/testng-5.11-jdk15.jar 
     57# Used by TestNG suite that tests the absence of class from netcdf-4.0.jar 
     58component.classpath.nonetcdf = ${artifact.dir}/jai_imageio.jar:\ 
     59                               ${artifact.dir}/loci-common.jar:\ 
     60                               ${artifact.dir}/mdbtools-java.jar:\ 
     61                               ${artifact.dir}/ome-xml.jar:\ 
     62                               ${artifact.dir}/poi-loci.jar:\ 
     63                               ${lib.dir}/forms-1.3.0.jar:\ 
     64                               ${lib.dir}/log4j-1.2.15.jar:\ 
     65                               ${lib.dir}/slf4j-api-1.5.10.jar:\ 
     66                               ${lib.dir}/slf4j-log4j12-1.5.10.jar:\ 
     67                               ${lib.dir}/testng-5.11-jdk15.jar 
     68component.java-version       = 1.5 
     69component.deprecation        = true 
    2670 
    27 component.resources-bin  = loci/formats/bio-formats-logo.png \ 
    28                            loci/formats/meta/reorder-2008-09.xsl 
    29 component.resources-text = loci/formats/*.txt 
     71component.resources-bin      = loci/formats/bio-formats-logo.png \ 
     72                               loci/formats/meta/reorder-2008-09.xsl 
     73component.resources-text     = loci/formats/*.txt 
    3074 
    31 component.main-class     = loci.formats.gui.ImageViewer 
    32 component.runtime-cp     = ${component.classpath}:\ 
    33                            ${artifact.dir}/ome-io.jar:\ 
    34                            ${artifact.dir}/ome-notes.jar 
     75component.main-class         = loci.formats.gui.ImageViewer 
     76component.runtime-cp         = ${component.classpath}:\ 
     77                               ${artifact.dir}/ome-io.jar:\ 
     78                               ${artifact.dir}/ome-notes.jar 
  • branches/cleanup/components/bio-formats/build.xml

    r5551 r5926  
    1212  <import file="${root.dir}/components/java.xml"/> 
    1313  <property file="build.properties"/> 
     14 
     15  <target name="test-no-mdb" depends="compile-tests" 
     16    description="run missing MDB tools JAR tests" if="doTests"> 
     17    <copy tofile="${build.dir}/testng.xml" overwrite="true" 
     18      file="${tests.dir}/loci/formats/utests/testng-no-mdb.xml"/> 
     19    <testng classpath= 
     20      "${test-classes.dir}:${classes.dir}:${component.classpath.nomdb}"> 
     21      <xmlfileset file="${build.dir}/testng.xml"/> 
     22      <jvmarg value="-mx${testng.memory}"/> 
     23    </testng> 
     24  </target> 
     25 
     26  <target name="test-no-netcdf" depends="compile-tests" 
     27    description="run missing NetCDF JAR tests" if="doTests"> 
     28    <copy tofile="${build.dir}/testng.xml" overwrite="true" 
     29      file="${tests.dir}/loci/formats/utests/testng-no-netcdf.xml"/> 
     30    <testng classpath= 
     31      "${test-classes.dir}:${classes.dir}:${component.classpath.nonetcdf}"> 
     32      <xmlfileset file="${build.dir}/testng.xml"/> 
     33      <jvmarg value="-mx${testng.memory}"/> 
     34    </testng> 
     35  </target> 
     36 
     37  <target name="test-no-ome-xml" depends="compile-tests" 
     38    description="run missing OME-XML JAR tests" if="doTests"> 
     39    <copy tofile="${build.dir}/testng.xml" overwrite="true" 
     40      file="${tests.dir}/loci/formats/utests/testng-no-ome-xml.xml"/> 
     41    <testng classpath= 
     42    "${test-classes.dir}:${classes.dir}:${component.classpath.noxml}"> 
     43      <xmlfileset file="${build.dir}/testng.xml"/> 
     44      <jvmarg value="-mx${testng.memory}"/> 
     45    </testng> 
     46  </target> 
     47 
     48  <target name="test-no-poi" depends="compile-tests" 
     49    description="run missing POI JAR tests" if="doTests"> 
     50    <copy tofile="${build.dir}/testng.xml" overwrite="true" 
     51      file="${tests.dir}/loci/formats/utests/testng-no-poi.xml"/> 
     52    <testng classpath= 
     53      "${test-classes.dir}:${classes.dir}:${component.classpath.nopoi}"> 
     54      <xmlfileset file="${build.dir}/testng.xml"/> 
     55      <jvmarg value="-mx${testng.memory}"/> 
     56    </testng> 
     57  </target> 
    1458</project> 
  • branches/cleanup/components/bio-formats/src/loci/formats/MDBServiceImpl.java

    r5919 r5926  
    2828import java.util.Vector; 
    2929 
    30 import loci.formats.FormatException; 
     30import loci.common.dependency.services.AbstractService; 
    3131 
    3232import mdbtools.jdbc2.File; 
     
    5050 * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/MDBServiceImpl.java">SVN</a></dd></dl> 
    5151 */ 
    52 public class MDBServiceImpl implements MDBService { 
     52public class MDBServiceImpl extends AbstractService implements MDBService { 
    5353 
    5454  // -- Fields -- 
     
    5858 
    5959  // -- MDBService API methods -- 
     60 
     61  /** 
     62   * Default constructor. 
     63   */ 
     64  public MDBServiceImpl() { 
     65    // One check from each package 
     66    checkClassDependency(mdbtools.jdbc2.File.class); 
     67    checkClassDependency(mdbtools.libmdb.Catalog.class); 
     68  } 
    6069 
    6170  /* @see MDBService#initialize(String) */ 
  • branches/cleanup/components/bio-formats/src/loci/formats/NetCDFServiceImpl.java

    r5918 r5926  
    3434import loci.common.Location; 
    3535import loci.common.dependency.ServiceException; 
     36import loci.common.dependency.services.AbstractService; 
    3637 
    3738import org.slf4j.Logger; 
     
    5354 * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/NetCDFServiceImpl.java">SVN</a></dd></dl> 
    5455 */ 
    55 public class NetCDFServiceImpl implements NetCDFService { 
     56public class NetCDFServiceImpl extends AbstractService 
     57  implements NetCDFService { 
    5658 
    5759  // -- Constants -- 
     
    8082 
    8183  // -- NetCDFService API methods --- 
     84 
     85  /** 
     86   * Default constructor. 
     87   */ 
     88  public NetCDFServiceImpl() { 
     89    // One check from each package 
     90    checkClassDependency(ucar.nc2.Attribute.class); 
     91    checkClassDependency(ucar.ma2.Array.class); 
     92  } 
    8293 
    8394  /* (non-Javadoc) 
  • branches/cleanup/components/bio-formats/src/loci/formats/POIServiceImpl.java

    r5913 r5926  
    3232 
    3333import loci.common.RandomAccessInputStream; 
     34import loci.common.dependency.services.AbstractService; 
    3435 
    3536import loci.poi.poifs.filesystem.DirectoryEntry; 
     
    4546 * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/POIServiceImpl.java">SVN</a></dd></dl> 
    4647 */ 
    47 public class POIServiceImpl implements POIService { 
     48public class POIServiceImpl extends AbstractService implements POIService { 
    4849 
    4950  // -- Fields -- 
     
    5859 
    5960  // -- POIService API methods -- 
     61 
     62  /** 
     63   * Default constructor. 
     64   */ 
     65  public POIServiceImpl() { 
     66    // Just checking a single class in loci.poi.poifs.filesystem package 
     67    checkClassDependency(loci.poi.poifs.filesystem.DirectoryEntry.class); 
     68  } 
    6069 
    6170  /* @see POIService#initialize(String) */ 
  • branches/cleanup/components/bio-formats/src/loci/formats/ome/OMEXMLServiceImpl.java

    r5915 r5926  
    4242 
    4343import loci.common.dependency.ServiceException; 
     44import loci.common.dependency.services.AbstractService; 
    4445import loci.common.xml.XMLTools; 
    4546import loci.formats.meta.IMetadata; 
     
    5657 * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/ome/OMEXMLServiceImpl.java">SVN</a></dd></dl> 
    5758 */ 
    58 public class OMEXMLServiceImpl implements OMEXMLService { 
     59public class OMEXMLServiceImpl extends AbstractService 
     60  implements OMEXMLService { 
    5961 
    6062  /** Logger for this class. */ 
     
    6668    XMLTools.getStylesheet("../meta/reorder-2008-09.xsl", 
    6769                           OMEXMLServiceImpl.class); 
     70   
     71  /** 
     72   * Default constructor. 
     73   */ 
     74  public OMEXMLServiceImpl() { 
     75    checkClassDependency(ome.xml.OMEXMLFactory.class); 
     76    checkClassDependency(ome.xml.OMEXMLNode.class); 
     77  } 
    6878   
    6979  /** 
  • branches/cleanup/components/common/src/loci/common/dependency/DependencyException.java

    r5898 r5926  
    5757   * @param message Error message.  
    5858   * @param klass Failed instantiation class. 
     59   */ 
     60  public DependencyException(String message, Class<? extends Service> klass) 
     61  { 
     62    super(message); 
     63    this.failureClass = klass; 
     64  } 
     65 
     66  /** 
     67   * Default constructor. 
     68   * @param message Error message.  
     69   * @param klass Failed instantiation class. 
    5970   * @param exception Upstream exception. 
    6071   */ 
  • branches/cleanup/components/common/src/loci/common/dependency/ServiceFactory.java

    r5913 r5926  
    7474   * Constructor loading service configuration from the default location. 
    7575   * @throws DependencyException If there is an error locating or reading from 
    76    * the default configuration location or locating any of the service classes 
    77    * on the classpath. 
     76   * the default configuration location. 
    7877   */ 
    7978  public ServiceFactory() throws DependencyException { 
     
    8584   * @param path Location to load service configuration from. 
    8685   * @throws DependencyException If there is an error locating or reading from 
    87    * <code>path</code> or locating any of the service classes on the classpath. 
     86   * <code>path</code>. 
    8887   */ 
    8988  public ServiceFactory(String path) throws DependencyException { 
     
    10099      String interfaceName = (String) entry.getKey(); 
    101100      String implementationName = (String) entry.getValue(); 
    102       Class<? extends Service> interfaceClass; 
    103       Class<? extends Service> implementationClass; 
     101      Class<? extends Service> interfaceClass = null; 
     102      Class<? extends Service> implementationClass = null; 
    104103      try { 
    105104        interfaceClass = (Class<? extends Service>) 
     
    115114      } 
    116115      catch (ClassNotFoundException e) { 
    117         LOGGER.warn("CLASSPATH missing implementation: {}", implementationName); 
    118         continue; 
     116        LOGGER.warn( 
     117            "CLASSPATH missing implementation or implementation dependency: {}", 
     118            implementationName); 
     119      } 
     120      catch (NoClassDefFoundError e) { 
     121        LOGGER.warn( 
     122            "CLASSPATH missing implementation or implementation dependency: {}", 
     123            implementationName); 
    119124      } 
    120125      services.put(interfaceClass, implementationClass); 
     
    129134   * @param type Interface type of the service. 
    130135   * @return A newly instantiated service. 
    131    * @throws DependencyException If there is an error instantiating the service 
    132    * instance requested. 
     136   * @throws DependencyException If there is an error instantiating the 
     137   * service instance requested. 
    133138   */ 
    134139  public <T extends Service> T getInstance(Class<T> type) 
    135140    throws DependencyException { 
    136141    Class<T> impl = (Class<T>) services.get(type); 
     142    if (impl == null && services.containsKey(type)) { 
     143      throw new DependencyException( 
     144          "Unable to instantiate service. Missing implementation or " + 
     145          "implementation dependency", type); 
     146    } 
    137147    if (impl == null) { 
    138148      throw new DependencyException("Unknown service type: " + type); 
     
    142152      return constructor.newInstance(); 
    143153    } catch (Exception e) { 
    144       throw new DependencyException("Unable to instantiate service.", type, e); 
     154      throw new DependencyException("Unable to instantiate service", type, e); 
    145155    } 
    146156  } 
     
    151161   * @param klass Class to retrieve a constructor for. 
    152162   * @return See above. 
    153    * @throws DependencyException If there is an error retrieving the constructor. 
     163   * @throws DependencyException If there is an error retrieving the 
     164   * constructor. 
    154165   */ 
    155166  private <T extends Service> Constructor<T> getConstructor(Class<T> klass) 
  • branches/cleanup/components/legacy/ome-notes/src/loci/ome/notes/OMENotesServiceImpl.java

    r5898 r5926  
    2424package loci.ome.notes; 
    2525 
     26import loci.common.dependency.services.AbstractService; 
    2627import loci.common.dependency.services.OMENotesService; 
    2728 
     
    3435 * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/legacy/ome-notes/src/loci/ome/notes/OMENotesServiceImpl.java">SVN</a></dd></dl> 
    3536 */ 
    36 public class OMENotesServiceImpl implements OMENotesService { 
     37public class OMENotesServiceImpl extends AbstractService 
     38  implements OMENotesService { 
     39 
     40  /** 
     41   * Default constructor. 
     42   */ 
     43  public OMENotesServiceImpl() { 
     44    checkClassDependency(Notes.class); 
     45  } 
    3746 
    3847  /* (non-Javadoc) 
Note: See TracChangeset for help on using the changeset viewer.