The parseRule utilizes the following objects in its context:
application - the application definition
config - shortcut to the Map config on the application
schema - the schema being iterated
state - Map object for storing state between records
inputStream - InputStream to the file (may or may not be used)
reader - BufferedReader object that can be used to iterate over the contents of the file
Usually the reader object is used to parse out the file (i.e. reader.readLine())
Here is a simple example of a ParseRule that parses a CSV:
// Simple parseRule to use reader to read next line
import sailpoint.tools.*; import sailpoint.tools.xml.*; import sailpoint.object.Schema; import sailpoint.connector.Connector; import sailpoint.connector.DelimitedFileConnector; import java.util.ArrayList; import java.util.List; import java.util.Hashap;
//
//Main
// Map
map = null;
List cols = new ArrayList();
RFC4180LineParser parser = new RFC4180LineParser(',');
// Check state for saved iterator
RFC4180LineIterator iterator = (RFC4180LineIterator)state.get("4180Iterator");
if ( iterator == null ) { iterator = new RFC4180LineIterator(reader);
String header = iterator.readLine();
//
System.out.println("header." + header);
cols = parser.parseLine(header);
//
// Save it off for next time
//
state.put("4180Iterator", iterator);
state.put("cols", cols); }
else if ( cols.size() == 0 ) { cols = (List)state.get("cols"); }
parser.setNumberOfColumns(cols.size());
String nextLine = iterator.readLine()
if ( nextLine != null ) { List tokens = parser.parseLine(nextLine);
map = DelimitedFileConnector.defaultBuildMap(cols, tokens);
//
System.out.println("object:"+XMLObjectFactory.getInstance().toXml(map)); } return map;