/** Constructor for the JOETypeTable object */
  private BasicResidueData() {
    initialized = false;

    Properties prop = BasicPropertyHolder.instance().getProperties();
    resourceFile = prop.getProperty(this.getClass().getName() + ".resourceFile", DEFAULT_RESOURCE);

    _resname = new Vector();
    _resatoms = new Vector();
    _resbonds = new Vector();

    _vatmtmp = new Vector();
    _vtmp = new Vector();

    vendor = VENDOR;
    releaseVersion = IdentifierExpertSystem.transformCVStag(RELEASE_VERSION);
    releaseDate = IdentifierExpertSystem.transformCVStag(RELEASE_DATE);

    IdentifierExpertSystem.instance().addHardCodedKernel(this);
    init();
    IdentifierExpertSystem.instance().addSoftCodedKernel(this);
  }
  private static String[] buildDependencyTree() {
    //      ensure, that the class loader has all relevant classes loaded
    BasicAromaticityTyper.instance();
    BasicArrayHelper.instance();
    AtomPairTypeHolder.instance();
    BasicAtomTypeConversionHolder.instance();
    BasicAtomTyper.instance();
    BasicBatchScriptReplacer.instance();
    BibitemHolder.instance();

    // DatabaseConnection.instance();
    DecimalFormatHelper.instance();
    BasicElementHolder.instance();
    ExternalFactory.instance();
    FeatureFactory.instance();
    FeatureHelper.instance();
    BasicBatchFileUtilities.instance();
    FilterFactory.instance();

    //        try
    //        {
    //            GhemicalInterface.instance();
    //        }
    //        catch(Exception e){
    //
    //        }
    BasicGroupContributionHolder.instance();
    BasicIOTypeHolder.instance();
    BasicIsotopeHolder.instance();
    HelperMethods.instance();
    BasicLineArrayHelper.instance();
    BasicLineMatrixHelper.instance();
    BasicMatrixHelper.instance();

    // Avoid an instance, because this will add a X-server dependency for linux systems
    // Mol2Image.instance();
    // Avoid an instance, because this will add a X-server dependency for linux systems
    // MolFileChooser.instance();

    try {
      BasicMoleculeCacheHolder.instance();
    } catch (Exception e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }

    ProcessFactory.instance();
    BasicPropertyHolder.instance();
    BasicProtonationModel.instance();
    BasicResidueData.instance();
    BasicResourceLoader.instance();
    ResultFactory.instance();
    BasicRotorRulesHolder.instance();
    // Viewer.instance();

    // show all loaded classes in the class loader
    final ClassLoader[] loaders = ClassScope.getCallerClassLoaderTree();
    final Class[] classes = ClassScope.getLoadedClasses(loaders);
    String[] cnames = new String[classes.length];
    Vector<String> results = new Vector<String>(classes.length);
    StringBuffer buffer;
    dependencyVersionHash = new Hashtable<String, int[]>(classes.length);

    for (int c = 0; c < classes.length; c++) {
      buffer = new StringBuffer(300);
      cnames[c] = classes[c].getName();
      // System.out.println ("[" + classes[c].getName () + "]:");
      // System.out.println (" loaded by [" + classes[c].getClassLoader
      // ().getClass ().getName () + "]");
      // System.out.println (" from [" + ClassScope.getClassLocation
      // (classes[c])
      // + "]");

      recurseInto(classes[c], buffer, 0, results);
    }

    String[] resultsArr = new String[results.size()];

    for (int i = 0; i < resultsArr.length; i++) {
      resultsArr[i] = results.get(i);
    }

    return resultsArr;
  }