]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
6754b5e2206d5ffd262ce34d1266bedce8362802
[tmp/jakarta-migration.git] /
1 package org.collectionspace.services.imports.nuxeo;
2
3 import java.io.File;
4 import java.util.Calendar;
5 import java.util.HashMap;
6 import java.util.Map;
7 import java.util.TreeSet;
8
9 import org.collectionspace.services.nuxeo.client.java.NuxeoClientEmbedded;
10 import org.collectionspace.services.nuxeo.client.java.NuxeoConnectorEmbedded;
11 import org.collectionspace.services.nuxeo.client.java.CoreSessionInterface;
12 import org.nuxeo.ecm.core.api.DocumentModel;
13 import org.nuxeo.ecm.core.api.DocumentRef;
14 import org.nuxeo.ecm.core.io.DocumentPipe;
15 import org.nuxeo.ecm.core.io.DocumentReader;
16 import org.nuxeo.ecm.core.io.DocumentTranslationMap;
17 import org.nuxeo.ecm.core.io.DocumentWriter;
18 import org.nuxeo.ecm.core.io.impl.DocumentPipeImpl;
19 import org.nuxeo.ecm.core.io.impl.plugins.DocumentModelWriter;
20 // we use our own override of this: import org.nuxeo.ecm.core.io.impl.plugins.XMLDirectoryReader;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
23
24 // based loosely on package org.nuxeo.ecm.shell.commands.io.ImportCommand;
25 public class ImportCommand {
26
27     private final Logger logger = LoggerFactory.getLogger(ImportCommand.class);
28
29     public String run(String src, String repoName, String workspacesPath, int timeOut) throws Exception {
30         File file = new File(src);
31         ///cspace way of configuring client and auth:
32         NuxeoClientEmbedded client = NuxeoConnectorEmbedded.getInstance().getClient();
33         CoreSessionInterface repoSession = null;
34         try {
35             repoSession = client.openRepository(repoName, timeOut);
36             if (logger.isDebugEnabled()) {
37                 String msg = String.format("Start of import is Local time: %tT", Calendar.getInstance());
38                 logger.debug(msg);
39             }
40             return importTree(repoSession, file, workspacesPath);
41         } catch (Exception e) {
42             throw e;
43         } finally {
44             if (logger.isDebugEnabled()) {
45                 String msg = String.format("End of import is Local time: %tT", Calendar.getInstance());
46                 logger.debug(msg);
47             }
48             client.releaseRepository(repoSession);
49         }
50     }
51
52     String importTree(CoreSessionInterface repoSession, File file, String toPath) throws Exception {
53         Exception failed = null;
54         DocumentReader reader = null;
55         DocumentWriter writer = null;
56         DocumentModel docModel = null;
57         DocumentRef keyDocRef, valueDocRef;
58         String docType;
59         StringBuffer dump = new StringBuffer();
60         Map<String, Integer> recordsImportedForDocType = new HashMap<String, Integer>();
61         Integer numRecordsImportedForDocType = new Integer(0);
62         int totalRecordsImported = 0;
63         try {
64             if (logger.isInfoEnabled()) {
65                 logger.info("importTree reading file: " + file + (file != null ? " exists? " + file.exists() : " file param is null"));
66             }
67             reader = new LoggedXMLDirectoryReader(file);  //our overload of XMLDirectoryReader.
68             writer = new DocumentModelWriter(repoSession.getCoreSession(), toPath, 10);
69             DocumentPipe pipe = new DocumentPipeImpl(10);
70             // pipe.addTransformer(transformer);
71             pipe.setReader(reader);
72             pipe.setWriter(writer);
73             DocumentTranslationMap dtm = pipe.run();
74             Map<DocumentRef, DocumentRef> documentRefs = dtm.getDocRefMap(); // FIXME: Should be checking for null here!
75             dump.append("<importedRecords>");
76             for (Map.Entry<DocumentRef, DocumentRef> entry : documentRefs.entrySet()) {
77                 keyDocRef = (DocumentRef) entry.getKey();
78                 valueDocRef = (DocumentRef) entry.getValue();
79                 if (keyDocRef == null || valueDocRef == null) {
80                     continue;
81                 }
82                 dump.append("<importedRecord>");
83                 docModel = repoSession.getDocument(valueDocRef);
84                 docType = docModel.getDocumentType().getName();
85                 dump.append("<doctype>" + docType + "</doctype>");
86                 dump.append("<csid>" + keyDocRef.toString() + "</csid>");
87                 dump.append("</importedRecord>");
88                 if (recordsImportedForDocType.containsKey(docType)) {
89                     numRecordsImportedForDocType = (Integer) recordsImportedForDocType.get(docType);
90                     numRecordsImportedForDocType = Integer.valueOf(numRecordsImportedForDocType.intValue() + 1);
91                     recordsImportedForDocType.put(docType, numRecordsImportedForDocType);
92                 } else {
93                     recordsImportedForDocType.put(docType, 1);
94                 }
95                 totalRecordsImported++;
96             }
97             dump.append("</importedRecords>");
98         } catch (Exception e) {
99             failed = e;
100             throw failed;
101         } finally {
102             String status = failed == null ? "Success" : "Failed";
103             dump.append("<status>" + status + "</status>");
104             dump.append("<totalRecordsImported>" + totalRecordsImported + "</totalRecordsImported>");
105             dump.append("<numRecordsImportedByDocType>");
106             TreeSet<String> keys = new TreeSet<String>(recordsImportedForDocType.keySet());
107             for (String key : keys) {
108                 dump.append("<numRecordsImported>");
109                 dump.append("<docType>" + key + "</docType>");
110                 dump.append("<numRecords>" + recordsImportedForDocType.get(key).intValue() + "</numRecords>");
111                 dump.append("</numRecordsImported>");
112             }
113             dump.append("</numRecordsImportedByDocType>");
114             if (reader != null) {
115                 dump.append("<report>" + (((LoggedXMLDirectoryReader) reader).report()) + "</report>");
116                 reader.close();
117             }
118             if (writer != null) {
119                 writer.close();
120             }
121
122             if (failed != null) {
123                 String msg = "The Import service encountered an exception: " + failed.getLocalizedMessage();
124                 logger.error(msg, failed);
125             }
126         }
127         return dump.toString();
128     }
129 }