GetFilesFromHttpServer.ds

Note: This code is provided as a sample. It isn't a supported part of the SiteGenesis application.
/*
 * Gets a file list from an HTTP(S) server
 *
 * @input ConnectionUrl  : String    of the server URL including protocol
 * @input Login    : String    The login for authentication
 * @input Password   : String    The password for authentication
 * @input SortDirection  : String    'ASCENDING' or 'DESCENDING'
 * @input NamePattern   : String    The pattern for the filenames (use ".*" to get all)
 * @input ServerPath   : String    the directory path at the server
 * @input sampleLogger   : Object Sample logger input for Sample logger
 *
 * @output FileList   : dw.util.Collection  The files matching the pattern
 * @output StatusCode   : Number    The servers status code
 * @output StatusMessage  : String    The servers status message
 * @output sampleLogger  : Object Sample logger debug output for Sample logger
 * @output sampleError   : Object Sample error error output for Sample logger
 * 
 */
importPackage( dw.system );
importPackage( dw.util );
importPackage( dw.net );
// Sample Logging ImportScript
importScript("bc_sample:library/common/libContext.ds");
importScript("bc_sample:library/utility/exception/libsampleException.ds");
importScript("bc_sample:library/utility/logging/libLog.ds");
/*
*/ 
function execute( pdict : PipelineDictionary ) : Number {
 // Sample Logging var
 var _context : String = new Context("GetFilesFromHttpServer.ds");
 var _logger : Log = Log.getLogger(pdict);
 
 // constants for parsing
 var pattern_dir  : String ="/";
 var tag_a_href   : String = "<a";   //<a href="...
 var char_left   : String = '"';    // .....>file_name<...
 var char_right   : String = '"';
 // input variables 
 // input variables 
 var connectionURL   : String = pdict.ConnectionUrl;
 var login     : String = pdict.Login;
 var password    : String = pdict.Password;
 var sortDirection   : String = pdict.SortDirection;
 var pattern    : RegExp = new RegExp(pdict.NamePattern);
 var serverPath    : String = pdict.ServerPath;
 
 var httpSvc : HTTPClient = new HTTPClient();
 
 var url : String = connectionURL + serverPath;
 
 // get server response for directory
 httpSvc.open("POST",url); // old httpSvc.open("POST",url,login,password);
 try{
  httpSvc.send();
 }
 catch( e ){
  var exception : sampleException = new sampleException(_context, "Could not connect to remote resource {0}. ( {1} )",url,e);
  _logger.error(_context, "Could not connect to remote resource {0}. ( {1} )" + exception);
  pdict.sampleError = exception; 
  
  return PIPELET_ERROR;
 }
 if(httpSvc.statusCode != 200){
  _logger.error(_context, "Server responded with Status code {0} ( {1} )!",httpSvc.statusCode,httpSvc.statusMessage);
  return PIPELET_ERROR;
 }else{
  _logger.debug(_context, "Successfully read directory listing of {0}.",url);
 }
 
 var response = httpSvc.text;
 
 _logger.debug(_context, "Content: " + response);
 var fileName : String = "";
 var sorted : SortedSet = ((sortDirection == "DESCENDING") ? new SortedSet(descending) :  new SortedSet());
 var line = response;
 
 // IIS HTML Format
 var line_pos : Number = 0;
 var index : String = line;
 var indexLowerCase : String = index.toLowerCase();
 
 //++line_count;
 while (line_pos != -1)
 {
  //find contents of <a...>needed_text</a>
  if ((line_pos = indexLowerCase.indexOf(tag_a_href, line_pos + 6)) != -1)
  {
   if ((line_pos = indexLowerCase.indexOf(char_left, line_pos + tag_a_href.length)) != -1)
   {
    var idx = indexLowerCase.indexOf(char_right, line_pos + 1);
    fileName = index.substring(line_pos + 1, idx);
    // Remove any directory from the filename
    if (fileName.lastIndexOf(pattern_dir) != -1 && fileName.lastIndexOf(pattern_dir) + 1 < fileName.length) {
     fileName = fileName.substring(fileName.lastIndexOf(pattern_dir) + 1);
    }
 
    _logger.debug(_context, "Found Filename '" + fileName + "'");
 
             if (idx != -1 && fileName.match(pattern) && fileName.substring(fileName.length - 1) != pattern_dir)
    {
     sorted.add(fileName);
    }
   }
  }
 }
 
 pdict.StatusCode = httpSvc.statusCode;
 pdict.StatusMessage = httpSvc.statusMessage;
 
 // if directory contains files, return them
 if ( !sorted.empty)
 {
     // store 'FileList' in pipeline dictionary
     pdict.FileList = sorted;
 
     return PIPELET_NEXT;
 }
 return PIPELET_ERROR;
}
function descending( var1 : Object, var2) : Number{
 if( var1 == var2) return 0
  else if ( var1 < var2) return -1
   else return 1;
}