001package org.kuali.ole.describe.bo; 002 003import org.apache.commons.lang.StringUtils; 004import org.jfree.util.Log; 005import org.kuali.ole.UnQualifiedDublinRecordHandler; 006import org.kuali.ole.describe.form.EditorForm; 007import org.kuali.ole.docstore.model.enums.DocFormat; 008import org.kuali.ole.docstore.model.xmlpojo.work.bib.dublin.DCValue; 009import org.kuali.ole.docstore.model.xmlpojo.work.bib.dublin.WorkBibDublinRecord; 010import org.kuali.ole.docstore.model.xmlpojo.work.bib.dublin.unqualified.*; 011import org.kuali.ole.pojo.dublin.unqualified.UnQualifiedDublinRecord; 012import org.kuali.rice.krad.web.form.UifFormBase; 013 014import java.util.ArrayList; 015import java.util.List; 016 017/** 018 * DublinEditorFormDataHandler is the data handler class for Dublin Editor 019 */ 020public class WorkDublinEditorFormDataHandler { 021 /** 022 * This method returns response Xml from the docStore for Duplin Record, This method will ingest new record to docstore if uuid is null, else it will update existing record. 023 * the toXml method in UnQualifiedDublinRecordHandler will convert the unQualifiedDublinRecord in to responseXml. 024 * 025 * @param uifFormBase 026 * @param uuid 027 * @return content 028 */ 029 public String buildDublinRecordForDocStore(UifFormBase uifFormBase, String uuid) { 030 031 String content = ""; 032 EditorForm dublinEditorForm = (EditorForm) uifFormBase; 033 if (dublinEditorForm.getDocFormat().equals(DocFormat.DUBLIN_UNQUALIFIED.getCode())) { 034 UnQualifiedDublinRecord unQualifiedDublinRecord = new UnQualifiedDublinRecord(); 035 if (uuid != null && !uuid.trim().equals("")) { 036 unQualifiedDublinRecord.setListRecords(buildDublinDCValuesForEdit(dublinEditorForm)); 037 } else { 038 unQualifiedDublinRecord.setListRecords(buildDublinDCValues(dublinEditorForm.getDublinFieldList())); 039 } 040 dublinEditorForm.setTitle(buildDublinUnqTitleField(dublinEditorForm, unQualifiedDublinRecord)); 041 content = new UnQualifiedDublinRecordHandler().toXml(unQualifiedDublinRecord); 042 } else if (dublinEditorForm.getDocFormat().equals(DocFormat.DUBLIN_CORE.getCode())) { 043 //System.out.println("Enter Dublin Save"); 044 Log.info("Enter Dublin Save"); 045 //TODO: code for building content. 046 // WorkBibDublinRecord workBibDublinRecord = new WorkBibDublinRecord(); 047 // List<DCValue> dcValues = new ArrayList<DCValue>(); 048 // DCValue dcValue = new DCValue(); 049 // dcValue.setQualifier("contributor"); 050 // dcValue.setElement("contributor"); 051 // dcValue.setValue("contributor"); 052 // dcValues.add(dcValue); 053 // workBibDublinRecord.setDcValues(dcValues); 054 // content = new QualifiedDublinRecordHandler().toXml(workBibDublinRecord); 055 } 056 return content; 057 } 058 059 /** 060 * This method returns List of DublinDcValue records, 061 * In this method each record contains a metadata with oaiDcDocList, 062 * each oaiDcDocList contains list of oaiDcDoc with tagName and value. 063 * 064 * @param dublinFields 065 * @return listRecords 066 */ 067 private ListRecords buildDublinDCValues(List<WorkDublinEditorField> dublinFields) { 068 ListRecords listRecords = new ListRecords(); 069 Record record = new Record(); 070 MetaData metaData = new MetaData(); 071 OaiDcDoc oaiDcDoc = new OaiDcDoc(); 072 List<OaiDcDoc> oaiDcDocList = new ArrayList<OaiDcDoc>(); 073 for (int i = 0; i < dublinFields.size(); i++) { 074 if (!dublinFields.get(i).getElement().equalsIgnoreCase("default")) { 075 oaiDcDoc.put(dublinFields.get(i).getElement(), dublinFields.get(i).getValue()); 076 } 077 } 078 oaiDcDocList.add(oaiDcDoc); 079 metaData.setOaiDcDocs(oaiDcDocList); 080 record.setMetadata(metaData); 081 listRecords.addRecord(record); 082 return listRecords; 083 } 084 085 private ListRecords buildDublinDCValues1(List<WorkDublinEditorField> dublinFields) { 086 ListRecords listRecords = new ListRecords(); 087 Record record = new Record(); 088 MetaData metaData = new MetaData(); 089 OaiDcDoc oaiDcDoc = new OaiDcDoc(); 090 List<OaiDcDoc> oaiDcDocList = new ArrayList<OaiDcDoc>(); 091 for (int i = 0; i < dublinFields.size(); i++) { 092 if (!dublinFields.get(i).getElement().equalsIgnoreCase("default")) { 093 oaiDcDoc.put(dublinFields.get(i).getElement(), dublinFields.get(i).getValue()); 094 } 095 } 096 oaiDcDocList.add(oaiDcDoc); 097 metaData.setOaiDcDocs(oaiDcDocList); 098 record.setMetadata(metaData); 099 listRecords.addRecord(record); 100 return listRecords; 101 } 102 103 /** 104 * This method returns List of DublinEditorField, 105 * each dublinEditorField object sets the tagName and value got from unQualifiedDublinRecord. 106 * 107 * @param unQualifiedDublinRecord 108 * @return dublinEditorFieldList 109 */ 110 111 public List<WorkDublinEditorField> buildDublinUnqEditorFields(EditorForm editorForm, UnQualifiedDublinRecord unQualifiedDublinRecord) { 112 ListRecords listRecords = unQualifiedDublinRecord.getListRecords(); 113 List<Tag> tagList = listRecords.getRecords().get(0).getMetadata().getOaiDcDocs().get(0).getAllTags(); 114 // List<WorkDublinEditorField> dublinEditorFieldList = editorForm.getDublinFieldList(); 115 List<WorkDublinEditorField> dublinEditorFieldList = new ArrayList<WorkDublinEditorField>(); 116 for (int i = 0; i < tagList.size(); i++) { 117 WorkDublinEditorField dublinEditorField = new WorkDublinEditorField(); 118 dublinEditorField.setElement(tagList.get(i).getName()); 119 dublinEditorField.setValue(tagList.get(i).getValue()); 120 dublinEditorFieldList.add(dublinEditorField); 121 } 122 123 return dublinEditorFieldList; 124 } 125 126 public String buildDublinUnqTitleField(EditorForm editorForm, UnQualifiedDublinRecord unQualifiedDublinRecord) { 127 128 String title = ""; 129 String author = ""; 130 ListRecords listRecords = unQualifiedDublinRecord.getListRecords(); 131 List<Tag> tagList = listRecords.getRecords().get(0).getMetadata().getOaiDcDocs().get(0).getAllTags(); 132 List<WorkDublinEditorField> dublinEditorFieldList = new ArrayList<WorkDublinEditorField>(); 133 for (Tag tag : tagList) { 134 if (tag.getName().contains("title")) { 135 if (!(StringUtils.isBlank(tag.getValue()))) { 136 title = tag.getValue(); 137 } 138 } 139 140 if (tag.getName().contains("creator")) { 141 if (!StringUtils.isBlank(tag.getValue())) { 142 author = tag.getValue(); 143 } 144 } 145 } 146 return title + " / " + author; 147 148 } 149 150 public List<WorkDublinEditorField> buildDublinEditorFields(EditorForm editorForm, WorkBibDublinRecord workBibDublinRecord) { 151 List<DCValue> listRecords = workBibDublinRecord.getDcValues(); 152 List<WorkDublinEditorField> dublinEditorFieldList = editorForm.getDublinFieldList(); 153 for (int i = 0; i < listRecords.size(); i++) { 154 WorkDublinEditorField dublinEditorField = new WorkDublinEditorField(); 155 dublinEditorField.setElement(listRecords.get(i).getElement()); 156 dublinEditorField.setValue(listRecords.get(i).getValue()); 157 dublinEditorFieldList.add(dublinEditorField); 158 } 159 return dublinEditorFieldList; 160 } 161 162 /** 163 * This method returns updated ListRecords to be set in UnQualifiedDublinRecord to update the existing docStore records. 164 * In this method each record contains updated metadata with oaiDcDocList, 165 * each oaiDcDocList contains updated list of oaiDcDoc with tagName and value. 166 * 167 * @param dublinEditorForm 168 * @return listRecords 169 */ 170 private ListRecords buildDublinDCValuesForEdit(EditorForm dublinEditorForm) { 171 ListRecords listRecords = new ListRecords(); 172 String element = ""; 173 String value = ""; 174 Record record = new Record(); 175 List<String> elementList = new ArrayList<String>(); 176 MetaData metaData = new MetaData(); 177 OaiDcDoc oaiDcDoc = new OaiDcDoc(); 178 List<OaiDcDoc> oaiDcDocList = new ArrayList<OaiDcDoc>(); 179 List<WorkDublinEditorField> newElementList = dublinEditorForm.getDublinFieldList(); 180 List<WorkDublinEditorField> existingElementList = dublinEditorForm.getExistingDublinFieldList(); 181 for (int i = 0; i < newElementList.size(); i++) { 182 if (!newElementList.get(i).getElement().equalsIgnoreCase("default")) { 183 element = newElementList.get(i).getElement(); 184 value = newElementList.get(i).getValue(); 185 if (!elementList.contains(element)) { 186 elementList.add(element); 187 oaiDcDoc.put(element, value); 188 } 189 190 } 191 } 192// for (int i = 0; i < existingElementList.size(); i++) { 193// if (!existingElementList.get(i).getElement().equalsIgnoreCase("default")) { 194// oaiDcDoc.put(existingElementList.get(i).getElement(), existingElementList.get(i).getValue()); 195// } 196// } 197 oaiDcDocList.add(oaiDcDoc); 198 metaData.setOaiDcDocs(oaiDcDocList); 199 record.setMetadata(metaData); 200 listRecords.addRecord(record); 201 return listRecords; 202 } 203 204}