<SourceConfig>

 <FieldSpecs>

    <Field>
      <ID>drug</ID>
      <Name>Drug Name</Name>
      <Type>AlphaNumeric</Type>
    </Field>

 </FieldSpecs>

 <SearchForms>
    <SearchForm name="SimpleSearch" >
     <Field ID="drug" type="text" width="50" name="Drug Name" />
    </SearchForm>
  </SearchForms>


  <SourceType name="PubChemSmilesFinder" type="HTMLSearchSource" displayName="PubChem Smiles Lookup"
              sourceFactoryClass="com.raritantechnologies.federated.html.HTMLSearchSourceFactory" 
              queryProcessor="com.raritantechnologies.federated.html.HTMLQueryProcessor" >

    <Fields>
      <Field ID="drug"    xPath="/SearchProcess/Step/params/param[@formName='term']/@value" />
    </Fields>

    <SecurityModel>
       <search>Public</search>
    </SecurityModel>


    <SearchProcess>

      <Step type="postURLSocket" URL="http://www.ncbi.nlm.nih.gov/coreutils/dispatch.cgi">
        <params>
          <param formName="db" value="26" />

          <param formName="term" value="" />
          <param formName="SITE" value="NcbiHome" />
        </params>
      </Step>

    </SearchProcess>

    <ScraperConfigFile>PubChemStructureScraper.xml</ScraperConfigFile>
    <OutputTransformer>PubChemOutputTransform.xsl</OutputTransformer>


    <!-- Post filtering of data:
         1) URLDecode Smiles string
         2) Extract &cid= attribute into separate result field
         3) Remove &cid= from Smiles value
      -->
    <FieldFormatters>

        <Formatter formatterClass="com.raritantechnologies.searchApp.formatters.StringFilterFormatter"
                   fieldID="Smiles" >
         <StringFilter class="com.raritantechnologies.utils.filter.URLDecoderStringFilter" />
        </Formatter>

        <Formatter  formatterClass="com.raritantechnologies.searchApp.formatters.PatternExtractor" 
                    inputFields="Smiles" 
                    outputField="CID"
                    inPattern=".*\&amp;cid=(.*)" outPattern="$1" />

        <Formatter  formatterClass="com.raritantechnologies.searchApp.formatters.RegExprFieldFormatter" 
                    fieldID="Smiles" 
                    inPattern="(.*)\&amp;cid=(.*)" outPattern="$1" />

    </FieldFormatters>


  </SourceType>


  <SystemObjects>

     <SystemObject type="PageImportRenderer" name="PubChemStructureScraper"
          configurableClass="com.raritantechnologies.HTML.HTMLScraperPageImportRenderer"
          scraperConfig="BASE_PATH/StructurePage/PubChemNullScraper.xml" >

        <Fields>
          <!-- Convert drug to Smiles String -->
          <Field ID="drug"    xPath="/SearchProcess/Step/params/param[@formName='simple_searchdata']/@value" >
            <StringFilter class="com.raritantechnologies.utils.filter.LookupStringFilter"
                          searchSource="PubChemSmilesFinder"
                          queryField="drug"
                          outputField="Smiles" />
           </Field>
        </Fields>

        <SearchProcess>

          <Step type="getURLSocket" URL="http://pubchem.ncbi.nlm.nih.gov/search/" >
            <params>
            </params>
          </Step>

          <Step type="postURLSocketMultipart" URL="http://pubchem.ncbi.nlm.nih.gov/search/PreQSrv.cgi">
            <params>
               <param formName="mode"               value="simplequery" />
               <param formName="check"              value="remote" />
               <param formName="execution"          value="remote" />
               <param formName="queue"              value="ssquery" />
               <param formName="simple_searchdata"  value="" />
               <param formName="simple_cid"         value=""  />
               <param formName="simple_sid"         value=""  />
               <param formName="file"               value="" 
                      type="file" filename="" contentType="application/octet-stream" />

               <param formName="simple_searchtype"  value="fs" />
               <param formName="maxhits"            value="200" />

            </params>
          </Step>

      </SearchProcess>
     </SystemObject>

   </SystemObjects>

</SourceConfig>
