/**
* Persists the specified category.
*/
private void persist(XResourceCategory sourceCategory, Category parent) {
Category targetCategory = new Category();
targetCategory.setLeafCategory(sourceCategory.getSubcategories().isEmpty());
targetCategory.setParent(parent);
targetCategory.setAlias(sourceCategory.getAlias() != null ? sourceCategory.getAlias() :
parent != null ? parent.getAlias() : null);
Collection<XProperty> sourceProperties = sourceCategory.getProperties();
Collection<Property> targetProperties = targetCategory.getProperties();
for(XProperty sourceProperty: sourceProperties) {
Property targetProperty = new Property();
targetProperty.setCategory(targetCategory);
targetProperty.setName(sourceProperty.getName());
PropertyType propertyType = (PropertyType) propertyTypeDAO.getById(sourceProperty.getPropertyType());
if(propertyType == null) {
throw new BusinessLogicException("Property type is unknown: '" + sourceProperty.getPropertyType() + "'");
}
targetProperty.setPropertyType(propertyType);
targetProperty.setDictionary(sourceProperty.getDictonary());
//Setup property titles
PropertyStrings propertyStrings = new PropertyStrings();
propertyStrings.setTarget(targetProperty);
for(XLocalizedString title: sourceProperty.getTitles()) {
LocalizationUtils.setValue(propertyStrings, title.getValue(), title.getLang());
}
targetProperty.setTitles(propertyStrings);
targetProperty.setContainerType(0);
targetProperties.add(targetProperty);
}
//Setup category titles
CategoryStrings categoryStrings = new CategoryStrings();
categoryStrings.setTarget(targetCategory);
for(XLocalizedString title: sourceCategory.getTitles()){
LocalizationUtils.setValue(categoryStrings, title.getValue(), title.getLang());
}
targetCategory.setTitles(categoryStrings);
//Save the new category
targetCategory = categoryDAO.save(targetCategory);
//Iterate through the subcategories