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