Author: piergiorgio
Date: Fri Jun 30 20:48:21 2017
New Revision: 1800459
URL: http://svn.apache.org/viewvc?rev=1800459&view=rev
Log:
- CMIS Output Connector now works but it supports only incremental content
migration (CONNECTORS-1356)
Modified:
manifoldcf/branches/CONNECTORS-1356-2.7.1/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/agents/output/cmisoutput/CmisOutputConnector.java
manifoldcf/branches/CONNECTORS-1356-2.7.1/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/agents/output/cmisoutput/CmisOutputConnectorUtils.java
Modified:
manifoldcf/branches/CONNECTORS-1356-2.7.1/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/agents/output/cmisoutput/CmisOutputConnector.java
URL:
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1356-2.7.1/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/agents/output/cmisoutput/CmisOutputConnector.java?rev=1800459&r1=1800458&r2=1800459&view=diff
==============================================================================
---
manifoldcf/branches/CONNECTORS-1356-2.7.1/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/agents/output/cmisoutput/CmisOutputConnector.java
(original)
+++
manifoldcf/branches/CONNECTORS-1356-2.7.1/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/agents/output/cmisoutput/CmisOutputConnector.java
Fri Jun 30 20:48:21 2017
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InterruptedIOException;
import java.math.BigInteger;
+import java.net.URISyntaxException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.Date;
@@ -54,6 +55,8 @@ import org.apache.chemistry.opencmis.com
import
org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
import
org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
import org.apache.commons.lang.StringUtils;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.utils.URIBuilder;
import org.apache.manifoldcf.agents.interfaces.IOutputAddActivity;
import org.apache.manifoldcf.agents.interfaces.IOutputRemoveActivity;
import org.apache.manifoldcf.agents.interfaces.RepositoryDocument;
@@ -873,6 +876,22 @@ public class CmisOutputConnector extends
return false;
}
+ private String getObjectIdFromDocumentURI(String documentURI) throws
URISyntaxException {
+ String objectId = StringUtils.EMPTY;
+ URIBuilder uriBuilder = new URIBuilder(documentURI);
+ List<NameValuePair> params = uriBuilder.getQueryParams();
+ Iterator<NameValuePair> iteratorParams = params.iterator();
+ while (iteratorParams.hasNext()) {
+ NameValuePair nameValuePair = (NameValuePair)
iteratorParams.next();
+ String name = nameValuePair.getName();
+ if(StringUtils.equals(name, "id")
+ || StringUtils.equals(name,
PropertyIds.OBJECT_ID)) {
+ objectId = nameValuePair.getValue();
+ }
+ }
+ return objectId;
+ }
+
@Override
public int addOrReplaceDocumentWithException(String documentURI,
VersionContext pipelineDescription,
@@ -897,23 +916,41 @@ public class CmisOutputConnector extends
Date lastModificationDate =
document.getModifiedDate();
String mimeType = document.getMimeType();
Long binaryLength = document.getBinaryLength();
-
- // properties
+ String objectId = StringUtils.EMPTY;
+
+ // properties
// (minimal set: name and object type id)
Map<String, Object> properties = new
HashMap<String, Object>();
+
+ //if the source is CMIS Repository Connector we
override the objectId for synchronizing with removeDocument method
+ if(isSourceRepoCmisCompliant(document)) {
+ String[] cmisObjectIdArray = (String[])
document.getField(PropertyIds.OBJECT_ID);
+ if(cmisObjectIdArray!=null &&
cmisObjectIdArray.length>0) {
+ objectId = cmisObjectIdArray[0];
+ }
+
+ //Mapping all the CMIS properties ...
+ /*
+ Iterator<String> fields =
document.getFields();
+ while (fields.hasNext()) {
+ String field = (String)
fields.next();
+ if(!StringUtils.equals(field,
"cm:lastThumbnailModification")
+ ||
!StringUtils.equals(field, "cmis:secondaryObjectTypeIds")) {
+ String[] valuesArray =
(String[]) document.getField(field);
+
properties.put(field,valuesArray);
+ }
+ }
+ */
+ }
+
+ //Agnostic metadata
properties.put(PropertyIds.OBJECT_TYPE_ID,
CMIS_DOCUMENT_TYPE);
properties.put(PropertyIds.NAME, fileName);
properties.put(PropertyIds.CREATION_DATE,
creationDate);
properties.put(PropertyIds.LAST_MODIFICATION_DATE, lastModificationDate);
-
- // TODO add fields management for extended
properties
- // if (isSourceRepoCmisCompliant(document)) {
- // Iterator<String> fields =
document.getFields();
- // while (fields.hasNext()) {
- // String fieldName = (String) fields.next();
- // // ????
- // }
- // }
+
+ ObjectId objId = new ObjectIdImpl(objectId);
+ properties.put(PropertyIds.OBJECT_ID, objId);
// Content Stream
InputStream inputStream =
document.getBinaryStream();
@@ -922,7 +959,7 @@ public class CmisOutputConnector extends
// create a major version
leafParent =
getOrCreateLeafParent(parentDropZoneFolder, creationDate,
Boolean.valueOf(createTimestampTree));
- injectedDocument =
leafParent.createDocument(properties, contentStream, VersioningState.NONE);
+ injectedDocument =
leafParent.createDocument(properties, contentStream, VersioningState.MAJOR);
resultDescription =
DOCUMENT_STATUS_ACCEPTED_DESC;
return DOCUMENT_STATUS_ACCEPTED;
@@ -934,14 +971,8 @@ public class CmisOutputConnector extends
} catch (CmisContentAlreadyExistsException |
CmisNameConstraintViolationException e) {
String documentFullPath = leafParent.getPath() +
CmisOutputConnectorUtils.SLASH + fileName;
- injectedDocument = (Document)
session.getObjectByPath(documentFullPath);
-
- if(injectedDocument != null) {
-
injectedDocument.setContentStream(contentStream, true);
- }
-
Logging.connectors.warn(
- "CMIS: Document already exists: " +
documentFullPath + CmisOutputConnectorUtils.SEP + e.getMessage(), e);
+ "CMIS: Document already exists: " +
documentFullPath);
resultDescription = DOCUMENT_STATUS_ACCEPTED_DESC;
return DOCUMENT_STATUS_ACCEPTED;
@@ -950,21 +981,8 @@ public class CmisOutputConnector extends
resultDescription = DOCUMENT_STATUS_REJECTED_DESC;
throw new ManifoldCFException(e.getMessage(), e);
} finally {
-
- String injectedId = StringUtils.EMPTY;
-
- if (injectedDocument != null) {
- injectedId = injectedDocument.getId();
-
- // override documentURI in a CMIS standard way
for the removeDocument
- // method
- // documentURI -> Node UUID
- documentURI = injectedId;
- }
-
- activities.recordActivity(startTime,
ACTIVITY_INJECTION, document.getBinaryLength(), documentURI, injectedId,
+ activities.recordActivity(startTime,
ACTIVITY_INJECTION, document.getBinaryLength(), documentURI, resultDescription,
resultDescription);
-
}
}
@@ -1019,14 +1037,22 @@ public class CmisOutputConnector extends
}
return folder;
}
-
+
@Override
public void removeDocument(String documentURI, String
outputDescription, IOutputRemoveActivity activities)
throws ManifoldCFException, ServiceInterruption {
getSession();
long startTime = System.currentTimeMillis();
- ObjectId objectId = new ObjectIdImpl(documentURI);
String result = StringUtils.EMPTY;
+ String objectIdValue = StringUtils.EMPTY;
+ try {
+ objectIdValue = getObjectIdFromDocumentURI(documentURI);
+ } catch (URISyntaxException e) {
+ result = DOCUMENT_DELETION_STATUS_REJECTED;
+ throw new ManifoldCFException(e.getMessage(), e);
+ }
+
+ ObjectId objectId = new ObjectIdImpl(objectIdValue);
try {
session.delete(objectId);
result = DOCUMENT_DELETION_STATUS_ACCEPTED;
Modified:
manifoldcf/branches/CONNECTORS-1356-2.7.1/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/agents/output/cmisoutput/CmisOutputConnectorUtils.java
URL:
http://svn.apache.org/viewvc/manifoldcf/branches/CONNECTORS-1356-2.7.1/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/agents/output/cmisoutput/CmisOutputConnectorUtils.java?rev=1800459&r1=1800458&r2=1800459&view=diff
==============================================================================
---
manifoldcf/branches/CONNECTORS-1356-2.7.1/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/agents/output/cmisoutput/CmisOutputConnectorUtils.java
(original)
+++
manifoldcf/branches/CONNECTORS-1356-2.7.1/connectors/cmis/connector/src/main/java/org/apache/manifoldcf/agents/output/cmisoutput/CmisOutputConnectorUtils.java
Fri Jun 30 20:48:21 2017
@@ -56,6 +56,8 @@ public class CmisOutputConnectorUtils {
private static final String SELECT_PREFIX = "select ";
private final static String TOKENIZER_SEP = ",\n\t";
public static final String SLASH = "/";
+ public static final String REPLACE = "?";
+ public static final String SELECT_FOR_REMOVAL = "SELECT * FROM
cmis:document WHERE cmis:name='"+REPLACE+"'";
public static final String getDocumentURL(final Document document, final
Session session)
throws ManifoldCFException {