package com.labs64.netlicensing.schema.converter; import com.labs64.netlicensing.domain.Constants; import com.labs64.netlicensing.domain.vo.Composition; import com.labs64.netlicensing.domain.vo.ValidationResult; import com.labs64.netlicensing.exception.ConversionException; import com.labs64.netlicensing.schema.context.Item; import com.labs64.netlicensing.schema.context.List; import com.labs64.netlicensing.schema.context.Netlicensing.Items; import com.labs64.netlicensing.schema.context.Property; /** * Convert {@link Items} object into {@link ValidationResult} entity. */ public class ItemsToValidationResultConverter implements Converter<Items, ValidationResult> { @Override public ValidationResult convert(final Items source) throws ConversionException { final ValidationResult target = new ValidationResult(); if (source == null) { return target; } for (final Item item : source.getItem()) { if (!Constants.ValidationResult.VALIDATION_RESULT_TYPE.equals(item.getType())) { final String sourceType = (item.getType() != null) ? item.getType() : "<null>"; throw new ConversionException(String.format("Wrong item type '%s', expected '%s'", sourceType, Constants.ValidationResult.VALIDATION_RESULT_TYPE)); } final Composition composition = new Composition(); // convert properties String productModuleNumber = null; for (final Property property : item.getProperty()) { if (Constants.ProductModule.PRODUCT_MODULE_NUMBER.equals(property.getName())) { productModuleNumber = property.getValue(); } else { composition.put(property.getName(), property.getValue()); } } // convert lists if (item.getList() != null) { for (final List list : item.getList()) { composition.put(list.getName(), convertFromList(list)); } } if (productModuleNumber == null) { throw new ConversionException(String.format("Validation item does not contain property '%s'", Constants.ProductModule.PRODUCT_MODULE_NUMBER)); } target.setProductModuleValidation(productModuleNumber, composition); } return target; } /** * @param list * list to be converted * @return converted {@link Composition} object */ private Composition convertFromList(final List list) { final Composition composition = new Composition(); // convert properties if (list.getProperty() != null) { for (final Property property : list.getProperty()) { composition.put(property.getName(), property.getValue()); } } // convert lists if (list.getList() != null) { for (final List sublist : list.getList()) { composition.put(list.getName(), convertFromList(sublist)); } } return composition; } }