1 package org.collectionspace.services.imports.nuxeo;
\r
4 import java.util.Map;
\r
5 import org.apache.commons.logging.Log;
\r
6 import org.apache.commons.logging.LogFactory;
\r
7 import org.collectionspace.services.client.PoxPayloadIn;
\r
8 import org.collectionspace.services.client.PoxPayloadOut;
\r
9 import org.collectionspace.services.common.context.ServiceContext;
\r
10 import org.collectionspace.services.nuxeo.client.java.NuxeoClientEmbedded;
\r
11 import org.collectionspace.services.nuxeo.client.java.NuxeoConnectorEmbedded;
\r
12 import org.collectionspace.services.nuxeo.util.NuxeoUtils;
\r
13 import org.nuxeo.ecm.core.api.DocumentModel;
\r
14 import org.nuxeo.ecm.core.api.DocumentRef;
\r
15 import org.nuxeo.ecm.core.api.repository.RepositoryInstance;
\r
16 import org.nuxeo.ecm.core.io.DocumentPipe;
\r
17 import org.nuxeo.ecm.core.io.DocumentReader;
\r
18 import org.nuxeo.ecm.core.io.DocumentTranslationMap;
\r
19 import org.nuxeo.ecm.core.io.DocumentWriter;
\r
20 import org.nuxeo.ecm.core.io.impl.DocumentPipeImpl;
\r
21 import org.nuxeo.ecm.core.io.impl.plugins.DocumentModelWriter;
\r
22 // we use our own override of this: import org.nuxeo.ecm.core.io.impl.plugins.XMLDirectoryReader;
\r
24 // based loosely on package org.nuxeo.ecm.shell.commands.io.ImportCommand;
\r
25 public class ImportCommand {
\r
26 private static final Log logger = LogFactory.getLog(ImportCommand.class);
\r
28 public String run(String src, String dest) throws Exception {
\r
29 File file = new File(src);
\r
30 ///cspace way of configuring client and auth:
\r
31 NuxeoClientEmbedded client = NuxeoConnectorEmbedded.getInstance().getClient();
\r
32 RepositoryInstance repoSession = client.openRepository();
\r
34 return importTree(repoSession, file, dest);
\r
35 } catch (Exception e) {
\r
38 // repository.close();
\r
39 client.releaseRepository(repoSession);
\r
43 String importTree(RepositoryInstance repoSession, File file, String toPath) throws Exception {
\r
44 DocumentReader reader = null;
\r
45 DocumentWriter writer = null;
\r
46 DocumentModel docModel = null;
\r
47 DocumentRef keyDocRef, valueDocRef;
\r
49 StringBuffer dump = new StringBuffer("NO RESULTS");
\r
51 System.out.println("importTree reading file: "+file+(file!=null ? " exists? "+file.exists() : " file param is null"));
\r
52 reader = new LoggedXMLDirectoryReader(file); //our overload of XMLDirectoryReader.
\r
53 writer = new DocumentModelWriter(repoSession, toPath, 10);
\r
54 DocumentPipe pipe = new DocumentPipeImpl(10);
\r
55 // pipe.addTransformer(transformer);
\r
56 pipe.setReader(reader);
\r
57 pipe.setWriter(writer);
\r
58 // FIXME: pipe.run() appears to return at least one type
\r
59 // of Exception that is logged but not thrown; this is a
\r
60 // potential workaround
\r
61 DocumentTranslationMap dtm = pipe.run();
\r
62 Map<DocumentRef,DocumentRef> documentRefs = dtm.getDocRefMap();
\r
63 if (documentRefs.size() > 0) {
\r
65 // Assumes that every import request must necessarily
\r
66 // be attempting to import at least one record.
\r
68 throw new Exception("No records were successfully imported");
\r
70 dump.append("<importedRecords>");
\r
71 for (Map.Entry entry: documentRefs.entrySet()) {
\r
72 keyDocRef = (DocumentRef) entry.getKey();
\r
73 valueDocRef = (DocumentRef) entry.getValue();
\r
74 if (keyDocRef == null || valueDocRef == null) {
\r
77 // System.out.println("value="+entry.getValue());
\r
78 // System.out.println("key="+entry.getKey());
\r
80 docModel = repoSession.getDocument((DocumentRef) entry.getValue());
\r
81 // System.out.println("value doctype="+docModel.getDocumentType().toString());
\r
83 dump.append("<importedRecord>");
\r
84 docModel = repoSession.getDocument(valueDocRef);
\r
85 docType = docModel.getDocumentType().getName();
\r
86 // System.out.println(docType);
\r
87 dump.append("<doctype>"+docType+"</doctype>");
\r
88 dump.append("<csid>"+keyDocRef.toString()+"</id>");
\r
89 dump.append("</importedRecord>");
\r
90 // System.out.println(dump.toString());
\r
93 dump.append("</importedRecords>");
\r
94 } catch (Exception e) {
\r
97 if (reader != null) {
\r
98 dump.append("<report>"+(((LoggedXMLDirectoryReader)reader).report())+"</report>");
\r
101 if (writer != null) {
\r
105 return dump.toString();
\r