in connectors/rss/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/rss/RSSConnector.java [2452:2840]
public String processSpecificationPost(IPostParameters variableContext, Locale locale, Specification ds,
int connectionSequenceNumber)
throws ManifoldCFException
{
String seqPrefix = "s"+connectionSequenceNumber+"_";
// Get the map
String value = variableContext.getParameter(seqPrefix+"rssmapcount");
if (value != null)
{
int mapsize = Integer.parseInt(value);
// Clear it first
int j = 0;
while (j < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(j);
if (sn.getType().equals(RSSConfig.NODE_MAP))
ds.removeChild(j);
else
j++;
}
// Grab the map values
j = 0;
while (j < mapsize)
{
String prefix = seqPrefix+"rssregexp_"+Integer.toString(j)+"_";
String match = variableContext.getParameter(prefix+"match");
String map = variableContext.getParameter(prefix+"map");
if (map == null)
map = "";
// Add to the documentum specification
SpecificationNode node = new SpecificationNode(RSSConfig.NODE_MAP);
node.setAttribute(RSSConfig.ATTR_MATCH,match);
node.setAttribute(RSSConfig.ATTR_MAP,map);
ds.addChild(ds.getChildCount(),node);
j++;
}
}
// Get the cgiPath
String rssURLSequence = variableContext.getParameter(seqPrefix+"rssurls");
if (rssURLSequence != null)
{
// Delete all url specs first
int i = 0;
while (i < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(i);
if (sn.getType().equals(RSSConfig.NODE_FEED))
ds.removeChild(i);
else
i++;
}
try
{
java.io.Reader str = new java.io.StringReader(rssURLSequence);
try
{
java.io.BufferedReader is = new java.io.BufferedReader(str);
try
{
while (true)
{
String nextString = is.readLine();
if (nextString == null)
break;
if (nextString.length() == 0)
continue;
SpecificationNode node = new SpecificationNode(RSSConfig.NODE_FEED);
node.setAttribute(RSSConfig.ATTR_URL,nextString);
ds.addChild(ds.getChildCount(),node);
}
}
finally
{
is.close();
}
}
finally
{
str.close();
}
}
catch (java.io.IOException e)
{
throw new ManifoldCFException("IO error: "+e.getMessage(),e);
}
}
// Read the url specs
String urlRegexpCount = variableContext.getParameter(seqPrefix+"urlregexpcount");
if (urlRegexpCount != null && urlRegexpCount.length() > 0)
{
int regexpCount = Integer.parseInt(urlRegexpCount);
int j = 0;
while (j < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(j);
if (sn.getType().equals(RSSConfig.NODE_URLSPEC))
ds.removeChild(j);
else
j++;
}
// Grab the operation and the index (if any)
String operation = variableContext.getParameter(seqPrefix+"urlregexpop");
if (operation == null)
operation = "Continue";
int opIndex = -1;
if (operation.equals("Delete"))
opIndex = Integer.parseInt(variableContext.getParameter(seqPrefix+"urlregexpnumber"));
// Reconstruct urlspec nodes
j = 0;
while (j < regexpCount)
{
// For each index, first look for a delete operation
if (!operation.equals("Delete") || j != opIndex)
{
// Add the jth node
String regexp = variableContext.getParameter(seqPrefix+"urlregexp_"+Integer.toString(j));
String regexpDescription = variableContext.getParameter(seqPrefix+"urlregexpdesc_"+Integer.toString(j));
String reorder = variableContext.getParameter(seqPrefix+"urlregexpreorder_"+Integer.toString(j));
String javaSession = variableContext.getParameter(seqPrefix+"urlregexpjava_"+Integer.toString(j));
String aspSession = variableContext.getParameter(seqPrefix+"urlregexpasp_"+Integer.toString(j));
String phpSession = variableContext.getParameter(seqPrefix+"urlregexpphp_"+Integer.toString(j));
String bvSession = variableContext.getParameter(seqPrefix+"urlregexpbv_"+Integer.toString(j));
SpecificationNode newSn = new SpecificationNode(RSSConfig.NODE_URLSPEC);
newSn.setAttribute(RSSConfig.ATTR_REGEXP,regexp);
if (regexpDescription != null && regexpDescription.length() > 0)
newSn.setAttribute(RSSConfig.VALUE_DESCRIPTION,regexpDescription);
if (reorder != null && reorder.length() > 0)
newSn.setAttribute(RSSConfig.ATTR_REORDER,reorder);
if (javaSession != null && javaSession.length() > 0)
newSn.setAttribute(RSSConfig.ATTR_JAVASESSIONREMOVAL,javaSession);
if (aspSession != null && aspSession.length() > 0)
newSn.setAttribute(RSSConfig.ATTR_ASPSESSIONREMOVAL,aspSession);
if (phpSession != null && phpSession.length() > 0)
newSn.setAttribute(RSSConfig.ATTR_PHPSESSIONREMOVAL,phpSession);
if (bvSession != null && bvSession.length() > 0)
newSn.setAttribute(RSSConfig.ATTR_BVSESSIONREMOVAL,bvSession);
ds.addChild(ds.getChildCount(),newSn);
}
j++;
}
if (operation.equals("Add"))
{
String regexp = variableContext.getParameter(seqPrefix+"urlregexp");
String regexpDescription = variableContext.getParameter(seqPrefix+"urlregexpdesc");
String reorder = variableContext.getParameter(seqPrefix+"urlregexpreorder");
String javaSession = variableContext.getParameter(seqPrefix+"urlregexpjava");
String aspSession = variableContext.getParameter(seqPrefix+"urlregexpasp");
String phpSession = variableContext.getParameter(seqPrefix+"urlregexpphp");
String bvSession = variableContext.getParameter(seqPrefix+"urlregexpbv");
// Add a new node at the end
SpecificationNode newSn = new SpecificationNode(RSSConfig.NODE_URLSPEC);
newSn.setAttribute(RSSConfig.ATTR_REGEXP,regexp);
if (regexpDescription != null && regexpDescription.length() > 0)
newSn.setAttribute(RSSConfig.VALUE_DESCRIPTION,regexpDescription);
if (reorder != null && reorder.length() > 0)
newSn.setAttribute(RSSConfig.ATTR_REORDER,reorder);
if (javaSession != null && javaSession.length() > 0)
newSn.setAttribute(RSSConfig.ATTR_JAVASESSIONREMOVAL,javaSession);
if (aspSession != null && aspSession.length() > 0)
newSn.setAttribute(RSSConfig.ATTR_ASPSESSIONREMOVAL,aspSession);
if (phpSession != null && phpSession.length() > 0)
newSn.setAttribute(RSSConfig.ATTR_PHPSESSIONREMOVAL,phpSession);
if (bvSession != null && bvSession.length() > 0)
newSn.setAttribute(RSSConfig.ATTR_BVSESSIONREMOVAL,bvSession);
ds.addChild(ds.getChildCount(),newSn);
}
}
// Get the exclusions
String exclusions = variableContext.getParameter(seqPrefix+"exclusions");
if (exclusions != null)
{
// Delete existing exclusions record first
int i = 0;
while (i < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(i);
if (sn.getType().equals(RSSConfig.NODE_EXCLUDES))
ds.removeChild(i);
else
i++;
}
SpecificationNode cn = new SpecificationNode(RSSConfig.NODE_EXCLUDES);
cn.setValue(exclusions);
ds.addChild(ds.getChildCount(),cn);
}
// Read the feed timeout, if present
String feedTimeoutValue = variableContext.getParameter(seqPrefix+"feedtimeout");
if (feedTimeoutValue != null && feedTimeoutValue.length() > 0)
{
int j = 0;
while (j < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(j);
if (sn.getType().equals(RSSConfig.NODE_FEEDTIMEOUT))
ds.removeChild(j);
else
j++;
}
SpecificationNode node = new SpecificationNode(RSSConfig.NODE_FEEDTIMEOUT);
node.setAttribute(RSSConfig.ATTR_VALUE,feedTimeoutValue);
ds.addChild(ds.getChildCount(),node);
}
// Read the feed refetch interval, if present
String feedRefetchValue = variableContext.getParameter(seqPrefix+"feedrefetch");
if (feedRefetchValue != null && feedRefetchValue.length() > 0)
{
int j = 0;
while (j < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(j);
if (sn.getType().equals(RSSConfig.NODE_FEEDRESCAN))
ds.removeChild(j);
else
j++;
}
SpecificationNode node = new SpecificationNode(RSSConfig.NODE_FEEDRESCAN);
node.setAttribute(RSSConfig.ATTR_VALUE,feedRefetchValue);
ds.addChild(ds.getChildCount(),node);
}
// Read the minimum feed refetch interval, if present
String minFeedRefetchValue = variableContext.getParameter(seqPrefix+"minfeedrefetch");
if (minFeedRefetchValue != null && minFeedRefetchValue.length() > 0)
{
int j = 0;
while (j < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(j);
if (sn.getType().equals(RSSConfig.NODE_MINFEEDRESCAN))
ds.removeChild(j);
else
j++;
}
SpecificationNode node = new SpecificationNode(RSSConfig.NODE_MINFEEDRESCAN);
node.setAttribute(RSSConfig.ATTR_VALUE,minFeedRefetchValue);
ds.addChild(ds.getChildCount(),node);
}
// Read the bad feed refetch interval (which is allowed to be null)
String badFeedRefetchValuePresent = variableContext.getParameter(seqPrefix+"badfeedrefetch_present");
if (badFeedRefetchValuePresent != null && badFeedRefetchValuePresent.length() > 0)
{
String badFeedRefetchValue = variableContext.getParameter(seqPrefix+"badfeedrefetch");
int k = 0;
while (k < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(k);
if (sn.getType().equals(RSSConfig.NODE_BADFEEDRESCAN))
ds.removeChild(k);
else
k++;
}
if (badFeedRefetchValue != null && badFeedRefetchValue.length() > 0)
{
SpecificationNode node = new SpecificationNode(RSSConfig.NODE_BADFEEDRESCAN);
node.setAttribute(RSSConfig.ATTR_VALUE,badFeedRefetchValue);
ds.addChild(ds.getChildCount(),node);
}
}
// Read the dechromed mode
String dechromedMode = variableContext.getParameter(seqPrefix+"dechromedmode");
if (dechromedMode != null && dechromedMode.length() > 0)
{
int j = 0;
while (j < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(j);
if (sn.getType().equals(RSSConfig.NODE_DECHROMEDMODE))
ds.removeChild(j);
else
j++;
}
SpecificationNode node = new SpecificationNode(RSSConfig.NODE_DECHROMEDMODE);
node.setAttribute(RSSConfig.ATTR_MODE,dechromedMode);
ds.addChild(ds.getChildCount(),node);
}
// Read the chromed mode
String chromedMode = variableContext.getParameter(seqPrefix+"chromedmode");
if (chromedMode != null && chromedMode.length() > 0)
{
int j = 0;
while (j < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(j);
if (sn.getType().equals(RSSConfig.NODE_CHROMEDMODE))
ds.removeChild(j);
else
j++;
}
SpecificationNode node = new SpecificationNode(RSSConfig.NODE_CHROMEDMODE);
node.setAttribute(RSSConfig.ATTR_MODE,chromedMode);
ds.addChild(ds.getChildCount(),node);
}
// Now, do whatever action we were told to do.
String rssop = variableContext.getParameter(seqPrefix+"rssop");
if (rssop != null && rssop.equals("Add"))
{
// Add a match to the end
String match = variableContext.getParameter(seqPrefix+"rssmatch");
String map = variableContext.getParameter(seqPrefix+"rssmap");
SpecificationNode node = new SpecificationNode(RSSConfig.NODE_MAP);
node.setAttribute(RSSConfig.ATTR_MATCH,match);
node.setAttribute(RSSConfig.ATTR_MAP,map);
ds.addChild(ds.getChildCount(),node);
}
else if (rssop != null && rssop.equals("Delete"))
{
int index = Integer.parseInt(variableContext.getParameter(seqPrefix+"rssindex"));
int j = 0;
while (j < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(j);
if (sn.getType().equals(RSSConfig.NODE_MAP))
{
if (index == 0)
{
ds.removeChild(j);
break;
}
index--;
}
j++;
}
}
String xc = variableContext.getParameter(seqPrefix+"tokencount");
if (xc != null)
{
// Delete all tokens first
int i = 0;
while (i < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(i);
if (sn.getType().equals(RSSConfig.NODE_ACCESS))
ds.removeChild(i);
else
i++;
}
int accessCount = Integer.parseInt(xc);
i = 0;
while (i < accessCount)
{
String accessDescription = "_"+Integer.toString(i);
String accessOpName = seqPrefix+"accessop"+accessDescription;
xc = variableContext.getParameter(accessOpName);
if (xc != null && xc.equals("Delete"))
{
// Next row
i++;
continue;
}
// Get the stuff we need
String accessSpec = variableContext.getParameter(seqPrefix+"spectoken"+accessDescription);
SpecificationNode node = new SpecificationNode(RSSConfig.NODE_ACCESS);
node.setAttribute(RSSConfig.ATTR_TOKEN,accessSpec);
ds.addChild(ds.getChildCount(),node);
i++;
}
String op = variableContext.getParameter(seqPrefix+"accessop");
if (op != null && op.equals("Add"))
{
String accessspec = variableContext.getParameter(seqPrefix+"spectoken");
SpecificationNode node = new SpecificationNode(RSSConfig.NODE_ACCESS);
node.setAttribute(RSSConfig.ATTR_TOKEN,accessspec);
ds.addChild(ds.getChildCount(),node);
}
}
return null;
}