@Test
  public void testCalculateXlogPFromCML()
      throws BioclipseException, FileNotFoundException, IOException, CoreException {

    ICDKManager cdk = net.bioclipse.cdk.business.Activator.getDefault().getJavaCDKManager();

    Bundle bun = Platform.getBundle(net.bioclipse.cdk.qsar.test.Activator.PLUGIN_ID);
    URL url = FileLocator.find(bun, new Path("src/testFiles/0037.cml"), null);
    String str = FileLocator.toFileURL(url).getFile();

    ICDKMolecule mol = cdk.loadMolecule(new MockIFile(str));

    IDescriptorResult dres1 = qsar.calculate(mol, xlogpID, CDK_REST_SHORTNAME);
    IDescriptorResult dres2 = qsar.calculate(mol, xlogpID, "CDK");

    assertNotNull(dres1);
    assertNull(dres1.getErrorMessage(), dres1.getErrorMessage());
    assertEquals(xlogpID, dres1.getDescriptor().getOntologyid());
    assertNotNull(dres2);
    assertNull(dres2.getErrorMessage(), dres1.getErrorMessage());
    assertEquals(xlogpID, dres2.getDescriptor().getOntologyid());

    assertEquals(
        "CDK and CDK REST gives different labels", dres2.getLabels()[0], dres1.getLabels()[0]);
    assertEquals(
        "CDK and CDK REST gives different values", dres2.getValues()[0], dres1.getValues()[0]);
  }
  @Test
  public void testCalculateBpolFromSMILES() throws BioclipseException {

    IMolecule mol = new SMILESMolecule("C1CNCCC1CC(COC)CCNC");

    IDescriptorResult dres1 = qsar.calculate(mol, bpolID, CDK_REST_SHORTNAME);

    assertNotNull(dres1);
    assertNull(dres1.getErrorMessage());
    assertEquals(bpolID, dres1.getDescriptor().getOntologyid());
    assertEquals(cdkRestProviderID, dres1.getDescriptor().getProvider());

    System.out.println(
        "Mol: " + mol.toSMILES() + " ; Desc: " + dres1.getDescriptor().getOntologyid() + ": ");
    for (int i = 0; i < dres1.getValues().length; i++) {
      System.out.println("    " + dres1.getLabels()[i] + "=" + dres1.getValues()[i]);
    }

    assertEquals(6, dres1.getValues().length);
    assertEquals(6, dres1.getLabels().length);

    assertEquals("BCUTw-1l", dres1.getLabels()[0]);
    assertEquals(new Float(11.993387), dres1.getValues()[0]);

    assertEquals("BCUTw-1h", dres1.getLabels()[1]);
    assertEquals(new Float(15.994919), dres1.getValues()[1]);
    assertEquals("BCUTc-1l", dres1.getLabels()[2]);
    assertEquals(new Float(0.89), dres1.getValues()[2]);
    assertEquals("BCUTc-1h", dres1.getLabels()[3]);
    assertEquals(new Float(1.1102645), dres1.getValues()[3]);
    assertEquals("BCUTp-1l", dres1.getLabels()[4]);
    assertEquals(new Float(4.6727624), dres1.getValues()[4]);
    assertEquals("BCUTp-1h", dres1.getLabels()[5]);
    assertEquals(new Float(9.596294), dres1.getValues()[5]);
  }
  @Test
  public void testGetDescriptorImplNotInOntology() {

    System.out.println("=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.");
    System.out.println("Impl not in onology:");
    System.out.println("=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.");
    boolean toFail = false;
    for (DescriptorImpl impl : qsar.getFullDescriptorImpls()) {
      if (qsar.getDescriptorIDs().contains(impl.getDefinition())) {
        // All is well
      } else {
        System.out.println(
            "=.= Descriptor impl: " + impl.getName() + " with def: " + impl.getDefinition());
        toFail = true;
      }
    }
    System.out.println("=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.");

    assertFalse("Not all CDK impl are present in ontology, see list on stdout", toFail);
  }
  @Test
  public void testGetDescriptorsByID() throws BioclipseException {

    // Get decriptor by hardcoded id
    DescriptorImpl desc = qsar.getDescriptorImpl(bpolID, cdkRestProviderID);
    assertNotNull(desc);
    assertNull(desc.getParameters());
    assertFalse(desc.isRequires3D());
    assertEquals(cdkRestProviderID, desc.getProvider().getId());
    assertNotNull(desc.getDescription());
    assertNotNull(desc.getDefinition());
  }
  @Test
  public void testGetDescriptors() throws BioclipseException {

    // Matches plugin.xml, just test some classes

    // Get provider by ID
    DescriptorProvider provider = qsar.getProviderByID(cdkRestProviderID);
    assertNotNull(provider);

    List<String> descImplIDs = qsar.getDescriptorImplsByProvider(cdkRestProviderID);

    List<DescriptorImpl> descs = qsar.getFullDescriptorImpls(provider);

    // Check list of IDs and list of classes equal size
    assertEquals(descImplIDs.size(), descs.size());

    List<String> descIDs = new ArrayList<String>();
    for (DescriptorImpl impl : descs) {
      descIDs.add(impl.getDefinition());
    }

    assertTrue(descIDs.contains(xlogpID));
    assertTrue(descIDs.contains(bpolID));
  }
  @Test
  public void testGetPrefferedImplByDescriptorID() {

    IEclipsePreferences prefs = new DefaultScope().getNode(Activator.PLUGIN_ID);
    assertNotNull(prefs);
    String prefsString = prefs.get(QSARConstants.QSAR_PROVIDERS_ORDER_PREFERENCE, null);
    assertNotNull(prefsString);

    System.out.println("Got prefs string: " + prefsString);

    DescriptorImpl impl = qsar.getPreferredImpl(chiChainID);
    assertNotNull(impl);
    System.out.println("pref impl: " + impl.getId());
    //		assertEquals("net.bioclipse.qsar.test.descriptor2", impl.getId());
    System.out.println("wee");
  }
  @Test
  public void testCalculateXlogPFromSMILES() throws BioclipseException {

    IMolecule mol = new SMILESMolecule("C1CNCCC1CC(COC)CCNC");

    IDescriptorResult dres1 = qsar.calculate(mol, xlogpID, CDK_REST_SHORTNAME);

    assertNotNull(dres1);
    assertNull(dres1.getErrorMessage());
    assertEquals(xlogpID, dres1.getDescriptor().getOntologyid());

    System.out.println(
        "Mol: " + mol.toSMILES() + " ; Desc: " + dres1.getDescriptor().getOntologyid() + ": ");
    for (int i = 0; i < dres1.getValues().length; i++) {
      System.out.println("    " + dres1.getLabels()[i] + "=" + dres1.getValues()[i]);
    }

    assertEquals("XLogP", dres1.getLabels()[0]);
    assertEquals(new Float(0.184), dres1.getValues()[0]);
  }
  @Test
  public void testCalculateBpolFromSmiles() throws BioclipseException {

    IMolecule mol = new SMILESMolecule("C1CNCCC1CC(COC)CCNC");

    //        DescriptorImpl desc=qsar.getDescriptorImpl(bpolID, cdkRestProviderID);
    IDescriptorResult dres = qsar.calculate(mol, bpolID, CDK_REST_SHORTNAME);

    assertNull(dres.getErrorMessage());
    assertEquals(bpolID, dres.getDescriptor().getOntologyid());

    System.out.println(
        "Mol: " + mol.toSMILES() + " ; Desc: " + dres.getDescriptor().getOntologyid() + ": ");
    for (int i = 0; i < dres.getValues().length; i++) {
      System.out.println("    " + dres.getLabels()[i] + "=" + dres.getValues()[i]);
    }

    assertEquals("bpol", dres.getLabels()[0]);
    assertEquals(new Float(31.659382), dres.getValues()[0]);
  }
  @Test
  public void testCalculateMolDescMap() throws BioclipseException {

    IMolecule mol1 = new SMILESMolecule("C1CCCCC1CC(CC)CC");
    IMolecule mol2 = new SMILESMolecule("C1CCCCC1CC(CC)CCCCCO");

    Descriptor desc1 = qsar.getDescriptorByID(bpolID);
    Descriptor desc2 = qsar.getDescriptorByID(xlogpID);
    DescriptorImpl impl1 = qsar.getPreferredImpl(bpolID);
    DescriptorImpl impl2 = qsar.getPreferredImpl(xlogpID);

    DescriptorType dtype1 = qsar.createDescriptorType(null, null, desc1, impl1, null);
    DescriptorType dtype2 = qsar.createDescriptorType(null, null, desc2, impl2, null);

    Map<IMolecule, List<DescriptorType>> moldescmap =
        new HashMap<IMolecule, List<DescriptorType>>();
    List<DescriptorType> list1 = new ArrayList<DescriptorType>();
    list1.add(dtype1);
    list1.add(dtype2);
    moldescmap.put(mol1, list1);
    List<DescriptorType> list2 = new ArrayList<DescriptorType>();
    list2.add(dtype2);
    moldescmap.put(mol2, list2);

    Map<? extends IMolecule, List<IDescriptorResult>> res =
        qsar.doCalculation(moldescmap, new NullProgressMonitor());
    assertNotNull("QSAR calculation returned NULL", res);

    assertNotNull(res);

    List<IDescriptorResult> res1 = res.get(mol1);
    List<IDescriptorResult> res2 = res.get(mol2);

    assertEquals(2, res1.size());
    assertEquals(1, res2.size());

    IDescriptorResult dres1 = res1.get(0);
    IDescriptorResult dres11 = res1.get(1);
    IDescriptorResult dres2 = res2.get(0);

    assertNull(dres1.getErrorMessage());
    assertNull(dres11.getErrorMessage());
    assertNull(dres2.getErrorMessage());

    System.out.println(
        "Mol: " + mol1.toSMILES() + " ; Desc: " + dres1.getDescriptor().getOntologyid() + ": ");
    for (int i = 0; i < dres1.getValues().length; i++) {
      System.out.println("    " + dres1.getLabels()[i] + "=" + dres1.getValues()[i]);
    }

    System.out.println(
        "Mol: " + mol1.toSMILES() + " ; Desc: " + dres11.getDescriptor().getOntologyid() + ": ");
    for (int i = 0; i < dres11.getValues().length; i++) {
      System.out.println("    " + dres11.getLabels()[i] + "=" + dres11.getValues()[i]);
    }

    System.out.println(
        "Mol: " + mol2.toSMILES() + " ; Desc: " + dres2.getDescriptor().getOntologyid() + ": ");
    for (int i = 0; i < dres2.getValues().length; i++) {
      System.out.println("    " + dres2.getLabels()[i] + "=" + dres2.getValues()[i]);
    }

    assertEquals("bpol", dres1.getLabels()[0]);
    assertEquals(new Float(26.236967), dres1.getValues()[0]);
    assertEquals("XLogP", dres11.getLabels()[0]);
    assertEquals(new Float(6.706), dres11.getValues()[0]);

    assertEquals("XLogP", dres2.getLabels()[0]);
    assertEquals(new Float(6.648), dres2.getValues()[0]);
  }
  @Test
  public void testCalculateMultipleMolMultipleDescriptor() throws BioclipseException {

    IMolecule mol1 = new SMILESMolecule("C1CNCCC1CC(COC)CCNC");
    IMolecule mol2 = new SMILESMolecule("C1CCCCC1CC(CC)CCCCCOCCCN");

    List<IMolecule> mols = new ArrayList<IMolecule>();
    List<String> descs = new ArrayList<String>();

    mols.add(mol1);
    mols.add(mol2);
    descs.add(bpolID);
    descs.add(xlogpID);

    DescriptorCalculationResult calres = qsar.calculate(mols, descs, CDK_REST_SHORTNAME);

    Map<IMolecule, List<IDescriptorResult>> res = calres.getResultMap();

    assertNotNull(res);

    List<IDescriptorResult> res1 = res.get(mol1);
    List<IDescriptorResult> res2 = res.get(mol2);

    assertEquals(2, res1.size());
    assertEquals(2, res2.size());

    IDescriptorResult dres1 = res1.get(0);
    IDescriptorResult dres11 = res1.get(1);
    IDescriptorResult dres2 = res2.get(0);
    IDescriptorResult dres22 = res2.get(1);

    assertNull(dres1.getErrorMessage());
    assertNull(dres11.getErrorMessage());
    assertNull(dres2.getErrorMessage());
    assertNull(dres22.getErrorMessage());

    System.out.println(
        "Mol: " + mol1.toSMILES() + " ; Desc: " + dres1.getDescriptor().getOntologyid() + ": ");
    for (int i = 0; i < dres1.getValues().length; i++) {
      System.out.println("    " + dres1.getLabels()[i] + "=" + dres1.getValues()[i]);
    }

    System.out.println(
        "Mol: " + mol1.toSMILES() + " ; Desc: " + dres11.getDescriptor().getOntologyid() + ": ");
    for (int i = 0; i < dres11.getValues().length; i++) {
      System.out.println("    " + dres11.getLabels()[i] + "=" + dres11.getValues()[i]);
    }

    System.out.println(
        "Mol: " + mol2.toSMILES() + " ; Desc: " + dres2.getDescriptor().getOntologyid() + ": ");
    for (int i = 0; i < dres2.getValues().length; i++) {
      System.out.println("    " + dres2.getLabels()[i] + "=" + dres2.getValues()[i]);
    }

    System.out.println(
        "Mol: " + mol2.toSMILES() + " ; Desc: " + dres22.getDescriptor().getOntologyid() + ": ");
    for (int i = 0; i < dres22.getValues().length; i++) {
      System.out.println("    " + dres22.getLabels()[i] + "=" + dres22.getValues()[i]);
    }

    assertEquals("bpol", dres1.getLabels()[0]);
    assertEquals(new Float(31.659382), dres1.getValues()[0]);
    assertEquals("XLogP", dres11.getLabels()[0]);
    assertEquals(new Float(0.184), dres11.getValues()[0]);

    assertEquals("bpol", dres2.getLabels()[0]);
    assertEquals(new Float(41.70466), dres2.getValues()[0]);
    assertEquals("XLogP", dres22.getLabels()[0]);
    assertEquals(new Float(6.749), dres22.getValues()[0]);
  }