View Javadoc

1   package org.kuali.ole.docstore.repository;
2   
3   import org.kuali.ole.docstore.OleDocStoreException;
4   import org.kuali.ole.docstore.document.WorkInstanceDocumentManager;
5   import org.kuali.ole.docstore.model.xmlpojo.ingest.RequestDocument;
6   import org.kuali.ole.docstore.model.xmlpojo.work.instance.oleml.InstanceCollection;
7   import org.kuali.ole.docstore.model.xmlpojo.work.instance.oleml.Item;
8   import org.kuali.ole.docstore.model.xstream.work.instance.oleml.WorkItemOlemlRecordProcessor;
9   import org.kuali.ole.docstore.process.ProcessParameters;
10  import org.kuali.ole.repository.NodeHandler;
11  import org.slf4j.Logger;
12  import org.slf4j.LoggerFactory;
13  
14  import javax.jcr.Node;
15  import javax.jcr.NodeIterator;
16  import javax.jcr.RepositoryException;
17  import javax.jcr.Session;
18  import java.io.FileNotFoundException;
19  import java.util.ArrayList;
20  import java.util.List;
21  
22  import static org.kuali.ole.docstore.process.ProcessParameters.*;
23  
24  /**
25   * User: tirumalesh.b
26   * Date: 4/9/12 Time: 1:00 PM
27   */
28  public class WorkInstanceNodeManager
29          extends CustomNodeManager
30          implements NodeManager {
31      private static WorkInstanceNodeManager ourInstance = new WorkInstanceNodeManager();
32      private static Logger                  LOG         = LoggerFactory.getLogger(WorkInstanceNodeManager.class);
33  
34      public static WorkInstanceNodeManager getInstance() {
35          return ourInstance;
36      }
37  
38      private WorkInstanceNodeManager() {
39          super();
40          numLevels = 2;
41      }
42  
43      public String getParentNodePath() {
44          return "/work/instance";
45      }
46  
47      @Override
48      public Node createFileNode(RequestDocument document, String name, Node parentNode, Session session)
49              throws OleDocStoreException {
50          Node instanceNode = null;
51          WorkInstanceDocumentManager resolver = WorkInstanceDocumentManager.getInstance();
52          List<String> docUUIDs = new ArrayList<String>();
53          List<RequestDocument> resolvedDocs = resolver.getParsedHoldingsNItemDocuments(document, docUUIDs);
54          CustomNodeManager nodeManager = CustomNodeManager.getInstance();
55          try {
56              instanceNode = initLevelNode(NODE_INSTANCE, parentNode, false, session);
57              Node holdingsNode = initNonStaticNode(NODE_HOLDINGS, instanceNode);
58              document.setUuid(instanceNode.getIdentifier());
59  
60              Node fileNode = nodeManager.createFileNode(resolvedDocs.get(0), FILE_INSTANCE, instanceNode, session);
61              resolver.modifyDocumentContent(resolvedDocs.get(0), fileNode.getIdentifier(), instanceNode.getIdentifier());
62              createContentNode(fileNode, resolvedDocs.get(0), parentNode, session);
63  
64              fileNode = nodeManager.createFileNode(resolvedDocs.get(1), FILE_HOLDINGS, holdingsNode, session);
65              resolver.modifyDocumentContent(resolvedDocs.get(1), fileNode.getIdentifier(), holdingsNode.getIdentifier());
66              createContentNode(fileNode, resolvedDocs.get(1), parentNode, session);
67  
68              fileNode = nodeManager.createFileNode(resolvedDocs.get(2), FILE_SOURCE_HOLDINGS, holdingsNode, session);
69              resolver.modifyDocumentContent(resolvedDocs.get(2), fileNode.getIdentifier(), holdingsNode.getIdentifier());
70              createContentNode(fileNode, resolvedDocs.get(2), parentNode, session);
71  
72  
73              for (int i = 3; i < resolvedDocs.size(); i++) {
74                  fileNode = nodeManager.createFileNode(resolvedDocs.get(i), FILE_ITEM, holdingsNode, session);
75                  resolver.modifyDocumentContent(resolvedDocs.get(i), fileNode.getIdentifier(),
76                                                 holdingsNode.getIdentifier());
77                  createContentNode(fileNode, resolvedDocs.get(i), parentNode, session);
78              }
79  
80              ((InstanceCollection) document.getContent().getContentObject()).getInstance().get(0).setInstanceIdentifier(
81                      instanceNode.getIdentifier());
82          }
83          catch (Exception e) {
84              LOG.info(e.getMessage(), e);
85          }
86          return instanceNode;
87      }
88  
89      public void ingestItemRecForInstance(RequestDocument reqDoc, Session session) throws OleDocStoreException {
90          try {
91              Node nodeByUUID = getNodeByUUID(session, reqDoc.getId());
92              Node holdingsNode = nodeByUUID.getNode(ProcessParameters.NODE_HOLDINGS);
93              NodeHandler nodeHandler = new NodeHandler();
94  
95              for (RequestDocument linkedItemDocument : reqDoc.getLinkedRequestDocuments()) {
96                  WorkItemOlemlRecordProcessor recordProcessor = new WorkItemOlemlRecordProcessor();
97                  Item item = recordProcessor.fromXML(linkedItemDocument.getContent().getContent());
98                  linkedItemDocument.getContent().setContentObject(item);
99                  String uuid = (nodeHandler.initFileNode(linkedItemDocument, FILE_ITEM, holdingsNode, session))
100                         .getIdentifier();
101                 linkedItemDocument.setId(uuid);
102             }
103         }
104         catch (Exception e) {
105             LOG.info(e.getMessage());
106             throw new OleDocStoreException(e.getMessage(), e);
107         }
108     }
109 
110 
111     public Node getNodeByUUID(Session newSession, String uuid) throws OleDocStoreException {
112         return CustomNodeManager.getInstance().getNodeByUUID(newSession, uuid);
113     }
114 
115 
116     public String getInstanceData(Node instanceNode)
117             throws RepositoryException, OleDocStoreException, FileNotFoundException {
118         String instance = "";
119         String holdings = "";
120         String sourceHolding = "";
121         List<String> items = new ArrayList<String>();
122         StringBuffer stringBuffer = new StringBuffer();
123         NodeIterator nodeIterator = instanceNode.getNodes();
124         Node node = null;
125         while (nodeIterator.hasNext()) {
126             node = nodeIterator.nextNode();
127             if (node.getName().equalsIgnoreCase(ProcessParameters.FILE_INSTANCE)) {
128                 instance = getData(node);
129             }
130             else if (node.getName().equalsIgnoreCase(ProcessParameters.NODE_HOLDINGS)) {
131                 NodeIterator nodes = node.getNodes();
132                 while (nodes.hasNext()) {
133                     Node node1 = nodes.nextNode();
134                     if (node1.getName().equalsIgnoreCase(ProcessParameters.FILE_HOLDINGS)) {
135                         holdings = getData(node1);
136                     }
137                     else if (node1.getName().equalsIgnoreCase(ProcessParameters.FILE_SOURCE_HOLDINGS)) {
138                         if (getData(node1) != null && getData(node1).length() > 0) {
139                             sourceHolding = getData(node1);
140                         }
141                     }
142                     else if (node1.getName().equalsIgnoreCase(ProcessParameters.FILE_ITEM)) {
143                         items.add(getData(node1));
144                     }
145                 }
146 
147             }
148         }
149         stringBuffer
150                 .append(instance.substring(instance.indexOf("<instanceCollection>"), instance.indexOf("</instance>")));
151         if (!holdings.equalsIgnoreCase("<null/>")) {
152             stringBuffer.append(holdings);
153         }
154         if (!sourceHolding.equalsIgnoreCase("<null/>")) {
155             stringBuffer.append(sourceHolding);
156         }
157         stringBuffer.append("<items>");
158         for (String str : items) {
159             if (!str.equalsIgnoreCase("<null/>")) {
160                 stringBuffer.append(str);
161             }
162         }
163         stringBuffer.append("</items>");
164         stringBuffer.append("</instance>");
165         stringBuffer.append("</instanceCollection>");
166         return stringBuffer.toString();
167     }
168 
169     public String getXMLOnlyForInstanceType(Node instanceNode)
170             throws RepositoryException, OleDocStoreException, FileNotFoundException {
171         NodeIterator nodeIterator = instanceNode.getNodes();
172         Node node = null;
173         String instance = "";
174         while (nodeIterator.hasNext()) {
175             node = nodeIterator.nextNode();
176             if (node.getName().equalsIgnoreCase("instanceFile")) {
177                 instance = getData(node);
178                // System.out.println("instanceeeeeeeeeeeeeeeeeeee " + instance);
179             }
180         }
181         return instance;
182     }
183 }