Author: kwright
Date: Wed Sep 4 16:57:43 2019
New Revision: 1866404
URL: http://svn.apache.org/viewvc?rev=1866404&view=rev
Log:
Add metadata attribute support
Modified:
manifoldcf/branches/CONNECTORS-1566/connectors/csws/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/csws/CswsConnector.java
Modified:
manifoldcf/branches/CONNECTORS-1566/connectors/csws/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/csws/CswsConnector.java
URL:
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1566/connectors/csws/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/csws/CswsConnector.java?rev=1866404&r1=1866403&r2=1866404&view=diff
==============================================================================
---
manifoldcf/branches/CONNECTORS-1566/connectors/csws/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/csws/CswsConnector.java
(original)
+++
manifoldcf/branches/CONNECTORS-1566/connectors/csws/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/csws/CswsConnector.java
Wed Sep 4 16:57:43 2019
@@ -2838,88 +2838,11 @@ public class CswsConnector extends org.a
MetadataPathItem pathItem = item.getPathItem();
if (pathItem != null)
{
- long catID = pathItem.getCatID();
-
- // grab the associated catversion
- // TBD
- /*
- LLValue catVersion = getCatVersion(objID,catID);
- if (catVersion != null)
- {
- // Go through attributes now
- Iterator<String> attrIter = item.getAttributeNames();
- while (attrIter.hasNext())
- {
- String attrName = attrIter.next();
- // Create a unique metadata name
- String metadataName = pathItem.getCatName()+":"+attrName;
- // Fetch the metadata and stuff it into the RepositoryData
structure
- // TBD
- String[] metadataValue = getAttributeValue(catVersion,attrName);
- if (metadataValue != null)
- rd.addField(metadataName,metadataValue);
- else
- Logging.connectors.warn("Csws: Metadata attribute
'"+metadataName+"' does not seem to exist; please correct the job");
- }
- }
- */
+ final long catID = pathItem.getCatID();
+ objInfo.getSpecifiedCategoryAttribute(rd, catID,
pathItem.getCatName());
}
}
- /*
- // New-style code. We have a list of AttributeGroup objects attached to
the item. We iterate over them and
- // use the ones we want.
- final List<? extends AttributeGroup> attributeGroups =
objInfo.getAttributeGroups();
- for (final AttributeGroup g : attributeGroups) {
- // Get the attribute name (qualified? Unqualified? Don't know)
- // TBD
- final String groupName = g.getKey();
- // Get the data values
- final List<? extends DataValue> dataValues = g.getValues();
- for (final DataValue dv : dataValues) {
- // Is this right? TBD
- final String attrName = groupName + ":" + dv.getKey();
- // We only know how to handle certain kinds of attributes, ones
whose types are scalar
- if (dv instanceof StringValue) {
- final String[] attrValues =
((StringValue)dv).getValues().toArray(new String[0]);
- rd.addField(attrName, attrValues);
- } else if (dv instanceof RealValue) {
- final List<? extends Double> realValues =
((RealValue)dv).getValues();
- final String[] reals = new String[realValues.size()];
- int i = 0;
- for (final Double value : realValues) {
- reals[i++] = value.toString();
- }
- rd.addField(attrName, reals);
- } else if (dv instanceof BooleanValue) {
- final List<? extends Boolean> boolValues =
((BooleanValue)dv).getValues();
- final String[] bools = new String[boolValues.size()];
- int i = 0;
- for (final Boolean value : boolValues) {
- bools[i++] = value.toString();
- }
- rd.addField(attrName, bools);
- } else if (dv instanceof DateValue) {
- final List<? extends XMLGregorianCalendar> dateValues =
((DateValue)dv).getValues();
- final Date[] dates = new Date[dateValues.size()];
- int i = 0;
- for (final XMLGregorianCalendar c : dateValues) {
- dates[i++] = new Date(c.toGregorianCalendar().getTimeInMillis());
- }
- rd.addField(attrName, dates);
- } else if (dv instanceof IntegerValue) {
- final List<? extends Long> longValues =
((LongValue)dv).getValues();
- final String[] longs = new String[longValues.size()];
- int i = 0;
- for (final Long value : longValues) {
- longs[i++] = value.toString();
- }
- rd.addField(attrName, longs);
- }
- }
- }
-*/
-
if (actualAcls != null && denyAcls != null)
rd.setSecurity(RepositoryDocument.SECURITY_TYPE_DOCUMENT,actualAcls,denyAcls);
@@ -3052,6 +2975,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.
@@ -3781,6 +3705,59 @@ public class CswsConnector extends org.a
}
/**
+ * Fetch attribute value for a specified categoryID for a given object.
+ */
+ public boolean getSpecifiedCategoryAttribute(final RepositoryDocument rd,
final long catID, final String catName)
+ throws ServiceInterruption, ManifoldCFException {
+ // grab the associated catversion
+ // TBD
+ /*
+ LLValue catVersion = getCatVersion(objID,catID);
+ if (catVersion != null)
+ {
+ // Go through attributes now
+ Iterator<String> attrIter = item.getAttributeNames();
+ while (attrIter.hasNext())
+ {
+ String attrName = attrIter.next();
+ // Create a unique metadata name
+ String metadataName = pathItem.getCatName()+":"+attrName;
+ // Fetch the metadata and stuff it into the RepositoryData
structure
+ // TBD
+ String[] metadataValue =
getAttributeValue(catVersion,attrName);
+ if (metadataValue != null)
+ rd.addField(metadataName,metadataValue);
+ else
+ Logging.connectors.warn("Csws: Metadata attribute
'"+metadataName+"' does not seem to exist; please correct the job");
+ }
+ }
+ */
+ final Node objInfo = getObjectValue();
+ if (objInfo == null) {
+ return false;
+ }
+ final List<? extends AttributeGroup> attributeGroups =
objInfo.getMetadata().getAttributeGroups();
+ for (final AttributeGroup attribute : attributeGroups) {
+ final int index = attribute.getKey().indexOf(".");
+ final String categoryAttributeName = attribute.getDisplayName();
+ //System.out.println("CategoryName **: " +
attribute.getDisplayName());
+ final String categoryId = attribute.getKey().substring(0, index);
+ //System.out.println("CategoryId **: " + categoryId);
+ final long attrCatID = new Long(categoryId).longValue();
+ if (attrCatID == catID) {
+ final List<? extends DataValue> dataValues = attribute.getValues();
+ final String[] valuesToIndex = new String[dataValues.size()];
+ int i = 0;
+ for (final DataValue dataValue : dataValues) {
+ valuesToIndex[i++] = dataValue.getDescription();
+ }
+ rd.addField(catName + "." + categoryAttributeName, valuesToIndex);
+ }
+ }
+ return true;
+ }
+
+ /**
* Returns the object ID specified by the path name.
* @param startPath is the folder name (a string with dots as separators)
*/