- Data exported should have the same description as it is in Backoffice
- The special characters such as ü, ä, etc. should not be replaced to HTML code.
umlaut characters and encoded in the same field:
<alias name="defaultExcelJavaTypeTranslator" alias="excelJavaTypeTranslator"/>
<bean id="defaultExcelJavaTypeTranslator" class="com.msasafety.backoffice.excel.translators.ExcelJavaTypeTranslator" parent="abstractExcelValueTranslator">
<property name="order" value="0"/>
<property name="validators" ref="excelJavaTypeValidators"/>
<property name="excelDateUtils" ref="excelDateUtils"/>
<property name="excelUniqueFilter" ref="uniqueCheckingFilter"/>
<property name="mandatoryFilter" ref="mandatoryCheckingFilter" />
</bean>
package com.msasafety.backoffice.excel.translators;
import de.hybris.platform.core.model.type.AtomicTypeModel;
import de.hybris.platform.core.model.type.AttributeDescriptorModel;
import de.hybris.platform.core.model.type.MapTypeModel;
import java.util.Date;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Required;
import com.hybris.backoffice.excel.data.ImpexHeaderValue;
import com.hybris.backoffice.excel.data.ImpexValue;
import com.hybris.backoffice.excel.data.ImportParameters;
import com.hybris.backoffice.excel.template.filter.ExcelFilter;
import com.hybris.backoffice.excel.util.ExcelDateUtils;
import com.hybris.backoffice.excel.translators.AbstractExcelValueTranslator;
import com.hybris.backoffice.excel.translators.generic.RequiredAttribute;
import com.hybris.backoffice.excel.translators.generic.factory.ImportImpexFactory;
import com.hybris.backoffice.excel.translators.generic.factory.RequiredAttributesFactory;
import de.hybris.platform.core.model.type.AtomicTypeModel;
import org.apache.commons.text.StringEscapeUtils;
/**
* Translates java types like: numbers, boolean values and dates. Dates are exported in format:
* {@link ExcelDateUtils#getDateTimeFormat()}. Dates are exported in {@link ExcelDateUtils#getExportTimeZone()} time
* zone. During import date is treated as in export time zone so it's converted back into system time zone (default is
* UTC).
*/
public class ExcelJavaTypeTranslator extends AbstractExcelValueTranslator
{
private ExcelDateUtils excelDateUtils;
private ExcelFilter excelUniqueFilter;
private ExcelFilter mandatoryFilter;
@Override
public boolean canHandle(final AttributeDescriptorModel attributeDescriptorModel)
{
final boolean isAtomicType = attributeDescriptorModel.getAttributeType() instanceof AtomicTypeModel;
final boolean isLocalizedAtomicField = attributeDescriptorModel.getLocalized()
&& attributeDescriptorModel.getAttributeType() instanceof MapTypeModel
&& ((MapTypeModel) attributeDescriptorModel.getAttributeType()).getReturntype() instanceof AtomicTypeModel;
final boolean isPk = "pk".equals(attributeDescriptorModel.getQualifier());
return !isPk && (isAtomicType || isLocalizedAtomicField);
}
@Override
public Optional exportData(final Object objectToExport)
{
if (objectToExport instanceof Date)
{
return Optional.of(excelDateUtils.exportDate((Date) objectToExport));
}
return Optional.ofNullable(StringEscapeUtils.unescapeHtml4(objectToExport.toString()));
}
@Override
public ImpexValue importValue(final AttributeDescriptorModel attributeDescriptor, final ImportParameters importParameters)
{
if (Date.class.getCanonicalName().equals(attributeDescriptor.getAttributeType().getCode()))
{
return importDate(attributeDescriptor, importParameters);
}
return new ImpexValue(importParameters.getCellValue(), new ImpexHeaderValue.Builder(attributeDescriptor.getQualifier())
.withUnique(excelUniqueFilter.test(attributeDescriptor)).withMandatory(getMandatoryFilter().test(attributeDescriptor))
.withLang(importParameters.getIsoCode()).withQualifier(attributeDescriptor.getQualifier()).build());
}
protected ImpexValue importDate(final AttributeDescriptorModel attributeDescriptor, final ImportParameters importParameters)
{
final String dateToImport = importParameters.getCellValue() != null
? excelDateUtils.importDate(importParameters.getCellValue().toString()) : null;
return new ImpexValue(dateToImport,
new ImpexHeaderValue.Builder(attributeDescriptor.getQualifier())
.withUnique(excelUniqueFilter.test(attributeDescriptor))
.withMandatory(getMandatoryFilter().test(attributeDescriptor)).withLang(importParameters.getIsoCode())
.withDateFormat(excelDateUtils.getDateTimeFormat()).withQualifier(attributeDescriptor.getQualifier()).build());
}
@Override
public String referenceFormat(final AttributeDescriptorModel attributeDescriptor)
{
return Date.class.getCanonicalName().equals(attributeDescriptor.getAttributeType().getCode())
? excelDateUtils.getDateTimeFormat() : StringUtils.EMPTY;
}
public ExcelDateUtils getExcelDateUtils()
{
return excelDateUtils;
}
@Required
public void setExcelDateUtils(final ExcelDateUtils excelDateUtils)
{
this.excelDateUtils = excelDateUtils;
}
public ExcelFilter getExcelUniqueFilter()
{
return excelUniqueFilter;
}
@Required
public void setExcelUniqueFilter(final ExcelFilter excelUniqueFilter)
{
this.excelUniqueFilter = excelUniqueFilter;
}
public ExcelFilter getMandatoryFilter()
{
return mandatoryFilter;
}
@Required
public void setMandatoryFilter(final ExcelFilter mandatoryFilter)
{
this.mandatoryFilter = mandatoryFilter;
}
}
Comments
Post a Comment