001
014
015 package com.liferay.portlet.dynamicdatalists.util;
016
017 import com.liferay.portal.kernel.util.LocaleUtil;
018 import com.liferay.portal.kernel.util.OrderByComparator;
019 import com.liferay.portal.kernel.util.StringPool;
020 import com.liferay.portal.kernel.xml.Document;
021 import com.liferay.portal.kernel.xml.Element;
022 import com.liferay.portal.kernel.xml.SAXReaderUtil;
023 import com.liferay.portlet.dynamicdatalists.model.DDLRecord;
024 import com.liferay.portlet.dynamicdatalists.model.DDLRecordSet;
025 import com.liferay.portlet.dynamicdatalists.model.DDLRecordVersion;
026 import com.liferay.portlet.dynamicdatalists.service.DDLRecordLocalServiceUtil;
027 import com.liferay.portlet.dynamicdatalists.service.DDLRecordSetServiceUtil;
028 import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
029 import com.liferay.portlet.dynamicdatamapping.storage.Field;
030 import com.liferay.portlet.dynamicdatamapping.storage.FieldConstants;
031 import com.liferay.portlet.dynamicdatamapping.storage.Fields;
032 import com.liferay.portlet.dynamicdatamapping.storage.StorageEngineUtil;
033
034 import java.io.Serializable;
035
036 import java.util.List;
037 import java.util.Map;
038
039
043 public class DDLXMLExporter extends BaseDDLExporter {
044
045 protected void addFieldElement(
046 Element fieldsElement, String label, Serializable value, int status) {
047
048 Element fieldElement = fieldsElement.addElement("field");
049
050 Element labelElement = fieldElement.addElement("label");
051
052 labelElement.addText(label);
053
054 Element valueElement = fieldElement.addElement("value");
055
056 valueElement.addText(String.valueOf(value));
057
058 Element statusElement = fieldElement.addElement("status");
059
060 statusElement.addText(getStatusMessage(status));
061 }
062
063 @Override
064 protected byte[] doExport(
065 long recordSetId, int status, int start, int end,
066 OrderByComparator orderByComparator)
067 throws Exception {
068
069 DDLRecordSet recordSet = DDLRecordSetServiceUtil.getRecordSet(
070 recordSetId);
071
072 DDMStructure ddmStructure = recordSet.getDDMStructure();
073
074 Map<String, Map<String, String>> fieldsMap = ddmStructure.getFieldsMap(
075 LocaleUtil.toLanguageId(getLocale()));
076
077 Document document = SAXReaderUtil.createDocument();
078
079 Element rootElement = document.addElement("root");
080
081 List<DDLRecord> records = DDLRecordLocalServiceUtil.getRecords(
082 recordSetId, status, start, end, orderByComparator);
083
084 for (DDLRecord record : records) {
085 Element fieldsElement = rootElement.addElement("fields");
086
087 DDLRecordVersion recordVersion = record.getRecordVersion();
088
089 Fields fields = StorageEngineUtil.getFields(
090 recordVersion.getDDMStorageId());
091
092 for (Map<String, String> fieldMap : fieldsMap.values()) {
093 String label = fieldMap.get(FieldConstants.LABEL);
094 String name = fieldMap.get(FieldConstants.NAME);
095
096 String value = StringPool.BLANK;
097
098 if (fields.contains(name)) {
099 Field field = fields.get(name);
100
101 if (field.isPrivate()) {
102 continue;
103 }
104
105 value = field.getRenderedValue(getLocale());
106 }
107
108 addFieldElement(
109 fieldsElement, label, value, recordVersion.getStatus());
110 }
111 }
112
113 String xml = document.asXML();
114
115 return xml.getBytes();
116 }
117
118 }