in connectors/sharepoint/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharepoint/SharePointRepository.java [3018:3578]
public String processSpecificationPost(IPostParameters variableContext, Locale locale, Specification ds,
int connectionSequenceNumber)
throws ManifoldCFException
{
String seqPrefix = "s"+connectionSequenceNumber+"_";
// Remove old-style rules, but only if the information would not be lost
if (variableContext.getParameter(seqPrefix+"specpathcount") != null && variableContext.getParameter(seqPrefix+"metapathcount") != null)
{
int i = 0;
while (i < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(i);
if (sn.getType().equals("startpoint"))
ds.removeChild(i);
else
i++;
}
}
String x = variableContext.getParameter(seqPrefix+"specpathcount");
if (x != null)
{
// Delete all path rule entries first
int i = 0;
while (i < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(i);
if (sn.getType().equals("pathrule"))
ds.removeChild(i);
else
i++;
}
// Find out how many children were sent
int pathCount = Integer.parseInt(x);
// Gather up these
i = 0;
while (i < pathCount)
{
String pathDescription = "_"+Integer.toString(i);
String pathOpName = seqPrefix+"specop"+pathDescription;
x = variableContext.getParameter(pathOpName);
if (x != null && x.equals("Delete"))
{
// Skip to the next
i++;
continue;
}
// Get the stored information for this rule.
String path = variableContext.getParameter(seqPrefix+"specpath"+pathDescription);
String type = variableContext.getParameter(seqPrefix+"spectype"+pathDescription);
String action = variableContext.getParameter(seqPrefix+"specflav"+pathDescription);
SpecificationNode node = new SpecificationNode("pathrule");
node.setAttribute("match",path);
node.setAttribute("action",action);
node.setAttribute("type",type);
// If there was an insert operation, do it now
if (x != null && x.equals("Insert Here"))
{
// The global parameters are what are used to create the rule
path = variableContext.getParameter(seqPrefix+"specpath");
type = variableContext.getParameter(seqPrefix+"spectype");
action = variableContext.getParameter(seqPrefix+"specflavor");
SpecificationNode sn = new SpecificationNode("pathrule");
sn.setAttribute("match",path);
sn.setAttribute("action",action);
sn.setAttribute("type",type);
ds.addChild(ds.getChildCount(),sn);
}
ds.addChild(ds.getChildCount(),node);
i++;
}
// See if there's a global path rule operation
String op = variableContext.getParameter(seqPrefix+"specop");
if (op != null)
{
if (op.equals("Add"))
{
String match = variableContext.getParameter(seqPrefix+"specpath");
String action = variableContext.getParameter(seqPrefix+"specflavor");
String type = variableContext.getParameter(seqPrefix+"spectype");
SpecificationNode node = new SpecificationNode("pathrule");
node.setAttribute("match",match);
node.setAttribute("action",action);
node.setAttribute("type",type);
ds.addChild(ds.getChildCount(),node);
}
}
// See if there's a global pathbuilder operation
String pathop = variableContext.getParameter(seqPrefix+"specpathop");
if (pathop != null)
{
if (pathop.equals("Reset"))
{
currentContext.save(seqPrefix+"specpath","/");
currentContext.save(seqPrefix+"specpathstate","site");
currentContext.save(seqPrefix+"specpathlibrary",null);
}
else if (pathop.equals("AppendSite"))
{
String path = variableContext.getParameter(seqPrefix+"specpath");
String addon = variableContext.getParameter(seqPrefix+"specsite");
if (addon != null && addon.length() > 0)
{
if (path.equals("/"))
path = path + addon;
else
path = path + "/" + addon;
}
currentContext.save(seqPrefix+"specpath",path);
currentContext.save(seqPrefix+"specpathstate","site");
currentContext.save(seqPrefix+"specpathlibrary",null);
}
else if (pathop.equals("AppendLibrary"))
{
String path = variableContext.getParameter(seqPrefix+"specpath");
String addon = variableContext.getParameter(seqPrefix+"speclibrary");
if (addon != null && addon.length() > 0)
{
if (path.equals("/"))
path = path + addon;
else
path = path + "/" + addon;
currentContext.save(seqPrefix+"specpathstate","library");
currentContext.save(seqPrefix+"specpathlibrary",path);
}
currentContext.save(seqPrefix+"specpath",path);
}
else if (pathop.equals("AppendList"))
{
String path = variableContext.getParameter(seqPrefix+"specpath");
String addon = variableContext.getParameter(seqPrefix+"speclist");
if (addon != null && addon.length() > 0)
{
if (path.equals("/"))
path = path + addon;
else
path = path + "/" + addon;
currentContext.save(seqPrefix+"specpathstate","list");
currentContext.save(seqPrefix+"specpathlibrary",path);
}
currentContext.save(seqPrefix+"specpath",path);
}
else if (pathop.equals("AppendText"))
{
String path = variableContext.getParameter(seqPrefix+"specpath");
String library = variableContext.getParameter(seqPrefix+"specpathlibrary");
String addon = variableContext.getParameter(seqPrefix+"specmatch");
if (addon != null && addon.length() > 0)
{
if (path.equals("/"))
path = path + addon;
else
path = path + "/" + addon;
currentContext.save(seqPrefix+"specpathstate","unknown");
}
currentContext.save(seqPrefix+"specpath",path);
currentContext.save(seqPrefix+"specpathlibrary",library);
}
else if (pathop.equals("Remove"))
{
// Strip off end
String path = variableContext.getParameter(seqPrefix+"specpath");
int index = path.lastIndexOf("/");
path = path.substring(0,index);
if (path.length() == 0)
path = "/";
currentContext.save(seqPrefix+"specpath",path);
// Now, adjust state.
String pathState = variableContext.getParameter(seqPrefix+"specpathstate");
if (pathState.equals("library") || pathState.equals("list"))
pathState = "site";
currentContext.save(seqPrefix+"specpathstate",pathState);
}
}
}
x = variableContext.getParameter(seqPrefix+"metapathcount");
if (x != null)
{
// Delete all metadata rule entries first
int i = 0;
while (i < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(i);
if (sn.getType().equals("metadatarule"))
ds.removeChild(i);
else
i++;
}
// Find out how many children were sent
int pathCount = Integer.parseInt(x);
// Gather up these
i = 0;
while (i < pathCount)
{
String pathDescription = "_"+Integer.toString(i);
String pathOpName = seqPrefix+"metaop"+pathDescription;
x = variableContext.getParameter(pathOpName);
if (x != null && x.equals("Delete"))
{
// Skip to the next
i++;
continue;
}
// Get the stored information for this rule.
String path = variableContext.getParameter(seqPrefix+"metapath"+pathDescription);
String action = variableContext.getParameter(seqPrefix+"metaflav"+pathDescription);
String allmetadata = variableContext.getParameter(seqPrefix+"metaall"+pathDescription);
String[] metadataFields = variableContext.getParameterValues(seqPrefix+"metafields"+pathDescription);
SpecificationNode node = new SpecificationNode("metadatarule");
node.setAttribute("match",path);
node.setAttribute("action",action);
if (action.equals("include"))
{
if (allmetadata != null)
node.setAttribute("allmetadata",allmetadata);
if (metadataFields != null)
{
int j = 0;
while (j < metadataFields.length)
{
SpecificationNode sn = new SpecificationNode("metafield");
sn.setAttribute("value",metadataFields[j]);
node.addChild(j++,sn);
}
}
}
if (x != null && x.equals("Insert Here"))
{
// Insert the new global rule information now
path = variableContext.getParameter(seqPrefix+"metapath");
action = variableContext.getParameter(seqPrefix+"metaflavor");
allmetadata = variableContext.getParameter(seqPrefix+"metaall");
metadataFields = variableContext.getParameterValues(seqPrefix+"metafields");
SpecificationNode sn = new SpecificationNode("metadatarule");
sn.setAttribute("match",path);
sn.setAttribute("action",action);
if (action.equals("include"))
{
if (allmetadata != null)
node.setAttribute("allmetadata",allmetadata);
if (metadataFields != null)
{
int j = 0;
while (j < metadataFields.length)
{
SpecificationNode node2 = new SpecificationNode("metafield");
node2.setAttribute("value",metadataFields[j]);
sn.addChild(j++,node2);
}
}
}
ds.addChild(ds.getChildCount(),sn);
}
ds.addChild(ds.getChildCount(),node);
i++;
}
// See if there's a global path rule operation
String op = variableContext.getParameter(seqPrefix+"metaop");
if (op != null)
{
if (op.equals("Add"))
{
String match = variableContext.getParameter(seqPrefix+"metapath");
String action = variableContext.getParameter(seqPrefix+"metaflavor");
SpecificationNode node = new SpecificationNode("metadatarule");
node.setAttribute("match",match);
node.setAttribute("action",action);
if (action.equals("include"))
{
String allmetadata = variableContext.getParameter(seqPrefix+"metaall");
String[] metadataFields = variableContext.getParameterValues(seqPrefix+"metafields");
if (allmetadata != null)
node.setAttribute("allmetadata",allmetadata);
if (metadataFields != null)
{
int j = 0;
while (j < metadataFields.length)
{
SpecificationNode sn = new SpecificationNode("metafield");
sn.setAttribute("value",metadataFields[j]);
node.addChild(j++,sn);
}
}
}
ds.addChild(ds.getChildCount(),node);
}
}
// See if there's a global pathbuilder operation
String pathop = variableContext.getParameter(seqPrefix+"metapathop");
if (pathop != null)
{
if (pathop.equals("Reset"))
{
currentContext.save(seqPrefix+"metapath","/");
currentContext.save(seqPrefix+"metapathstate","site");
currentContext.save(seqPrefix+"metapathlibrary",null);
}
else if (pathop.equals("AppendSite"))
{
String path = variableContext.getParameter(seqPrefix+"metapath");
String addon = variableContext.getParameter(seqPrefix+"metasite");
if (addon != null && addon.length() > 0)
{
if (path.equals("/"))
path = path + addon;
else
path = path + "/" + addon;
}
currentContext.save(seqPrefix+"metapath",path);
currentContext.save(seqPrefix+"metapathstate","site");
currentContext.save(seqPrefix+"metapathlibrary",null);
}
else if (pathop.equals("AppendLibrary"))
{
String path = variableContext.getParameter(seqPrefix+"metapath");
String addon = variableContext.getParameter(seqPrefix+"metalibrary");
if (addon != null && addon.length() > 0)
{
if (path.equals("/"))
path = path + addon;
else
path = path + "/" + addon;
currentContext.save(seqPrefix+"metapathstate","library");
currentContext.save(seqPrefix+"metapathlibrary",path);
}
currentContext.save(seqPrefix+"metapath",path);
}
else if (pathop.equals("AppendList"))
{
String path = variableContext.getParameter(seqPrefix+"metapath");
String addon = variableContext.getParameter(seqPrefix+"metalist");
if (addon != null && addon.length() > 0)
{
if (path.equals("/"))
path = path + addon;
else
path = path + "/" + addon;
currentContext.save(seqPrefix+"metapathstate","list");
currentContext.save(seqPrefix+"metapathlibrary",path);
// Automatically add on wildcard for list item part of the match
path += "/*";
}
currentContext.save(seqPrefix+"metapath",path);
}
else if (pathop.equals("AppendText"))
{
String path = variableContext.getParameter(seqPrefix+"metapath");
String library = variableContext.getParameter(seqPrefix+"metapathlibrary");
String addon = variableContext.getParameter(seqPrefix+"metamatch");
if (addon != null && addon.length() > 0)
{
if (path.equals("/"))
path = path + addon;
else
path = path + "/" + addon;
if (library != null)
currentContext.save(seqPrefix+"metapathstate","file");
else
currentContext.save(seqPrefix+"metapathstate","unknown");
}
currentContext.save(seqPrefix+"metapath",path);
currentContext.save(seqPrefix+"metapathlibrary",library);
}
else if (pathop.equals("Remove"))
{
String pathState = variableContext.getParameter(seqPrefix+"metapathstate");
String path;
if (pathState.equals("file"))
{
pathState = "library";
path = variableContext.getParameter(seqPrefix+"metapathlibrary");
}
else if (pathState.equals("list") || pathState.equals("library"))
{
pathState = "site";
path = variableContext.getParameter(seqPrefix+"metapathlibrary");
int index = path.lastIndexOf("/");
path = path.substring(0,index);
if (path.length() == 0)
path = "/";
currentContext.save(seqPrefix+"metapathlibrary",null);
}
else
{
path = variableContext.getParameter(seqPrefix+"metapath");
int index = path.lastIndexOf("/");
path = path.substring(0,index);
if (path.length() == 0)
path = "/";
}
currentContext.save(seqPrefix+"metapathstate",pathState);
currentContext.save(seqPrefix+"metapath",path);
}
}
}
String xc = variableContext.getParameter(seqPrefix+"specsecurity");
if (xc != null)
{
// Delete all security entries first
int i = 0;
while (i < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(i);
if (sn.getType().equals("security"))
ds.removeChild(i);
else
i++;
}
SpecificationNode node = new SpecificationNode("security");
node.setAttribute("value",xc);
ds.addChild(ds.getChildCount(),node);
}
xc = variableContext.getParameter(seqPrefix+"tokencount");
if (xc != null)
{
// Delete all file specs first
int i = 0;
while (i < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(i);
if (sn.getType().equals("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("access");
node.setAttribute("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("access");
node.setAttribute("token",accessspec);
ds.addChild(ds.getChildCount(),node);
}
}
xc = variableContext.getParameter(seqPrefix+"specpathnameattribute");
if (xc != null)
{
// Delete old one
int i = 0;
while (i < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(i);
if (sn.getType().equals("pathnameattribute"))
ds.removeChild(i);
else
i++;
}
if (xc.length() > 0)
{
SpecificationNode node = new SpecificationNode("pathnameattribute");
node.setAttribute("value",xc);
ds.addChild(ds.getChildCount(),node);
}
}
xc = variableContext.getParameter(seqPrefix+"specmappingcount");
if (xc != null)
{
// Delete old spec
int i = 0;
while (i < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(i);
if (sn.getType().equals("pathmap"))
ds.removeChild(i);
else
i++;
}
// Now, go through the data and assemble a new list.
int mappingCount = Integer.parseInt(xc);
// Gather up these
i = 0;
while (i < mappingCount)
{
String pathDescription = "_"+Integer.toString(i);
String pathOpName = seqPrefix+"specmappingop"+pathDescription;
xc = variableContext.getParameter(pathOpName);
if (xc != null && xc.equals("Delete"))
{
// Skip to the next
i++;
continue;
}
// Inserts won't happen until the very end
String match = variableContext.getParameter(seqPrefix+"specmatch"+pathDescription);
String replace = variableContext.getParameter(seqPrefix+"specreplace"+pathDescription);
SpecificationNode node = new SpecificationNode("pathmap");
node.setAttribute("match",match);
node.setAttribute("replace",replace);
ds.addChild(ds.getChildCount(),node);
i++;
}
// Check for add
xc = variableContext.getParameter(seqPrefix+"specmappingop");
if (xc != null && xc.equals("Add"))
{
String match = variableContext.getParameter(seqPrefix+"specmatch");
String replace = variableContext.getParameter(seqPrefix+"specreplace");
SpecificationNode node = new SpecificationNode("pathmap");
node.setAttribute("match",match);
node.setAttribute("replace",replace);
ds.addChild(ds.getChildCount(),node);
}
}
return null;
}