View Javadoc

1   package org.kuali.ole.editor.bo;
2   
3   import org.kuali.ole.BibliographicRecordHandler;
4   import org.kuali.ole.docstore.model.xmlpojo.work.bib.marc.ControlField;
5   import org.kuali.ole.docstore.model.xmlpojo.work.bib.marc.DataField;
6   import org.kuali.ole.docstore.model.xmlpojo.work.bib.marc.SubField;
7   import org.kuali.ole.editor.form.MarcEditorForm;
8   import org.kuali.ole.pojo.bib.BibliographicRecord;
9   import org.kuali.rice.krad.web.form.UifFormBase;
10  
11  import java.util.ArrayList;
12  import java.util.Iterator;
13  import java.util.List;
14  import java.util.StringTokenizer;
15  
16  /**
17   * MarcEditorFormDataHandler is the data handler class for Marc Editor
18   */
19  public class MarcEditorFormDataHandler {
20      /**
21       * This method will generate the responseXml,
22       * This method builds the bibliographicRecord,And BibliographicRecordHandler will generate the responseXml.,
23       * @param uifFormBase
24       * @return   String
25       */
26      public String buildBibRecordForDocStore(UifFormBase uifFormBase){
27          MarcEditorForm marcEditorForm = (MarcEditorForm) uifFormBase;
28          BibliographicRecord bibliographicRecord = new BibliographicRecord();
29          bibliographicRecord.setLeader(marcEditorForm.getLeader());
30          bibliographicRecord.setControlfields(buldBibliographicContrlFields(marcEditorForm.getControlFields()));
31          bibliographicRecord.setDatafields(buildBibliographicDataFields(marcEditorForm.getDataFields()));
32          String content = new BibliographicRecordHandler().generateXML(bibliographicRecord);
33          return content;
34      }
35  
36      /**
37       *  This method build the dataFields for bibliographicRecord and it will return List of marcEditorControlField ,
38       *  each marcEditorControlField sets the tag and value get from controlFields
39       * @param dataFields
40       * @return  List<DataField>
41       */
42      private List<DataField> buildBibliographicDataFields(List<MarcEditorDataField> dataFields) {
43          String marcEditorDataFieldValue;
44          List<DataField> marcDataFieldList = new ArrayList<DataField>();
45          for (int i = 0; i < dataFields.size(); i++) {
46              DataField marcDataField = new DataField();
47              List<SubField> marcSubFieldList = new ArrayList<SubField>();
48              marcEditorDataFieldValue = dataFields.get(i).getValue();
49              StringTokenizer str = new StringTokenizer(marcEditorDataFieldValue, "|");
50              while (str.hasMoreTokens()) {
51                  SubField marcSubField = new SubField();
52                  String dataFieldTokenizedVal = str.nextToken();
53                  String code = Character.toString(dataFieldTokenizedVal.charAt(0));
54                  marcSubField.setCode(code);
55                  String value = dataFieldTokenizedVal.substring(1, dataFieldTokenizedVal.length());
56                  marcSubField.setValue(value);
57                  marcSubFieldList.add(marcSubField);
58              }
59              marcDataField.setSubFields(marcSubFieldList);
60              marcDataField.setTag(dataFields.get(i).getTag());
61              marcDataField.setInd1(dataFields.get(i).getInd1());
62              marcDataField.setInd2(dataFields.get(i).getInd2());
63              marcDataFieldList.add(marcDataField);
64          }
65          return marcDataFieldList;
66      }
67  
68      /**
69       * This method build the controlFields for bibliographicRecord and it will return List of marcEditorControlField ,
70       * each marcEditorControlField sets the tag and value get from controlFields
71       * @param controlFields
72       * @return   List<ControlField>
73       */
74      private List<ControlField> buldBibliographicContrlFields(List<MarcEditorControlField> controlFields) {
75          List<ControlField> marcControlFieldList = new ArrayList<ControlField>();
76          for (int i = 0; i < controlFields.size(); i++) {
77              ControlField marcControlField = new ControlField();
78              marcControlField.setTag(controlFields.get(i).getTag());
79              marcControlField.setValue(controlFields.get(i).getValue());
80              marcControlFieldList.add(marcControlField);
81          }
82          return marcControlFieldList;
83      }
84  
85      /**
86       * This method build the controlFields and it will return List of marcEditorControlField ,
87       * each marcEditorControlField sets the tag and value get from controlFields
88       * @param controlFields
89       * @return List<MarcEditorControlField>
90       */
91      public List<MarcEditorControlField> buildMarcEditorControlFields(List<ControlField> controlFields) {
92          List<MarcEditorControlField> marcControlFieldList = new ArrayList<MarcEditorControlField>();
93          for (int i = 0; i < controlFields.size(); i++) {
94              MarcEditorControlField marcEditorControlField = new MarcEditorControlField();
95              marcEditorControlField.setTag(controlFields.get(i).getTag());
96              marcEditorControlField.setValue(controlFields.get(i).getValue());
97              marcControlFieldList.add(marcEditorControlField);
98          }
99          return marcControlFieldList;
100     }
101 
102     /**
103      * This method build the dataFields and it will return List of marcEditorDataField ,
104      * each marcEditorDataField sets the value, and each value has code and value.
105      * @param dataFields
106      * @return   List<MarcEditorDataField>
107      */
108     public List<MarcEditorDataField> buildMarcEditorDataFields(List<DataField> dataFields) {
109         List<MarcEditorDataField> marcEditorDataFields = new ArrayList<MarcEditorDataField>();
110         for (int i = 0; i < dataFields.size(); i++) {
111             MarcEditorDataField marcEditorDataField = new MarcEditorDataField();
112             marcEditorDataField.setTag(dataFields.get(i).getTag());
113             marcEditorDataField.setInd1(dataFields.get(i).getInd1());
114             marcEditorDataField.setInd2(dataFields.get(i).getInd2());
115             List<SubField> subFields = dataFields.get(i).getSubFields();
116             String subFieldVal = null;
117             for (int j = 0; j < subFields.size(); j++) {
118                 String code = subFields.get(j).getCode();
119                 String value = subFields.get(j).getValue();
120                 if (subFieldVal != null)
121                     subFieldVal = subFieldVal + "|" + code + value;
122                 else
123                     subFieldVal = "|" + code + value;
124             }
125             marcEditorDataField.setValue(subFieldVal);
126             marcEditorDataFields.add(marcEditorDataField);
127         }
128         return marcEditorDataFields;
129     }
130 
131     /**
132      * This method will get the uuid from the marcEditorForm,
133      * uifFormBase has type casted in to MarcEditorForm and from the marcEditorForm we will get the controlFields,
134      * iterating the controlFields will return the uuid if tag value equal 001
135      * @param uifFormBase
136      * @return  Returns uuid
137      */
138     public String getUUIDFromForm(UifFormBase uifFormBase) {
139         MarcEditorForm  form = (MarcEditorForm) uifFormBase;
140         List<MarcEditorControlField> controlFields = form.getControlFields();
141         for (Iterator<MarcEditorControlField> iterator = controlFields.iterator(); iterator.hasNext(); ) {
142             MarcEditorControlField controlField = iterator.next();
143             if(controlField.getTag().equals("001")){
144                 return controlField.getValue();
145             }
146         }
147          return null;
148     }
149 }