]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
cba6569b97001792f61c51e2dfa68e990dc212d1
[tmp/jakarta-migration.git] /
1 package org.collectionspace.services.imports.nuxeo;\r
2 \r
3 import java.io.File;\r
4 import java.util.HashMap;\r
5 import java.util.Map;\r
6 import java.util.TreeSet;\r
7 import org.apache.commons.logging.Log;\r
8 import org.apache.commons.logging.LogFactory;\r
9 import org.collectionspace.services.nuxeo.client.java.NuxeoClientEmbedded;\r
10 import org.collectionspace.services.nuxeo.client.java.NuxeoConnectorEmbedded;\r
11 import org.nuxeo.ecm.core.api.DocumentModel;\r
12 import org.nuxeo.ecm.core.api.DocumentRef;\r
13 import org.nuxeo.ecm.core.api.repository.RepositoryInstance;\r
14 import org.nuxeo.ecm.core.io.DocumentPipe;\r
15 import org.nuxeo.ecm.core.io.DocumentReader;\r
16 import org.nuxeo.ecm.core.io.DocumentTranslationMap;\r
17 import org.nuxeo.ecm.core.io.DocumentWriter;\r
18 import org.nuxeo.ecm.core.io.impl.DocumentPipeImpl;\r
19 import org.nuxeo.ecm.core.io.impl.plugins.DocumentModelWriter;\r
20 // we use our own override of this: import org.nuxeo.ecm.core.io.impl.plugins.XMLDirectoryReader;\r
21 \r
22 // based loosely on package org.nuxeo.ecm.shell.commands.io.ImportCommand;\r
23 public class ImportCommand {\r
24     private static final Log logger = LogFactory.getLog(ImportCommand.class);\r
25 \r
26     public String run(String src, String dest) throws Exception {\r
27         File file = new File(src);\r
28         ///cspace way of configuring client and auth:\r
29         NuxeoClientEmbedded client = NuxeoConnectorEmbedded.getInstance().getClient();\r
30         RepositoryInstance  repoSession = client.openRepository();\r
31         try {\r
32             return importTree(repoSession, file, dest);\r
33         } catch (Exception e) {\r
34             throw e;\r
35         } finally {\r
36 //            repository.close();\r
37             client.releaseRepository(repoSession);\r
38         }\r
39     }\r
40 \r
41     String importTree(RepositoryInstance repoSession, File file, String toPath) throws Exception {\r
42         DocumentReader reader = null;\r
43         DocumentWriter writer = null;\r
44         DocumentModel docModel = null;\r
45         DocumentRef keyDocRef, valueDocRef;\r
46         String docType;\r
47         StringBuffer dump = new StringBuffer();\r
48         Map<String,Integer> recordsImportedForDocType = new HashMap<String,Integer>();\r
49         Integer numRecordsImportedForDocType = new Integer(0);\r
50         int totalRecordsImported = 0;\r
51         try {\r
52             System.out.println("importTree reading file: "+file+(file!=null ? " exists? "+file.exists() : " file param is null"));\r
53             reader = new LoggedXMLDirectoryReader(file);  //our overload of XMLDirectoryReader.\r
54             writer = new DocumentModelWriter(repoSession, toPath, 10);\r
55             DocumentPipe pipe = new DocumentPipeImpl(10);\r
56             // pipe.addTransformer(transformer);\r
57             pipe.setReader(reader);\r
58             pipe.setWriter(writer);\r
59             DocumentTranslationMap dtm = pipe.run();\r
60             Map<DocumentRef,DocumentRef> documentRefs = dtm.getDocRefMap();\r
61             dump.append("<importedRecords>");\r
62             for (Map.Entry entry: documentRefs.entrySet()) {\r
63                 keyDocRef = (DocumentRef) entry.getKey();\r
64                 valueDocRef = (DocumentRef) entry.getValue();\r
65                 if (keyDocRef == null || valueDocRef == null) {\r
66                     continue;\r
67                 }\r
68                 dump.append("<importedRecord>");\r
69                 docModel = repoSession.getDocument(valueDocRef);\r
70                 docType = docModel.getDocumentType().getName();\r
71                 dump.append("<doctype>"+docType+"</doctype>");\r
72                 dump.append("<csid>"+keyDocRef.toString()+"</csid>");\r
73                 dump.append("</importedRecord>");\r
74                 if (recordsImportedForDocType.containsKey(docType)) {\r
75                     numRecordsImportedForDocType = (Integer) recordsImportedForDocType.get(docType);\r
76                     numRecordsImportedForDocType = Integer.valueOf(numRecordsImportedForDocType.intValue() + 1);\r
77                     recordsImportedForDocType.put(docType, numRecordsImportedForDocType);\r
78                 } else {\r
79                     recordsImportedForDocType.put(docType, 1);\r
80                 }\r
81                 totalRecordsImported++;\r
82             }\r
83             dump.append("</importedRecords>");\r
84         } catch (Exception e) {\r
85             throw e;\r
86         } finally {\r
87             dump.append("<totalRecordsImported>"+totalRecordsImported+"</totalRecordsImported>");\r
88             dump.append("<numRecordsImportedByDocType>");\r
89             TreeSet<String> keys = new TreeSet<String>(recordsImportedForDocType.keySet());\r
90             for (String key : keys) {\r
91                 dump.append("<numRecordsImported>");\r
92                 dump.append("<docType>"+key+"</docType>");\r
93                 dump.append("<numRecords>"+recordsImportedForDocType.get(key).intValue()+"</numRecords>");\r
94                 dump.append("</numRecordsImported>");\r
95             }\r
96             dump.append("</numRecordsImportedByDocType>");\r
97             if (reader != null) {\r
98                 dump.append("<report>"+(((LoggedXMLDirectoryReader)reader).report())+"</report>");\r
99                 reader.close();\r
100             }\r
101             if (writer != null) {\r
102                 writer.close();\r
103             }\r
104         }\r
105         return dump.toString();\r
106     }\r
107 }