Author: schuch
Date: Fri Sep 13 09:24:32 2019
New Revision: 1866889
URL: http://svn.apache.org/viewvc?rev=1866889&view=rev
Log:
make the data collection configurable
Modified:
manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/csws/CswsConnector.java
manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/csws/CswsParameters.java
manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/csws/CswsSession.java
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_en_US.properties
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_es_ES.properties
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_fr_FR.properties
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_ja_JP.properties
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_zh_CN.properties
manifoldcf/trunk/connectors/csws/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/csws/editConfiguration.js
manifoldcf/trunk/connectors/csws/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/csws/editConfiguration_Server.html
Modified:
manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/csws/CswsConnector.java
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/csws/CswsConnector.java?rev=1866889&r1=1866888&r2=1866889&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/csws/CswsConnector.java
(original)
+++
manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/csws/CswsConnector.java
Fri Sep 13 09:24:32 2019
@@ -171,12 +171,12 @@ public class CswsConnector extends org.a
// Data required for maintaining csws connection
private CswsSession cswsSession = null;
-
+
// Workspace Nodes (computed once and cached); should contain both
enterprise and category workspaces
private Map<String, Node> workspaceNodes = new HashMap<>();
private Long enterpriseWSID = null;
private Long categoryWSID = null;
-
+
// Parameter values we need
private String serverProtocol = null;
private String serverName = null;
@@ -188,6 +188,7 @@ public class CswsConnector extends org.a
private String contentServiceServicePath = null;
private String memberServiceServicePath = null;
private String searchServiceServicePath = null;
+ private String dataCollection = null;
private String serverHTTPNTLMDomain = null;
private String serverHTTPNTLMUsername = null;
private String serverHTTPNTLMPassword = null;
@@ -202,7 +203,7 @@ public class CswsConnector extends org.a
// Connection management
private HttpClientConnectionManager connectionManager = null;
private HttpClient httpClient = null;
-
+
// Base path for viewing
private String viewBasePath = null;
@@ -278,11 +279,11 @@ public class CswsConnector extends org.a
for (final String workspaceName : workspaceNames) {
workspaceNodes.put(workspaceName,
cswsSession.getRootNode(workspaceName));
}
-
+
if (enterpriseWSName == null || categoryWSName == null) {
throw new ManifoldCFException("Could not locate either enterprise or
category workspaces");
}
-
+
enterpriseWSID = workspaceNodes.get(enterpriseWSName).getID();
categoryWSID = workspaceNodes.get(categoryWSName).getID();
@@ -312,7 +313,7 @@ public class CswsConnector extends org.a
throw new RuntimeException("Unrecognized exception type:
"+thr.getClass().getName()+": "+thr.getMessage(),thr);
}
}
-
+
}
/** Get the bin name string for a document identifier. The bin name
describes the queue to which the
@@ -353,6 +354,7 @@ public class CswsConnector extends org.a
contentServiceServicePath =
params.getParameter(CswsParameters.contentServicePath);
memberServiceServicePath =
params.getParameter(CswsParameters.memberServicePath);
searchServiceServicePath =
params.getParameter(CswsParameters.searchServicePath);
+ dataCollection = params.getParameter(CswsParameters.dataCollection);
serverHTTPNTLMDomain =
params.getParameter(CswsParameters.serverHTTPNTLMDomain);
serverHTTPNTLMUsername =
params.getParameter(CswsParameters.serverHTTPNTLMUsername);
serverHTTPNTLMPassword =
params.getObfuscatedParameter(CswsParameters.serverHTTPNTLMPassword);
@@ -362,12 +364,12 @@ public class CswsConnector extends org.a
if (serverProtocol == null || serverProtocol.length() == 0)
serverProtocol = "http";
-
+
if (serverPortString == null)
serverPort = 2099;
else
serverPort = new Integer(serverPortString).intValue();
-
+
if (serverHTTPNTLMDomain != null && serverHTTPNTLMDomain.length() == 0)
serverHTTPNTLMDomain = null;
if (serverHTTPNTLMUsername == null || serverHTTPNTLMUsername.length() ==
0)
@@ -375,7 +377,7 @@ public class CswsConnector extends org.a
serverHTTPNTLMUsername = null;
serverHTTPNTLMPassword = null;
}
-
+
// Set up server ssl if indicated
String serverHTTPSKeystoreData =
params.getParameter(CswsParameters.serverHTTPSKeystore);
if (serverHTTPSKeystoreData != null)
@@ -383,7 +385,7 @@ public class CswsConnector extends org.a
// View parameters
// View parameter processing
-
+
if (viewProtocol == null || viewProtocol.length() == 0)
{
if (serverProtocol == null)
@@ -428,7 +430,7 @@ public class CswsConnector extends org.a
if (viewCgiPath == null || viewCgiPath.length() == 0)
viewCgiPath = "";
-
+
if (viewServerName == null || viewServerName.length() == 0)
viewServerName = serverName;
@@ -437,7 +439,7 @@ public class CswsConnector extends org.a
hasSessionParameters = true;
}
}
-
+
protected void getSession()
throws ManifoldCFException, ServiceInterruption
{
@@ -473,7 +475,7 @@ public class CswsConnector extends org.a
.setSoTimeout(socketTimeout)
.build());
connectionManager = poolingConnectionManager;
-
+
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
// Set up authentication to use
@@ -515,7 +517,7 @@ public class CswsConnector extends org.a
}
// Construct a new csws session object for setting up this session
- cswsSession = new CswsSession(serverUsername, serverPassword,
serverHTTPSKeystore, 1000L * 60L * 15L,
+ cswsSession = new CswsSession(serverUsername, serverPassword,
serverHTTPSKeystore, 1000L * 60L * 15L,
authenticationServiceURL, documentManagementServiceURL,
contentServiceServiceURL, memberServiceServiceURL, searchServiceServiceURL);
final GetSessionThread t = new GetSessionThread();
@@ -610,7 +612,7 @@ public class CswsConnector extends org.a
}
}
}
-
+
/** This method is called to assess whether to count this connector instance
should
* actually be counted as being connected.
*@return true if the connector instance is actually connected.
@@ -642,7 +644,7 @@ public class CswsConnector extends org.a
contentServiceServicePath = null;
memberServiceServicePath = null;
searchServiceServicePath = null;
-
+
serverHTTPNTLMDomain = null;
serverHTTPNTLMUsername = null;
serverHTTPNTLMPassword = null;
@@ -658,7 +660,7 @@ public class CswsConnector extends org.a
workspaceNodes.clear();
enterpriseWSID = null;
categoryWSID = null;
-
+
if (connectionManager != null)
{
connectionManager.shutdown();
@@ -744,7 +746,7 @@ public class CswsConnector extends org.a
else if (command.startsWith("folders/"))
{
String path = command.substring("folders/".length());
-
+
try
{
String[] folders = getChildFolderNames(path);
@@ -821,7 +823,7 @@ public class CswsConnector extends org.a
return super.requestInfo(output,command);
return true;
}
-
+
/** Queue "seed" documents. Seed documents are the starting places for
crawling activity. Documents
* are seeded when this method calls appropriate methods in the passed in
ISeedingActivity object.
*
@@ -857,7 +859,7 @@ public class CswsConnector extends org.a
Logging.connectors.debug("Csws: addSeedDocuments");
getSession();
CswsContext llc = new CswsContext();
-
+
// First, grab the root object
ObjectInformation rootValue = llc.getObjectInformation(enterpriseWSID);
if (!rootValue.exists())
@@ -867,9 +869,9 @@ public class CswsConnector extends org.a
throw new ServiceInterruption("Service interruption during seeding",new
ManifoldCFException("Could not looking root workspace object during
seeding"),System.currentTimeMillis()+60000L,
System.currentTimeMillis()+600000L,-1,true);
}
-
+
Logging.connectors.debug("Csws: Picking up starting paths");
-
+
// Walk the specification for the "startpoint" types. Amalgamate these
into a list of strings.
// Presume that all roots are startpoint nodes
boolean doUserWorkspaces = false;
@@ -907,7 +909,7 @@ public class CswsConnector extends org.a
else if (value != null && value.equals("false"))
doUserWorkspaces = false;
}
-
+
if (doUserWorkspaces)
{
// Do ListUsers and enumerate the values.
@@ -916,7 +918,7 @@ public class CswsConnector extends org.a
Logging.connectors.debug("Csws: Going through user workspaces");
t.start();
final PageHandle resultPageHandle = t.finishUp();
-
+
// Now walk through the results and add them
while (true) {
final GetUserResultsThread t2 = new
GetUserResultsThread(resultPageHandle);
@@ -927,15 +929,15 @@ public class CswsConnector extends org.a
// We're done
break;
}
-
+
for (final Member m : childrenDocs)
{
final long childID = m.getID();
-
+
// Skip admin user
if (childID == 1000L || childID == 1001L)
continue;
-
+
if (Logging.connectors.isDebugEnabled())
Logging.connectors.debug("Csws: Found a user: ID="+childID);
@@ -958,7 +960,7 @@ public class CswsConnector extends org.a
}
Logging.connectors.debug("Csws: Done user workspaces");
}
-
+
return "";
}
@@ -980,13 +982,13 @@ public class CswsConnector extends org.a
IProcessActivity activities, int jobMode, boolean usesDefaultAuthority)
throws ManifoldCFException, ServiceInterruption
{
-
+
// Initialize a "livelink context", to minimize the number of objects we
have to fetch
CswsContext llc = new CswsContext();
// Initialize the table of catid's.
// Keeping this around will allow us to benefit from batching of documents.
MetadataDescription desc = new MetadataDescription(llc);
-
+
// First, process the spec to get the string we tack on
SystemMetadataDescription sDesc = new SystemMetadataDescription(llc,spec);
@@ -1035,12 +1037,12 @@ public class CswsConnector extends org.a
// Read the document or folder metadata, which includes the ModifyDate
String docID = documentIdentifier;
-
+
boolean isFolder = docID.startsWith("F");
long objID = new Long(docID.substring(1)).longValue();
getSession();
-
+
final ObjectInformation value = llc.getObjectInformation(objID);
if (!value.exists())
{
@@ -1049,7 +1051,7 @@ public class CswsConnector extends org.a
activities.deleteDocument(documentIdentifier);
continue;
}
-
+
// Make sure we have permission to see the object's contents
final NodePermissions permissions = value.getPermissions();
if (!permissions.isSeeContentsPermission())
@@ -1071,9 +1073,9 @@ public class CswsConnector extends org.a
activities.deleteDocument(documentIdentifier);
continue;
}
-
+
// We were able to get rights, so object still exists.
-
+
if (isFolder)
{
// === Csws folder ===
@@ -1082,8 +1084,8 @@ public class CswsConnector extends org.a
if (Logging.connectors.isDebugEnabled()) {
Logging.connectors.debug("Csws: Processing folder "+objID);
}
-
- final ListObjectsThread t = new ListObjectsThread(objID, new
String[]{"OTDataID", "OTSubTypeName", "OTName"}, filterString, "OTDataID");
+
+ final ListObjectsThread t = new ListObjectsThread(objID, new
String[]{"OTDataID", "OTSubTypeName", "OTName"}, dataCollection, filterString,
"OTDataID");
t.start();
final List<? extends SGraph> childrenDocs;
try {
@@ -1098,15 +1100,15 @@ public class CswsConnector extends org.a
final long childID = getID(childDoc, 0);
final String subType = getString(childDoc, 2);
final String name = getString(childDoc, 1);
-
+
if (Logging.connectors.isDebugEnabled())
{
Logging.connectors.debug("Csws: Found a child of folder "+objID+"
: ID="+childID);
}
-
+
// All we need to know is whether the child is a container or not,
and there is a way to do that directly from the node
final boolean childIsFolder = subType.equals("Folder") ||
subType.equals("Project") || subType.equals("CompoundDocument");
-
+
// If it's a folder, we just let it through for now
if (!childIsFolder)
{
@@ -1151,14 +1153,14 @@ public class CswsConnector extends org.a
else
{
// === Csws document ===
-
+
// The version string includes the following:
// 1) The modify date for the document
// 2) The rights for the document, ordered (which can change without
changing the ModifyDate field)
// 3) The requested metadata fields (category and attribute, ordered)
for the document
//
// The document identifiers are object id's.
-
+
StringBuilder sb = new StringBuilder();
String[] categoryPaths;
@@ -1179,10 +1181,10 @@ public class CswsConnector extends org.a
categoryPaths = specifiedMetadataAttributes;
sb.append(metadataString);
}
-
+
String[] actualAcls;
String[] denyAcls;
-
+
String denyAcl;
if (acls != null && acls.length == 0)
{
@@ -1208,7 +1210,7 @@ public class CswsConnector extends org.a
// If security is on, no deny acl is needed for the local authority,
since the repository does not support "deny". But this was added
// to be really really really sure.
denyAcl = defaultAuthorityDenyToken;
-
+
}
else if (acls != null && acls.length > 0)
{
@@ -1245,17 +1247,17 @@ public class CswsConnector extends org.a
// have to worry about it changing. No need, therefore, to parse it
during
// processDocuments.
sb.append("=").append(pathNameAttributeVersion);
-
- // Tack on ingestCgiPath, to insulate us against changes to the
repository connection setup.
+
+ // Tack on ingestCgiPath, to insulate us against changes to the
repository connection setup.
sb.append("_").append(viewBasePath);
String versionString = sb.toString();
if (Logging.connectors.isDebugEnabled())
Logging.connectors.debug("Csws: Successfully calculated version
string for document "+objID+" : '"+versionString+"'");
-
+
if (!activities.checkDocumentNeedsReindexing(documentIdentifier,
versionString))
continue;
-
+
// Index the document
if (Logging.connectors.isDebugEnabled())
Logging.connectors.debug("Csws: Processing document "+objID);
@@ -1272,7 +1274,7 @@ public class CswsConnector extends org.a
// Index it
ingestFromCsws(llc, documentIdentifier, versionString, actualAcls,
denyAcls, rights.getOwnerRight().getRightID(), categoryPaths, activities, desc,
sDesc);
-
+
if (Logging.connectors.isDebugEnabled())
Logging.connectors.debug("Csws: Done processing document "+objID);
}
@@ -1283,7 +1285,7 @@ public class CswsConnector extends org.a
final String value = getString(sg, nodeIndex);
return new Long(value).longValue();
}
-
+
private static String getString(final SGraph sg, final int nodeIndex) {
final List<? extends SNode> nodes = sg.getN();
if (nodes == null || nodes.size() < 1) {
@@ -1296,7 +1298,7 @@ public class CswsConnector extends org.a
}
return stringValues.get(nodeIndex);
}
-
+
/**
* Thread that reads child objects that have a specified filter criteria,
given an object ID.
*/
@@ -1306,15 +1308,17 @@ public class CswsConnector extends org.a
protected final String[] outputColumns;
protected final String filterString;
protected final String orderingColumn;
+ protected final String dataCollection;
protected Throwable exception = null;
protected List<? extends SGraph> rval = null;
- public ListObjectsThread(final long objID, final String[] outputColumns,
final String filterString, final String orderingColumn)
+ public ListObjectsThread(final long objID, final String[] outputColumns,
final String dataCollection, final String filterString, final String
orderingColumn)
{
super();
setDaemon(true);
this.objID = objID;
this.outputColumns = outputColumns;
+ this.dataCollection = dataCollection;
this.filterString = filterString;
this.orderingColumn = orderingColumn;
}
@@ -1325,7 +1329,7 @@ public class CswsConnector extends org.a
{
// Worry about paging later. Since these are all children of a
specific node, we are unlikely to have a problem in any case.
// TBD
- rval = cswsSession.searchFor(objID, outputColumns, filterString,
orderingColumn, 0, 100000);
+ rval = cswsSession.searchFor(objID, outputColumns, dataCollection,
filterString, orderingColumn, 0, 100000);
}
catch (Throwable e)
{
@@ -1376,7 +1380,7 @@ public class CswsConnector extends org.a
// in that the first bunch cannot assume that the current connector object
is connected, while the second bunch can. That is why the first bunch
// receives a thread context argument for all UI methods, while the second
bunch does not need one (since it has already been applied via the connect()
// method, above).
-
+
/** Output the configuration header section.
* This method is called in the head section of the connector's configuration
page. Its purpose is to add the required tabs to the list, and to output any
* javascript methods that might be needed by the configuration editing HTML.
@@ -1392,10 +1396,10 @@ public class CswsConnector extends org.a
{
tabsArray.add(Messages.getString(locale,"CswsConnector.Server"));
tabsArray.add(Messages.getString(locale,"CswsConnector.DocumentView"));
-
+
Messages.outputResourceWithVelocity(out, locale, EDIT_CONFIGURATION_JS,
null, true);
}
-
+
/** Output the configuration body section.
* This method is called in the body section of the connector's configuration
page. Its purpose is to present the required form elements for editing.
* The coder can presume that the HTML that is output from this configuration
will be within appropriate <html>, <body>, and <form> tags.
The name of the
@@ -1409,7 +1413,7 @@ public class CswsConnector extends org.a
public void outputConfigurationBody(IThreadContext threadContext,
IHTTPOutput out,
Locale locale, ConfigParams parameters, String tabName)
throws ManifoldCFException, IOException
- {
+ {
Map<String, Object> velocityContext = new HashMap<>();
velocityContext.put(TAB_NAME_PARAM,tabName);
@@ -1441,7 +1445,7 @@ public class CswsConnector extends org.a
serverPassword = "";
else
serverPassword = out.mapPasswordToKey(serverPassword);
-
+
String authenticationServicePath =
parameters.getParameter(CswsParameters.authenticationPath);
if (authenticationServicePath == null)
authenticationServicePath = CswsParameters.authenticationPathDefault;
@@ -1457,7 +1461,10 @@ public class CswsConnector extends org.a
String searchServiceServicePath =
parameters.getParameter(CswsParameters.searchServicePath);
if (searchServiceServicePath == null)
searchServiceServicePath = CswsParameters.searchServicePathDefault;
-
+ String dataCollection =
parameters.getParameter(CswsParameters.dataCollection);
+ if (dataCollection == null)
+ dataCollection = CswsParameters.dataCollectionDefault;
+
String serverHTTPNTLMDomain =
parameters.getParameter(CswsParameters.serverHTTPNTLMDomain);
if(serverHTTPNTLMDomain == null)
serverHTTPNTLMDomain = "";
@@ -1507,12 +1514,13 @@ public class CswsConnector extends org.a
velocityContext.put("SERVERPORT",serverPort);
velocityContext.put("SERVERUSERNAME",serverUserName);
velocityContext.put("SERVERPASSWORD",serverPassword);
-
+
velocityContext.put("AUTHENTICATIONSERVICEPATH",
authenticationServicePath);
velocityContext.put("CONTENTSERVICESERVICEPATH",
contentServiceServicePath);
velocityContext.put("DOCUMENTMANAGEMENTSERVICEPATH",
documentManagementServicePath);
velocityContext.put("MEMBERSERVICESERVICEPATH", memberServiceServicePath);
velocityContext.put("SEARCHSERVICESERVICEPATH", searchServiceServicePath);
+ velocityContext.put("DATACOLLECTION", dataCollection);
velocityContext.put("SERVERHTTPNTLMDOMAIN",serverHTTPNTLMDomain);
velocityContext.put("SERVERHTTPNTLMUSERNAME",serverHTTPNTLMUserName);
@@ -1551,8 +1559,8 @@ public class CswsConnector extends org.a
velocityContext.put("VIEWPORT",viewPort);
velocityContext.put("VIEWCGIPATH",viewCgiPath);
velocityContext.put("VIEWACTION",viewAction);
- }
-
+ }
+
/** Process a configuration post.
* This method is called at the start of the connector's configuration page,
whenever there is a possibility that form data for a connection has been
* posted. Its purpose is to gather form information and modify the
configuration parameters accordingly.
@@ -1583,7 +1591,7 @@ public class CswsConnector extends org.a
String viewAction = variableContext.getParameter("viewaction");
if (viewAction != null)
parameters.setParameter(CswsParameters.viewAction,viewAction);
-
+
// Server parameters
String serverProtocol = variableContext.getParameter("serverprotocol");
if (serverProtocol != null)
@@ -1600,7 +1608,7 @@ public class CswsConnector extends org.a
String serverPassword = variableContext.getParameter("serverpassword");
if (serverPassword != null)
parameters.setObfuscatedParameter(CswsParameters.serverPassword,variableContext.mapKeyToPassword(serverPassword));
-
+
String authenticationServicePath =
variableContext.getParameter("authenticationservicepath");
if (authenticationServicePath != null)
parameters.setParameter(CswsParameters.authenticationPath,
authenticationServicePath);
@@ -1616,6 +1624,9 @@ public class CswsConnector extends org.a
String searchServiceServicePath =
variableContext.getParameter("searchserviceservicepath");
if (searchServiceServicePath != null)
parameters.setParameter(CswsParameters.searchServicePath,
searchServiceServicePath);
+ String dataCollection = variableContext.getParameter("datacollection");
+ if (dataCollection != null)
+ parameters.setParameter(CswsParameters.dataCollection, dataCollection);
String serverHTTPNTLMDomain =
variableContext.getParameter("serverhttpntlmdomain");
if (serverHTTPNTLMDomain != null)
@@ -1626,7 +1637,7 @@ public class CswsConnector extends org.a
String serverHTTPNTLMPassword =
variableContext.getParameter("serverhttpntlmpassword");
if (serverHTTPNTLMPassword != null)
parameters.setObfuscatedParameter(CswsParameters.serverHTTPNTLMPassword,variableContext.mapKeyToPassword(serverHTTPNTLMPassword));
-
+
String serverHTTPSKeystoreValue =
variableContext.getParameter("serverhttpskeystoredata");
final String serverConfigOp =
variableContext.getParameter("serverconfigop");
if (serverConfigOp != null)
@@ -1681,10 +1692,10 @@ public class CswsConnector extends org.a
}
}
parameters.setParameter(CswsParameters.serverHTTPSKeystore,serverHTTPSKeystoreValue);
-
+
return null;
}
-
+
/** View configuration.
* This method is called in the body section of the connector's view
configuration page. Its purpose is to present the connection information to
the user.
* The coder can presume that the HTML that is output from this configuration
will be within appropriate <html> and <body> tags.
@@ -1724,7 +1735,7 @@ public class CswsConnector extends org.a
paramMap.put("CONFIGMAP",configMap);
Messages.outputResourceWithVelocity(out, locale, VIEW_CONFIGURATION_HTML,
paramMap);
}
-
+
/** Output the specification header section.
* This method is called in the head section of a job page which has selected
a repository connection of the
* current type. Its purpose is to add the required tabs to the list, and to
output any javascript methods
@@ -1745,15 +1756,15 @@ public class CswsConnector extends org.a
tabsArray.add(Messages.getString(locale,"CswsConnector.Filters"));
tabsArray.add(Messages.getString(locale,"CswsConnector.Security"));
tabsArray.add(Messages.getString(locale,"CswsConnector.Metadata"));
-
+
String seqPrefixParam = "s" + connectionSequenceNumber + "_";
- Map<String, String> paramMap = new HashMap<String, String>();
+ Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("seqPrefix", seqPrefixParam);
Messages.outputResourceWithVelocity(out, locale, EDIT_SPECIFICATION_JS,
paramMap, true);
}
-
+
/** Output the specification body section.
* This method is called in the body section of a job page which has selected
a repository connection of the
* current type. Its purpose is to present the required form elements for
editing.
@@ -2049,8 +2060,8 @@ public class CswsConnector extends org.a
public String toString() {
return left + "=" + right;
}
- }
-
+ }
+
/** Process a specification post.
* This method is called at the start of job's edit or view page, whenever
there is a possibility that form
* data for a connection has been posted. Its purpose is to gather form
information and modify the
@@ -2087,7 +2098,7 @@ public class CswsConnector extends org.a
sn.setAttribute("value",value);
ds.addChild(ds.getChildCount(),sn);
}
-
+
String xc = variableContext.getParameter(seqPrefix+"pathcount");
if (xc != null)
{
@@ -2393,7 +2404,7 @@ public class CswsConnector extends org.a
// Strip off end
String category =
variableContext.getParameter(seqPrefix+"speccategory");
int lastSlash = -1;
- int firstColon = -1;
+ int firstColon = -1;
int k = 0;
while (k < category.length())
{
@@ -2567,7 +2578,7 @@ public class CswsConnector extends org.a
}
return null;
}
-
+
/** View specification.
* This method is called in the body section of a job's view page. Its
purpose is to present the document
* specification information to the user. The coder can presume that the
HTML that is output from
@@ -2634,7 +2645,7 @@ public class CswsConnector extends org.a
getSession();
return getCategoryAttributes(new CswsContext(), pathString);
}
-
+
protected String[] getCategoryAttributes(CswsContext llc, String pathString)
throws ManifoldCFException, ServiceInterruption
{
@@ -2679,7 +2690,7 @@ public class CswsConnector extends org.a
Long readSize = null;
long objID = new Integer(documentIdentifier.substring(1)).intValue();
-
+
// Try/finally for fetch logging
try
{
@@ -2693,7 +2704,7 @@ public class CswsConnector extends org.a
activities.noDocument(documentIdentifier,version);
return;
}
-
+
// Check URL first
if (!activities.checkURLIndexable(viewHttpAddress))
{
@@ -2705,7 +2716,7 @@ public class CswsConnector extends org.a
activities.noDocument(documentIdentifier,version);
return;
}
-
+
// Add general metadata
final ObjectInformation objInfo = llc.getObjectInformation(objID);
final VersionInformation versInfo = llc.getVersionInformation(objID, 0);
@@ -2737,7 +2748,7 @@ public class CswsConnector extends org.a
activities.noDocument(documentIdentifier,version);
return;
}
-
+
final Long dataSize = versInfo.getDataSize();
if (dataSize == null)
{
@@ -2749,7 +2760,7 @@ public class CswsConnector extends org.a
activities.noDocument(documentIdentifier,version);
return;
}
-
+
if (!activities.checkLengthIndexable(dataSize.longValue()))
{
// Document not indexable because of its length
@@ -2772,12 +2783,12 @@ public class CswsConnector extends org.a
activities.noDocument(documentIdentifier,version);
return;
}
-
+
final String fileName = versInfo.getFileName();
final Date creationDate = objInfo.getCreationDate();
final Long parentID = objInfo.getParentId();
-
-
+
+
RepositoryDocument rd = new RepositoryDocument();
// Add general data we need for the output connector
@@ -2789,7 +2800,7 @@ public class CswsConnector extends org.a
rd.setCreatedDate(creationDate);
if (modifyDate != null)
rd.setModifiedDate(modifyDate);
-
+
rd.addField(GENERAL_NAME_FIELD,objInfo.getName());
rd.addField(GENERAL_DESCRIPTION_FIELD,objInfo.getComments());
if (creationDate != null)
@@ -2822,7 +2833,7 @@ public class CswsConnector extends org.a
objInfo.getSpecifiedCategoryAttribute(rd, catID,
pathItem.getCatName());
}
}
-
+
if (actualAcls != null && denyAcls != null)
rd.setSecurity(RepositoryDocument.SECURITY_TYPE_DOCUMENT,actualAcls,denyAcls);
@@ -2841,17 +2852,17 @@ public class CswsConnector extends org.a
// Use FetchVersion instead
long currentTime;
-
+
// Fire up the document reading thread
final DocumentReadingThread t = new DocumentReadingThread(objID, 0);
boolean wasInterrupted = false;
t.start();
- try
+ try
{
try
{
InputStream is = t.getSafeInputStream();
- try
+ try
{
// Can only index while background thread is running!
rd.setBinary(is, dataSize);
@@ -2881,7 +2892,7 @@ public class CswsConnector extends org.a
// No errors. Record the fact that we made it.
}
- catch (InterruptedException e)
+ catch (InterruptedException e)
{
t.interrupt();
throw new ManifoldCFException("Interrupted: " + e.getMessage(), e,
@@ -2937,7 +2948,7 @@ public class CswsConnector extends org.a
Logging.connectors.warn("Csws: IO exception ingesting "+contextMsg+":
"+e.getMessage(),e);
throw new ServiceInterruption("IO exception ingesting "+contextMsg+":
"+e.getMessage(),e,currentTime+300000L,currentTime+6*3600000L,-1,false);
}
-
+
/** Pack category and attribute */
protected static String packCategoryAttribute(String category, String
attribute)
{
@@ -2955,7 +2966,7 @@ public class CswsConnector extends org.a
startPos = unpack(attribute,value,startPos,':');
}
-
+
/** Given a path string, get a list of folders and projects under that node.
*@param pathString is the current path (folder names and project names,
separated by dots (.)).
*@return a list of folder and project names, in sorted order, or null if the
path was invalid.
@@ -2972,7 +2983,7 @@ public class CswsConnector extends org.a
final String filterString = "\"OTSubType\":0 OR \"OTSubType\":202 OR
\"OTSubType\":136";
- final ListObjectsThread t = new ListObjectsThread(vid, new
String[]{"OTName"}, filterString, "OTName");
+ final ListObjectsThread t = new ListObjectsThread(vid, new
String[]{"OTName"}, dataCollection, filterString, "OTName");
try
{
t.start();
@@ -3012,7 +3023,7 @@ public class CswsConnector extends org.a
// We want only folders that are children of the current object and which
match the specified subfolder
String filterString = "\"OTSubType\":131";
- final ListObjectsThread t = new ListObjectsThread(vid, new
String[]{"OTName"}, filterString, "OTName");
+ final ListObjectsThread t = new ListObjectsThread(vid, new
String[]{"OTName"}, dataCollection, filterString, "OTName");
try
{
t.start();
@@ -3191,7 +3202,7 @@ public class CswsConnector extends org.a
}
*/
-
+
/** Get a category version for document.
*/
/* Unused -- done a different way
@@ -3247,7 +3258,7 @@ public class CswsConnector extends org.a
{
throw new ManifoldCFException("Error retrieving attribute value:
"+Integer.toString(status)+": "+llServer.getErrors());
}
-
+
if (children != null)
{
rval = new String[children.size()];
@@ -3291,7 +3302,7 @@ public class CswsConnector extends org.a
}
*/
-
+
/** Get an attribute value from a category version.
*/
/* Unused -- done a different way
@@ -3311,7 +3322,7 @@ public class CswsConnector extends org.a
}
}
*/
-
+
protected class GetObjectRightsThread extends Thread
{
protected final long objID;
@@ -3391,11 +3402,11 @@ public class CswsConnector extends org.a
protected final Map<VersionInformation,VersionInformation> versionInfoMap
= new HashMap<>();
/** Cache of UserInformation objects */
protected final Map<UserInformation,UserInformation> userInfoMap = new
HashMap<>();
-
+
public CswsContext()
{
}
-
+
public ObjectInformation getObjectInformation(final String workspaceName)
{
ObjectInformation oi = new ObjectInformation(workspaceName);
@@ -3419,7 +3430,7 @@ public class CswsConnector extends org.a
}
return lookupValue;
}
-
+
public VersionInformation getVersionInformation(long objectID, int
revisionNumber)
{
VersionInformation vi = new VersionInformation(objectID, revisionNumber);
@@ -3431,7 +3442,7 @@ public class CswsConnector extends org.a
}
return lookupValue;
}
-
+
public UserInformation getUserInformation(long userID)
{
UserInformation ui = new UserInformation(userID);
@@ -3451,21 +3462,21 @@ public class CswsConnector extends org.a
protected class UserInformation
{
protected final long userID;
-
+
protected boolean fetched = false;
protected Member userValue = null;
-
+
public UserInformation(long userID)
{
this.userID = userID;
}
-
+
public boolean exists()
throws ServiceInterruption, ManifoldCFException
{
return getUserValue() != null;
}
-
+
public String getName()
throws ServiceInterruption, ManifoldCFException
{
@@ -3474,7 +3485,7 @@ public class CswsConnector extends org.a
return null;
return userValue.getName();
}
-
+
protected Member getUserValue()
throws ServiceInterruption, ManifoldCFException
{
@@ -3501,13 +3512,13 @@ public class CswsConnector extends org.a
{
return "("+userID+")";
}
-
+
@Override
public int hashCode()
{
return Long.hashCode(userID);
}
-
+
@Override
public boolean equals(Object o)
{
@@ -3518,7 +3529,7 @@ public class CswsConnector extends org.a
}
}
-
+
/** This object represents a cache of version information.
* Initialize it with the volume ID and object ID and revision number
(usually zero).
* Then, request the desired fields from it.
@@ -3527,16 +3538,16 @@ public class CswsConnector extends org.a
{
protected final long objectID;
protected final long revisionNumber;
-
+
protected boolean fetched = false;
protected Version versionValue = null;
-
+
public VersionInformation(long objectID, long revisionNumber)
{
this.objectID = objectID;
this.revisionNumber = revisionNumber;
}
-
+
public boolean exists()
throws ServiceInterruption, ManifoldCFException
{
@@ -3595,7 +3606,7 @@ public class CswsConnector extends org.a
final Version elem = getVersionValue();
if (elem == null)
return null;
- return elem.getOwner();
+ return elem.getOwner();
}
/** Get version LLValue */
@@ -3619,13 +3630,13 @@ public class CswsConnector extends org.a
}
return versionValue;
}
-
+
@Override
public int hashCode()
{
return Long.hashCode(objectID) + Long.hashCode(revisionNumber);
}
-
+
@Override
public boolean equals(Object o)
{
@@ -3636,7 +3647,7 @@ public class CswsConnector extends org.a
}
}
-
+
/** This object represents an object information cache.
* Initialize it with the volume ID and object ID, and then request
* the appropriate fields from it. Keep it around as long as needed; it
functions as a cache
@@ -3646,10 +3657,10 @@ public class CswsConnector extends org.a
{
protected final long objectID;
protected final String workspaceName;
-
+
protected Node objectValue = null;
protected boolean fetched = false;
-
+
public ObjectInformation(final long objectID)
{
this.objectID = objectID;
@@ -3660,14 +3671,14 @@ public class CswsConnector extends org.a
this.workspaceName = workspaceName;
this.objectID = -1L;
}
-
+
/**
* Get workspace name
*/
public String getWorkspaceName() {
return workspaceName;
}
-
+
/**
* Check whether object seems to exist or not.
*/
@@ -3683,7 +3694,7 @@ public class CswsConnector extends org.a
{
return "(Object: "+objectID+")";
}
-
+
/**
* Fetch attribute value for a specified categoryID for a given object.
*/
@@ -3716,7 +3727,7 @@ public class CswsConnector extends org.a
if (objInfo == null) {
return false;
}
- final List<? extends AttributeGroup> attributeGroups =
objInfo.getMetadata().getAttributeGroups();
+ final List<? extends AttributeGroup> attributeGroups =
objInfo.getMetadata().getAttributeGroups();
for (final AttributeGroup attribute : attributeGroups) {
final int index = attribute.getKey().indexOf(".");
final String categoryAttributeName = attribute.getDisplayName();
@@ -3775,7 +3786,7 @@ public class CswsConnector extends org.a
// We want only folders that are children of the current object and
which match the specified subfolder
final String filterString = "(\"OTSubType\":0 OR \"OTSubType\":202 OR
\"OTSubType\":136) AND \"OTName\":\""+subFolder+"\"";
- final ListObjectsThread t = new ListObjectsThread(obj, new
String[]{"OTDataID", "OTSubTypeName"}, filterString, "OTDataID");
+ final ListObjectsThread t = new ListObjectsThread(obj, new
String[]{"OTDataID", "OTSubTypeName"}, dataCollection, filterString,
"OTDataID");
try
{
t.start();
@@ -3830,7 +3841,7 @@ public class CswsConnector extends org.a
}
return m.getAttributeGroups();
}
-
+
/**
* Get category IDs available to the object with a specified object ID
*/
@@ -3839,7 +3850,7 @@ public class CswsConnector extends org.a
{
return getSuperObjectCategoryIDs(objectID);
}
-
+
/**
* Returns the category ID specified by the path name.
* @param startPath is the folder name, ending in a category name (a string
with slashes as separators)
@@ -3885,10 +3896,10 @@ public class CswsConnector extends org.a
} else {
filterString = "\"OTSubType\":131";
}
-
+
filterString += " AND \"OTName:\"" + subFolder + "\"";
- final ListObjectsThread t = new ListObjectsThread(obj, new
String[]{"OTDataID", "OTSubTypeName"}, filterString, "OTDataID");
+ final ListObjectsThread t = new ListObjectsThread(obj, new
String[]{"OTDataID", "OTSubTypeName"}, dataCollection, filterString,
"OTDataID");
try
{
t.start();
@@ -3936,7 +3947,7 @@ public class CswsConnector extends org.a
return null;
return elem.getPermissions();
}
-
+
/** Get OpenText document name.
*/
public String getName()
@@ -3945,7 +3956,7 @@ public class CswsConnector extends org.a
final Node elem = getObjectValue();
if (elem == null)
return null;
- return elem.getName();
+ return elem.getName();
}
/** Get OpenText comments/description.
@@ -3956,7 +3967,7 @@ public class CswsConnector extends org.a
final Node elem = getObjectValue();
if (elem == null)
return null;
- return elem.getComment();
+ return elem.getComment();
}
/** Get parent ID.
@@ -3967,7 +3978,7 @@ public class CswsConnector extends org.a
final Node elem = getObjectValue();
if (elem == null)
return null;
- return elem.getParentID();
+ return elem.getParentID();
}
/** Get creation date.
@@ -3980,7 +3991,7 @@ public class CswsConnector extends org.a
return null;
return new
Date(elem.getCreateDate().toGregorianCalendar().getTimeInMillis());
}
-
+
/** Get creator ID.
*/
public Long getCreatorId()
@@ -3989,7 +4000,7 @@ public class CswsConnector extends org.a
final Node elem = getObjectValue();
if (elem == null)
return null;
- return elem.getCreatedBy();
+ return elem.getCreatedBy();
}
/* Get modify date.
@@ -4040,7 +4051,7 @@ public class CswsConnector extends org.a
}
return objectValue;
}
-
+
@Override
public int hashCode()
{
@@ -4049,7 +4060,7 @@ public class CswsConnector extends org.a
}
return Long.hashCode(objectID);
}
-
+
@Override
public boolean equals(Object o)
{
@@ -4119,7 +4130,7 @@ public class CswsConnector extends org.a
protected class GetUserResultsThread extends Thread
{
protected final PageHandle pageHandle;
-
+
protected List<? extends Member> rval = null;
protected Throwable exception = null;
@@ -4369,9 +4380,9 @@ public class CswsConnector extends org.a
{
if (!objInfo.exists())
return null;
-
+
final List<String> tokenAccumulator = new ArrayList<>();
-
+
if (evaluateRight(rights.getOwnerRight())) {
tokenAccumulator.add(rights.getOwnerRight().toString());
}
@@ -4383,7 +4394,7 @@ public class CswsConnector extends org.a
}
// What happened to Guest/World right??
// MHL -TBD - for "GUEST" token
-
+
for (final NodeRight nr : rights.getACLRights()) {
if (evaluateRight(nr)) {
tokenAccumulator.add(new Long(nr.getRightID()).toString());
@@ -4392,7 +4403,7 @@ public class CswsConnector extends org.a
return tokenAccumulator.toArray(new String[tokenAccumulator.size()]);
}
-
+
/** Check if NodeRight conveys the permissions we need */
protected static boolean evaluateRight(final NodeRight nr) {
final NodePermissions np = nr.getPermissions();
@@ -4421,14 +4432,14 @@ public class CswsConnector extends org.a
if (categories == null) {
return;
}
-
+
int catCount = 0;
for (final Node category : categories) {
if (category.getType().equals("Category")) {
catCount++;
}
}
-
+
rval = new long[catCount];
for (final Node category : categories) {
if (category.getType().equals("Category")) {
@@ -4714,13 +4725,13 @@ public class CswsConnector extends org.a
{
// The livelink context
protected final CswsContext llc;
-
+
// The path attribute name
protected final String pathAttributeName;
// The path separator
protected final String pathSeparator;
-
+
// The node ID to path name mapping (which acts like a cache)
protected final Map<String,String> pathMap = new HashMap<String,String>();
@@ -4730,10 +4741,10 @@ public class CswsConnector extends org.a
// Acls
protected final Set<String> aclMap = new HashSet<String>();
protected final boolean securityOn;
-
+
// Filter string
protected final String filterString;
-
+
protected final Set<String> holder = new HashSet<String>();
protected final boolean includeAllMetadata;
@@ -4748,7 +4759,7 @@ public class CswsConnector extends org.a
StringBuilder fsb = new StringBuilder();
boolean first = true;
boolean includeAllMetadata = false;
-
+
for (int i = 0; i < spec.getChildCount(); i++)
{
SpecificationNode n = spec.getChild(i);
@@ -4832,7 +4843,7 @@ public class CswsConnector extends org.a
}
}
-
+
this.includeAllMetadata = includeAllMetadata;
this.pathAttributeName = pathAttributeName;
this.pathSeparator = pathSeparator;
@@ -4856,7 +4867,7 @@ public class CswsConnector extends org.a
{
return includeAllMetadata;
}
-
+
public String[] getMetadataAttributes()
{
// Put into an array
@@ -4868,12 +4879,12 @@ public class CswsConnector extends org.a
}
return specifiedMetadataAttributes;
}
-
+
public String getFilterString()
{
return filterString;
}
-
+
public String[] getAcls()
{
if (!securityOn)
@@ -4887,7 +4898,7 @@ public class CswsConnector extends org.a
}
return rval;
}
-
+
/** Get the path attribute name.
*@return the path attribute name, or null if none specified.
*/
@@ -4902,7 +4913,7 @@ public class CswsConnector extends org.a
{
return pathSeparator;
}
-
+
/** Given an identifier, get the translated string that goes into the
metadata.
*/
public String getPathAttributeValue(String documentIdentifier)
@@ -4920,7 +4931,7 @@ public class CswsConnector extends org.a
{
return matchMap.toString();
}
-
+
/** For a given node, get its path.
*/
public String getNodePathString(String documentIdentifier)
@@ -4990,7 +5001,7 @@ public class CswsConnector extends org.a
protected class MetadataDescription
{
protected final CswsContext llc;
-
+
// This is a map of category name to category ID and attributes
protected final Map<String,MetadataPathItem> categoryMap = new
HashMap<String,MetadataPathItem>();
@@ -5069,7 +5080,7 @@ public class CswsConnector extends org.a
{
// Csws context
protected final CswsContext llc;
-
+
// This is the map from category ID to category path name.
// It's keyed by a Long formed from the id, and has String values.
protected final Map<Long,String> categoryPathMap = new HashMap<>();
@@ -5232,7 +5243,7 @@ public class CswsConnector extends org.a
{
rootValue = llc.getObjectInformation(workspaceName);
}
-
+
if (!rootValue.exists())
{
Logging.connectors.warn("Csws: Could not get workspace/volume ID!
Retrying...");
@@ -5248,14 +5259,14 @@ public class CswsConnector extends org.a
/** This thread performs a LAPI FetchVersion command, streaming the resulting
* document back through a XThreadInputStream to the invoking thread.
*/
- protected class DocumentReadingThread extends Thread
+ protected class DocumentReadingThread extends Thread
{
protected Throwable exception = null;
protected final long docID;
protected final long versionNumber;
protected final XThreadInputStream stream;
-
+
public DocumentReadingThread(final long docID, final long versionNumber)
{
super();
@@ -5271,7 +5282,7 @@ public class CswsConnector extends org.a
try
{
final XThreadOutputStream outputStream = new
XThreadOutputStream(stream);
- try
+ try
{
cswsSession.getVersionContents(docID, versionNumber, outputStream);
}
@@ -5287,7 +5298,7 @@ public class CswsConnector extends org.a
public InputStream getSafeInputStream() {
return stream;
}
-
+
public void finishUp()
throws InterruptedException, ManifoldCFException, ServiceInterruption
{
@@ -5335,7 +5346,7 @@ public class CswsConnector extends org.a
/** Client and method, all preconfigured */
protected final HttpClient httpClient;
protected final HttpRequestBase executeMethod;
-
+
protected HttpResponse response = null;
protected Throwable responseException = null;
protected XThreadInputStream threadStream = null;
@@ -5347,7 +5358,7 @@ public class CswsConnector extends org.a
protected Throwable shutdownException = null;
protected Throwable generalException = null;
-
+
public ExecuteMethodThread(HttpClient httpClient, HttpRequestBase
executeMethod)
{
super();
@@ -5390,7 +5401,7 @@ public class CswsConnector extends org.a
this.notifyAll();
}
}
-
+
// Start the transfer of the content
if (responseException == null)
{
@@ -5427,7 +5438,7 @@ public class CswsConnector extends org.a
}
}
}
-
+
if (responseException == null && streamException == null)
{
if (threadStream != null)
@@ -5436,7 +5447,7 @@ public class CswsConnector extends org.a
threadStream.stuffQueue();
}
}
-
+
}
finally
{
@@ -5496,7 +5507,7 @@ public class CswsConnector extends org.a
return -1L;
return new Long(contentLength.trim()).longValue();
}
-
+
public String getFirstHeader(String headerName)
throws InterruptedException, IOException, HttpException
{
@@ -5535,7 +5546,7 @@ public class CswsConnector extends org.a
}
}
}
-
+
public void abort()
{
// This will be called during the finally
@@ -5552,13 +5563,13 @@ public class CswsConnector extends org.a
abortThread = true;
}
}
-
+
public void finishUp()
throws InterruptedException
{
join();
}
-
+
protected synchronized void checkException(Throwable exception)
throws IOException, HttpException
{
@@ -5580,5 +5591,5 @@ public class CswsConnector extends org.a
}
}
-
+
}
Modified:
manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/csws/CswsParameters.java
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/csws/CswsParameters.java?rev=1866889&r1=1866888&r2=1866889&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/csws/CswsParameters.java
(original)
+++
manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/csws/CswsParameters.java
Fri Sep 13 09:24:32 2019
@@ -35,7 +35,7 @@ public class CswsParameters
public final static String viewCgiPath = "View CGI path";
/** Document View Action**/
public final static String viewAction = "View Action";
-
+
// These parameters are for Web Services
/** Connection options; choices are "http", "https" */
public final static String serverProtocol = "Server protocol";
@@ -62,6 +62,9 @@ public class CswsParameters
/** MemberService service CGI path */
public final static String memberServicePath = "Server MemberService Service
path";
public final static String memberServicePathDefault =
"/cws/MemberService.svc";
+ /** Name of the Livelink Collection */
+ public final static String dataCollection = "Data Collection";
+ public final static String dataCollectionDefault = "'LES Enterprise'";
/** Server domain, if NTLM */
public final static String serverHTTPNTLMDomain = "Server HTTP NTLM domain";
/** Server HTTP user */
@@ -70,12 +73,12 @@ public class CswsParameters
public final static String serverHTTPNTLMPassword = "Server HTTP NTLM
password";
/** Keystore for LAPI */
public final static String serverHTTPSKeystore = "Server HTTPS truststore";
-
-
+
+
// These parameters are for the LiveLink Authority
/** Cache time in seconds */
public final static String cacheLifetime = "Cache lifetime minutes";
/** Max LRU size */
public final static String cacheLRUSize = "Max cache LRU size";
-
+
}
Modified:
manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/csws/CswsSession.java
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/csws/CswsSession.java?rev=1866889&r1=1866888&r2=1866889&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/csws/CswsSession.java
(original)
+++
manifoldcf/trunk/connectors/csws/connector/src/main/java/org/apache/manifoldcf/csws/CswsSession.java
Fri Sep 13 09:24:32 2019
@@ -33,16 +33,6 @@ import org.apache.cxf.transport.http.Htt
import org.apache.cxf.configuration.jsse.TLSClientParameters;
import javax.activation.DataHandler;
-import javax.xml.namespace.QName;
-import javax.xml.soap.MessageFactory;
-import javax.xml.soap.SOAPElement;
-import javax.xml.soap.SOAPEnvelope;
-import javax.xml.soap.SOAPException;
-import javax.xml.soap.SOAPHeader;
-import javax.xml.soap.SOAPHeaderElement;
-import javax.xml.soap.SOAPMessage;
-import javax.xml.soap.SOAPPart;
-import javax.xml.ws.soap.MTOMFeature;
import javax.xml.ws.soap.SOAPFaultException;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Holder;
@@ -64,20 +54,16 @@ import com.opentext.livelink.service.mem
import com.opentext.livelink.service.memberservice.MemberSearchOptions;
import com.opentext.livelink.service.memberservice.MemberSearchResults;
-import com.opentext.livelink.service.docman.AttributeGroup;
import com.opentext.livelink.service.docman.CategoryInheritance;
import com.opentext.livelink.service.docman.GetNodesInContainerOptions;
import com.opentext.livelink.service.docman.Node;
-import com.opentext.livelink.service.docman.NodePermissions;
import com.opentext.livelink.service.docman.Version;
import com.opentext.livelink.service.docman.NodeRights;
import com.opentext.livelink.service.docman.AttributeGroupDefinition;
-import com.opentext.livelink.service.docman.Attribute;
import com.opentext.livelink.service.memberservice.User;
import com.opentext.livelink.service.memberservice.Member;
import com.opentext.livelink.service.memberservice.Group;
import com.opentext.livelink.service.searchservices.SResultPage;
-import com.opentext.livelink.service.searchservices.SNode;
import com.opentext.livelink.service.searchservices.SGraph;
import com.opentext.livelink.service.searchservices.SingleSearchRequest;
import com.opentext.livelink.service.searchservices.SingleSearchResponse;
@@ -113,21 +99,21 @@ public class CswsSession
private final ContentService contentServiceHandle;
private final MemberService memberServiceHandle;
private final SearchService searchServiceHandle;
-
+
// Transient data
-
+
// Cached root node types
private List<? extends String> rootNodeTypes = null;
-
+
// Cached workspace root nodes
private Map<String, Node> workspaceTypeNodes = new HashMap<>();
-
+
private final static String sslSocketFactoryProperty =
"com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory";
-
+
// Transient data that will need to be periodically rebuilt
private long currentSessionExpiration = -1L;
private String currentAuthToken = null;
-
+
public CswsSession(final String userName,
final String password,
final IKeystoreManager keystore,
@@ -137,7 +123,7 @@ public class CswsSession
final String contentServiceServiceURL,
final String memberServiceServiceURL,
final String searchServiceServiceURL) throws ManifoldCFException {
-
+
// Save username/password
this.userName = userName;
this.password = password;
@@ -153,11 +139,11 @@ public class CswsSession
config.setTlsClientParameters(tlsConfig);
final HttpConduitFeature conduitFeature = new HttpConduitFeature();
conduitFeature.setConduitConfig(config);
-
+
// Construct service references from the URLs
// EVERYTHING depends on the right classloader being used to help us
locate appropriate resources etc, so swap to the classloader for THIS
// class.
- final ClassLoader savedCl =
Thread.currentThread().getContextClassLoader();
+ final ClassLoader savedCl = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
this.authService = (authenticationServiceURL != null)?new
Authentication_Service(new URL(authenticationServiceURL), conduitFeature):null;
@@ -171,7 +157,7 @@ public class CswsSession
throw new ManifoldCFException("Malformed URL: "+e.getMessage(), e);
} finally {
Thread.currentThread().setContextClassLoader(savedCl);
- }
+ }
// Initialize authclient etc.
if (authService != null) {
this.authClientHandle = authService.getBasicHttpBindingAuthentication();
@@ -203,7 +189,7 @@ public class CswsSession
} else {
this.searchServiceHandle = null;
}
-
+
}
/**
@@ -221,8 +207,8 @@ public class CswsSession
// MHL to set up transport etc.
return contentServiceHandle;
}
-
- /**
+
+ /**
* Fetch initialized MemberService handle.
*/
public MemberService getMemberServiceHandle() {
@@ -230,16 +216,16 @@ public class CswsSession
return memberServiceHandle;
}
- /**
+ /**
* Fetch initialized SearchService handle.
*/
public SearchService getSearchServiceHandle() {
// MHL
return searchServiceHandle;
}
-
+
// Accessors for information that only needs to be accessed once per
session, which we will cache
-
+
/**
* Fetch root node types. These will be cached so we only need to do it
once.
*/
@@ -257,11 +243,11 @@ public class CswsSession
}
return this.rootNodeTypes;
}
-
+
/**
* Fetch root node given type.
*/
- public Node getRootNode(final String nodeType)
+ public Node getRootNode(final String nodeType)
throws ManifoldCFException, ServiceInterruption {
Node thisWorkspaceNode = workspaceTypeNodes.get(nodeType);
if (thisWorkspaceNode == null) {
@@ -276,7 +262,7 @@ public class CswsSession
}
return thisWorkspaceNode;
}
-
+
public List<? extends Node> listNodes(final long nodeId)
throws ManifoldCFException, ServiceInterruption {
try {
@@ -313,7 +299,7 @@ public class CswsSession
return null;
}
}
-
+
public List<? extends CategoryInheritance> getCategoryInheritance(final long
parentId)
throws ManifoldCFException, ServiceInterruption {
try {
@@ -339,8 +325,8 @@ public class CswsSession
return null;
}
}
-
- public Node getNode(final long nodeId)
+
+ public Node getNode(final long nodeId)
throws ManifoldCFException, ServiceInterruption {
// Need to detect if object was deleted, and return null in this case!!!
try {
@@ -367,7 +353,7 @@ public class CswsSession
}
}
- public NodeRights getNodeRights(final long nodeId)
+ public NodeRights getNodeRights(final long nodeId)
throws ManifoldCFException, ServiceInterruption {
// Need to detect if object was deleted, and return null in this case!!!
try {
@@ -381,7 +367,7 @@ public class CswsSession
}
}
- public Version getVersion(final long nodeId, final long version)
+ public Version getVersion(final long nodeId, final long version)
throws ManifoldCFException, ServiceInterruption {
try {
return getDocumentManagementHandle().getVersion(nodeId, version,
getOTAuthentication());
@@ -404,7 +390,7 @@ public class CswsSession
} catch (javax.xml.ws.WebServiceException e) {
processWSException(e);
return null;
- }
+ }
}
public User getUserByLoginName(final String userName)
@@ -445,8 +431,8 @@ public class CswsSession
return null;
}
}
-
- public Member getMember(final long memberId)
+
+ public Member getMember(final long memberId)
throws ManifoldCFException, ServiceInterruption {
try {
return getMemberServiceHandle().getMemberById(memberId,
getOTAuthentication());
@@ -458,7 +444,7 @@ public class CswsSession
return null;
}
}
-
+
public void getVersionContents(final long nodeId, final long version, final
OutputStream os)
throws ManifoldCFException, ServiceInterruption {
try {
@@ -474,8 +460,8 @@ public class CswsSession
processWSException(e);
}
}
-
- public PageHandle getAllUsers()
+
+ public PageHandle getAllUsers()
throws ManifoldCFException, ServiceInterruption {
final MemberSearchOptions srchMemOptions = new MemberSearchOptions();
srchMemOptions.setFilter(SearchFilter.USER);
@@ -514,9 +500,9 @@ public class CswsSession
return null;
}
}
-
+
// Node searching
-
+
/**
* Return a set of IDs matching the specification.
* @param parentID is the parent ID.
@@ -525,19 +511,20 @@ public class CswsSession
* OTDataID
* OTSubTypeName
* OTName
+ * @param dataCollection the data collection (i.e. the slice) to be queried
* @param searchSpec is the search specification, e.g. "\"OTSubType\":0 OR
\"OTSubType\":1 OR \"OTSubType\":144) AND \"OTModifyDate\":<20190312"
* For reference:
- * OTSubType Details
- * 0 - Folder
- * 1 - Alias [Shortcut]
- * 131 - Category
- * 136 - Compound Document
- * 140 - URL
- * 144 - Document
- * 202 - Project
+ * OTSubType Details
+ * 0 - Folder
+ * 1 - Alias [Shortcut]
+ * 131 - Category
+ * 136 - Compound Document
+ * 140 - URL
+ * 144 - Document
+ * 202 - Project
* 204 - Task List
- * 207 - Channel
- * 215 - Discussion
+ * 207 - Channel
+ * 215 - Discussion
* 299 - LiveReport
* @param orderingColumn is the column name to order the result by
* @param start is the ID of the result to return (0-based)
@@ -545,11 +532,11 @@ public class CswsSession
* @return an array of IDs corresponding to documents or categories requested
*/
public List<? extends SGraph> searchFor(final long parentID,
- final String[] returnColumns, final String searchSpec, final String
orderingColumn, final int start, final int count)
+ final String[] returnColumns, final String dataCollection, final String
searchSpec, final String orderingColumn, final int start, final int count)
throws ManifoldCFException, ServiceInterruption {
try {
final SingleSearchRequest singleSrchReq = new SingleSearchRequest();
- singleSrchReq.setDataCollectionSpec("'LES Enterprise'");//Livelink
Enterprise Server
+ singleSrchReq.setDataCollectionSpec(dataCollection);//Livelink
Enterprise Server
singleSrchReq.setQueryLanguage("Livelink Search API V1"); //Search Query
Language API
singleSrchReq.setFirstResultToRetrieve(start + 1);
singleSrchReq.setNumResultsToRetrieve(count);
@@ -580,13 +567,13 @@ public class CswsSession
return null;
}
}
-
+
// Construct authentication token argument, which must be passed as last
argument for every method
-
+
/**
* Construct OTAuthentication structure (to be passed as an argument)
*/
- public Holder<OTAuthentication> getOTAuthentication()
+ public Holder<OTAuthentication> getOTAuthentication()
throws ManifoldCFException, ServiceInterruption {
final String authToken = getAuthToken();
// Create the OTAuthentication object and set the authentication token
@@ -598,7 +585,7 @@ public class CswsSession
}
// Private methods
-
+
private String getAuthToken()
throws ManifoldCFException, ServiceInterruption {
final long currentTime = System.currentTimeMillis();
@@ -618,19 +605,19 @@ public class CswsSession
}
return currentAuthToken;
}
-
+
private void processIOException(IOException e)
throws ManifoldCFException, ServiceInterruption {
throw new ManifoldCFException("IO exception: "+e.getMessage(), e);
// MHL
}
-
+
private void processSOAPFault(SOAPFaultException e)
throws ManifoldCFException, ServiceInterruption {
throw new ManifoldCFException("SOAP exception: "+e.getMessage(), e);
// MHL
}
-
+
private void processWSException(javax.xml.ws.WebServiceException e)
throws ManifoldCFException, ServiceInterruption {
throw new ManifoldCFException("Web service communication issue:
"+e.getMessage(), e);
Modified:
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_en_US.properties
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_en_US.properties?rev=1866889&r1=1866888&r2=1866889&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_en_US.properties
(original)
+++
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_en_US.properties
Fri Sep 13 09:24:32 2019
@@ -40,6 +40,7 @@ CswsConnector.DocumentManagementServiceP
CswsConnector.ContentServiceServicePath=ContentService service path:
CswsConnector.MemberServiceServicePath=MemberService service path:
CswsConnector.SearchServiceServicePath=SearchService service path:
+CswsConnector.DataCollection=Data Collection:
CswsConnector.UserNameRegularExpression=User name regular expression:
CswsConnector.LivelinkUserExpression=Livelink user expression:
CswsConnector.Parameters=Parameters:
@@ -57,6 +58,7 @@ CswsConnector.EnterTheContentServiceServ
CswsConnector.TheContentServiceServicePathMustBeginWithACharacter=The
ContentService service path must begin with a / character
CswsConnector.EnterTheSearchServiceServicePath=Enter the SearchService service
path
CswsConnector.TheSearchServiceServicePathMustBeginWithACharacter=The
SearchService service path must begin with a / character
+CswsConnector.DataCollectionIsRequired=Enter the data collection
CswsConnector.AServerPortNumberIsRequired=A server port number is required
CswsConnector.TheViewCgiPathMustBeBlankOrBeginWithACharacter=The view cgi path
must be blank, or begin with a / character
CswsConnector.NoCertificatesPresent=No certificates present
Modified:
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_es_ES.properties
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_es_ES.properties?rev=1866889&r1=1866888&r2=1866889&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_es_ES.properties
(original)
+++
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_es_ES.properties
Fri Sep 13 09:24:32 2019
@@ -41,6 +41,7 @@ CswsConnector.DocumentManagementServiceP
CswsConnector.ContentServiceServicePath=ContentService service path:
CswsConnector.MemberServiceServicePath=MemberService service path:
CswsConnector.SearchServiceServicePath=SearchService service path:
+CswsConnector.DataCollection=Data Collection:
CswsConnector.UserNameRegularExpression=Nombre de usuario expresión regular:
CswsConnector.LivelinkUserExpression=Expresión user link directo:
CswsConnector.Parameters=Parà metros:
@@ -58,6 +59,7 @@ CswsConnector.EnterTheContentServiceServ
CswsConnector.TheContentServiceServicePathMustBeginWithACharacter=The
ContentService service path must begin with a / character
CswsConnector.EnterTheSearchServiceServicePath=Enter the SearchService service
path
CswsConnector.TheSearchServiceServicePathMustBeginWithACharacter=The
SearchService service path must begin with a / character
+CswsConnector.DataCollectionIsRequired=Enter the data collection
CswsConnector.AServerPortNumberIsRequired=Se requiere un número de puerto del
servidor
CswsConnector.TheViewCgiPathMustBeBlankOrBeginWithACharacter=El camino vista
cgi debe estar en blanco , o comenzar con un / carácter
CswsConnector.NoCertificatesPresent=Ningún presente de certificados
Modified:
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_fr_FR.properties
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_fr_FR.properties?rev=1866889&r1=1866888&r2=1866889&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_fr_FR.properties
(original)
+++
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_fr_FR.properties
Fri Sep 13 09:24:32 2019
@@ -40,6 +40,7 @@ CswsConnector.EnterTheContentServiceServ
CswsConnector.TheContentServiceServicePathMustBeginWithACharacter=The
ContentService service path must begin with a / character
CswsConnector.EnterTheSearchServiceServicePath=Enter the SearchService service
path
CswsConnector.TheSearchServiceServicePathMustBeginWithACharacter=The
SearchService service path must begin with a / character
+CswsConnector.DataCollectionIsRequired=Enter the data collection
CswsConnector.AServerPortNumberIsRequired=Un numéro de port serveur est
nécessaire
CswsConnector.UserNameRegularExpressionCannotBeNull=Une expression régulière
de nom d'utilisateur ne peut être null
CswsConnector.ServerName=Nom du serveur:
@@ -51,6 +52,7 @@ CswsConnector.DocumentManagementServiceP
CswsConnector.ContentServiceServicePath=ContentService service path:
CswsConnector.MemberServiceServicePath=MemberService service path:
CswsConnector.SearchServiceServicePath=SearchService service path:
+CswsConnector.DataCollection=Data Collection:
CswsConnector.UserNameRegularExpression=Expression régulière du nom
d'utilisateur:
CswsConnector.LivelinkUserExpression=Expression de l'utilisateur Livelink:
CswsConnector.Parameters=Paramètres:
Modified:
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_ja_JP.properties
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_ja_JP.properties?rev=1866889&r1=1866888&r2=1866889&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_ja_JP.properties
(original)
+++
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_ja_JP.properties
Fri Sep 13 09:24:32 2019
@@ -40,6 +40,7 @@ CswsConnector.EnterTheContentServiceServ
CswsConnector.TheContentServiceServicePathMustBeginWithACharacter=The
ContentService service path must begin with a / character
CswsConnector.EnterTheSearchServiceServicePath=Enter the SearchService service
path
CswsConnector.TheSearchServiceServicePathMustBeginWithACharacter=The
SearchService service path must begin with a / character
+CswsConnector.DataCollectionIsRequired=Enter the data collection
CswsConnector.AServerPortNumberIsRequired=ãµã¼ããã¼ãçªå·ãå
¥åãã¦ãã ãã
CswsConnector.UserNameRegularExpressionCannotBeNull=ã¦ã¼ã¶åæ£è¦è¡¨ç¾ãå
¥åãã¦ãã ãã
CswsConnector.ServerName=ãµã¼ãåï¼
@@ -51,6 +52,7 @@ CswsConnector.DocumentManagementServiceP
CswsConnector.ContentServiceServicePath=ContentService service path:
CswsConnector.MemberServiceServicePath=MemberService service path:
CswsConnector.SearchServiceServicePath=SearchService service path:
+CswsConnector.DataCollection=Data Collection:
CswsConnector.UserNameRegularExpression=ã¦ã¼ã¶åæ£è¦è¡¨ç¾å¼ï¼
CswsConnector.LivelinkUserExpression=Livelinkã¦ã¼ã¶å¼ï¼
CswsConnector.Parameters=弿°ï¼
Modified:
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_zh_CN.properties
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_zh_CN.properties?rev=1866889&r1=1866888&r2=1866889&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_zh_CN.properties
(original)
+++
manifoldcf/trunk/connectors/csws/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/csws/common_zh_CN.properties
Fri Sep 13 09:24:32 2019
@@ -41,6 +41,7 @@ CswsConnector.DocumentManagementServiceP
CswsConnector.ContentServiceServicePath=ContentService service path:
CswsConnector.MemberServiceServicePath=MemberService service path:
CswsConnector.SearchServiceServicePath=SearchService service path:
+CswsConnector.DataCollection=Data Collection:
CswsConnector.UserNameRegularExpression=ç¨æ·åæ£å表达å¼:
CswsConnector.LivelinkUserExpression=Livelinkç¨æ·è¡¨è¾¾å¼:
CswsConnector.Parameters=åæ°:
@@ -58,6 +59,7 @@ CswsConnector.EnterTheContentServiceServ
CswsConnector.TheContentServiceServicePathMustBeginWithACharacter=The
ContentService service path must begin with a / character
CswsConnector.EnterTheSearchServiceServicePath=Enter the SearchService service
path
CswsConnector.TheSearchServiceServicePathMustBeginWithACharacter=The
SearchService service path must begin with a / character
+CswsConnector.DataCollectionIsRequired=Enter the data collection
CswsConnector.AServerPortNumberIsRequired=请è¾å
¥æå¡å¨ç«¯å£å·
CswsConnector.TheViewCgiPathMustBeBlankOrBeginWithACharacter=æ¾ç¤ºCGIè·¯å¾é设为空æå§äºâ/âå符
CswsConnector.NoCertificatesPresent=è¯ä¹¦ä¸åå¨
Modified:
manifoldcf/trunk/connectors/csws/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/csws/editConfiguration.js
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/csws/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/csws/editConfiguration.js?rev=1866889&r1=1866888&r2=1866889&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/csws/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/csws/editConfiguration.js
(original)
+++
manifoldcf/trunk/connectors/csws/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/csws/editConfiguration.js
Fri Sep 13 09:24:32 2019
@@ -142,6 +142,13 @@
editconnection.searchserviceservicepath.focus();
return false;
}
+ if (editconnection.datacollection.value == "")
+ {
+
alert("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('CswsConnector.DataCollectionIsRequired'))");
+
SelectTab("$Encoder.bodyJavascriptEscape($ResourceBundle.getString('CswsConnector.Server'))");
+ editconnection.datacollection.focus();
+ return false;
+ }
if (editconnection.viewprotocol.value == "")
{
Modified:
manifoldcf/trunk/connectors/csws/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/csws/editConfiguration_Server.html
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/csws/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/csws/editConfiguration_Server.html?rev=1866889&r1=1866888&r2=1866889&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/csws/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/csws/editConfiguration_Server.html
(original)
+++
manifoldcf/trunk/connectors/csws/connector/src/main/resources/org/apache/manifoldcf/crawler/connectors/csws/editConfiguration_Server.html
Fri Sep 13 09:24:32 2019
@@ -103,6 +103,14 @@
<input type="text" size="32" name="searchserviceservicepath"
value="$Encoder.attributeEscape($SEARCHSERVICESERVICEPATH)"/>
</td>
</tr>
+ <tr>
+ <td class="description">
+
<nobr>$Encoder.bodyEscape($ResourceBundle.getString('CswsConnector.DataCollection'))</nobr>
+ </td>
+ <td class="value">
+ <input type="text" size="32" name="datacollection"
value="$Encoder.attributeEscape($DATACOLLECTION)"/>
+ </td>
+ </tr>
<tr><td class="separator" colspan="2"><hr/></td></tr>
<tr>
@@ -177,5 +185,6 @@
<input type="hidden" name="contentserviceservicepath"
value="$Encoder.attributeEscape($CONTENTSERVICESERVICEPATH)"/>
<input type="hidden" name="memberserviceservicepath"
value="$Encoder.attributeEscape($MEMBERSERVICESERVICEPATH)"/>
<input type="hidden" name="searchserviceservicepath"
value="$Encoder.attributeEscape($SEARCHSERVICESERVICEPATH)"/>
+<input type="hidden" name="datacollection"
value="$Encoder.attributeEscape($DATACOLLECTION)"/>
#end
\ No newline at end of file