]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
b68ef11a3fe438447c8e41d440b7cd1a226d9171
[tmp/jakarta-migration.git] /
1 package org.collectionspace.services.imports.nuxeo;\r
2 \r
3 import java.io.File;\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
23 \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
27 \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
33         try {\r
34             return importTree(repoSession, file, dest);\r
35         } catch (Exception e) {\r
36             throw e;\r
37         } finally {\r
38 //            repository.close();\r
39             client.releaseRepository(repoSession);\r
40         }\r
41     }\r
42 \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
48         String docType;\r
49         StringBuffer dump = new StringBuffer("NO RESULTS");\r
50         try {\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
64                 dump.setLength(0);\r
65                 // Assumes that every import request must necessarily\r
66                 // be attempting to import at least one record.\r
67             } else {\r
68                 throw new Exception("No records were successfully imported");\r
69             }\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
75                     continue;\r
76                 }\r
77                 // System.out.println("value="+entry.getValue());\r
78                 // System.out.println("key="+entry.getKey());\r
79                 \r
80                 docModel = repoSession.getDocument((DocumentRef) entry.getValue());\r
81                 // System.out.println("value doctype="+docModel.getDocumentType().toString());\r
82 \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
91 \r
92             }\r
93             dump.append("</importedRecords>");\r
94         } catch (Exception e) {\r
95             throw e;\r
96         } finally {\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 }