/** * Most of the code in the Qalingo project is copyrighted Hoteia and licensed * under the Apache License Version 2.0 (release version 0.8.0) * http://www.apache.org/licenses/LICENSE-2.0 * * Copyright (c) Hoteia, 2012-2014 * http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com * */ package org.hoteia.qalingo.core.service; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; import java.util.List; import org.hoteia.qalingo.core.dao.AttributeDao; import org.hoteia.qalingo.core.domain.AttributeDefinition; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service("attributeService") @Transactional public class AttributeService { @Autowired protected AttributeDao attributeDao; public AttributeDefinition getAttributeDefinitionById(final Long attributeId) { return attributeDao.getAttributeDefinitionById(attributeId); } public AttributeDefinition getAttributeDefinitionById(final String rawAttributeId) { long attributeId = -1; try { attributeId = Long.parseLong(rawAttributeId); } catch (NumberFormatException e) { throw new IllegalArgumentException(e); } return getAttributeDefinitionById(attributeId); } public AttributeDefinition getAttributeDefinitionByCode(final String code) { return attributeDao.getAttributeDefinitionByCode(code); } public List<AttributeDefinition> findAttributeDefinitions() { return attributeDao.findAttributeDefinitions(); } // CATALOG CATEGORY public List<AttributeDefinition> findCatalogCategoryAllAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = attributeDao.findAttributeDefinitionsByObjectType(AttributeDefinition.OBJECT_TYPE_CATALOG_CATEGORY); return sortAttributes(allAttributeDefinitions); } public List<AttributeDefinition> findCatalogCategoryGlobalAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findCatalogCategoryAllAttributeDefinitions(); return sortAttributes(getGlobalAttributeDefinitions(allAttributeDefinitions)); } public List<AttributeDefinition> findCatalogCategoryMarketAreaAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findCatalogCategoryAllAttributeDefinitions(); return sortAttributes(getMarketAreaAttributeDefinitions(allAttributeDefinitions)); } // PRODUCT MARKETING public List<AttributeDefinition> findProductMarketingAllAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = attributeDao.findAttributeDefinitionsByObjectType(AttributeDefinition.OBJECT_TYPE_PRODUCT_MARKETING); return sortAttributes(allAttributeDefinitions); } public List<AttributeDefinition> findProductMarketingGlobalAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findProductMarketingAllAttributeDefinitions(); return sortAttributes(getGlobalAttributeDefinitions(allAttributeDefinitions)); } public List<AttributeDefinition> findProductMarketingMarketAreaAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findProductMarketingAllAttributeDefinitions(); return sortAttributes(getMarketAreaAttributeDefinitions(allAttributeDefinitions)); } // PRODUCT SKU public List<AttributeDefinition> findProductSkuAllAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = attributeDao.findAttributeDefinitionsByObjectType(AttributeDefinition.OBJECT_TYPE_PRODUCT_SKU); return sortAttributes(allAttributeDefinitions); } public List<AttributeDefinition> findProductSkuGlobalAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findProductSkuAllAttributeDefinitions(); return sortAttributes(getGlobalAttributeDefinitions(allAttributeDefinitions)); } public List<AttributeDefinition> findProductSkuMarketAreaAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findProductSkuAllAttributeDefinitions(); return sortAttributes(getMarketAreaAttributeDefinitions(allAttributeDefinitions)); } // CUSTOMER public List<AttributeDefinition> findCustomerAllAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = attributeDao.findAttributeDefinitionsByObjectType(AttributeDefinition.OBJECT_TYPE_CUSTOMER); return sortAttributes(allAttributeDefinitions); } public List<AttributeDefinition> findCustomerGlobalAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findCustomerAllAttributeDefinitions(); return sortAttributes(getGlobalAttributeDefinitions(allAttributeDefinitions)); } public List<AttributeDefinition> findCustomerMarketAreaAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findCustomerAllAttributeDefinitions(); return sortAttributes(getMarketAreaAttributeDefinitions(allAttributeDefinitions)); } // STORE public List<AttributeDefinition> findStoreAllAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = attributeDao.findAttributeDefinitionsByObjectType(AttributeDefinition.OBJECT_TYPE_STORE); return sortAttributes(allAttributeDefinitions); } public List<AttributeDefinition> findStoreGlobalAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findStoreAllAttributeDefinitions(); return sortAttributes(getGlobalAttributeDefinitions(allAttributeDefinitions)); } public List<AttributeDefinition> findStoreMarketAreaAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findStoreAllAttributeDefinitions(); return sortAttributes(getMarketAreaAttributeDefinitions(allAttributeDefinitions)); } // RETAILER public List<AttributeDefinition> findRetailerAllAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = attributeDao.findAttributeDefinitionsByObjectType(AttributeDefinition.OBJECT_TYPE_RETAILER); return sortAttributes(allAttributeDefinitions); } public List<AttributeDefinition> findRetailerGlobalAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findRetailerAllAttributeDefinitions(); return sortAttributes(getGlobalAttributeDefinitions(allAttributeDefinitions)); } public List<AttributeDefinition> findRetailerMarketAreaAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findRetailerAllAttributeDefinitions(); return sortAttributes(getMarketAreaAttributeDefinitions(allAttributeDefinitions)); } // PAYMENT GATEWAY public List<AttributeDefinition> findPaymentGatewayAllAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = attributeDao.findAttributeDefinitionsByObjectType(AttributeDefinition.OBJECT_TYPE_PAYMENT_GATEWAY); return sortAttributes(allAttributeDefinitions); } public List<AttributeDefinition> findPaymentGatewayGlobalAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findPaymentGatewayAllAttributeDefinitions(); return sortAttributes(getGlobalAttributeDefinitions(allAttributeDefinitions)); } public List<AttributeDefinition> findPaymentGatewayMarketAreaAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findPaymentGatewayAllAttributeDefinitions(); return sortAttributes(getMarketAreaAttributeDefinitions(allAttributeDefinitions)); } // MARKET AREA public List<AttributeDefinition> findMarketAreaAllAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = attributeDao.findAttributeDefinitionsByObjectType(AttributeDefinition.OBJECT_TYPE_MARKET_AREA); return sortAttributes(allAttributeDefinitions); } public List<AttributeDefinition> findMarketAreaGlobalAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findMarketAreaAllAttributeDefinitions(); return sortAttributes(getGlobalAttributeDefinitions(allAttributeDefinitions)); } // TAX public List<AttributeDefinition> findTaxAllAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = attributeDao.findAttributeDefinitionsByObjectType(AttributeDefinition.OBJECT_TYPE_TAX); return sortAttributes(allAttributeDefinitions); } public List<AttributeDefinition> findTaxGlobalAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findTaxAllAttributeDefinitions(); return sortAttributes(getGlobalAttributeDefinitions(allAttributeDefinitions)); } public List<AttributeDefinition> findTaxMarketAreaAttributeDefinitions() { List<AttributeDefinition> allAttributeDefinitions = findTaxAllAttributeDefinitions(); return sortAttributes(getMarketAreaAttributeDefinitions(allAttributeDefinitions)); } public void saveOrUpdateAttributeDefinition(final AttributeDefinition attributeDefinition) { attributeDao.saveOrUpdateAttributeDefinition(attributeDefinition); } public void deleteAttributeDefinition(final AttributeDefinition attributeDefinition) { attributeDao.deleteAttributeDefinition(attributeDefinition); } protected List<AttributeDefinition> getGlobalAttributeDefinitions(final List<AttributeDefinition> allAttributeDefinitions) { List<AttributeDefinition> attributeDefinitions = new ArrayList<AttributeDefinition>(); for (AttributeDefinition attributeDefinition : allAttributeDefinitions) { if (attributeDefinition.isGlobal()) { attributeDefinitions.add(attributeDefinition); } } return sortAttributes(attributeDefinitions); } protected List<AttributeDefinition> getMarketAreaAttributeDefinitions(final List<AttributeDefinition> allAttributeDefinitions) { List<AttributeDefinition> attributeDefinitions = new ArrayList<AttributeDefinition>(); for (AttributeDefinition attributeDefinition : allAttributeDefinitions) { if (!attributeDefinition.isGlobal()) { attributeDefinitions.add(attributeDefinition); } } return sortAttributes(attributeDefinitions); } protected List<AttributeDefinition> sortAttributes(List<AttributeDefinition> attributeDefinitions){ if (attributeDefinitions != null) { List<AttributeDefinition> sortedObjects = new LinkedList<AttributeDefinition>(attributeDefinitions); Collections.sort(sortedObjects, new Comparator<AttributeDefinition>() { @Override public int compare(AttributeDefinition o1, AttributeDefinition o2) { if (o1 != null && o2 != null) { int compare = o1.getOrdering().compareTo(o2.getOrdering()); if (compare != 0) { return compare; } return o1.getCode().compareTo(o2.getCode()); } return 0; } }); return sortedObjects; } return null; } }