package com.salesmanager.core.business.services.content;
import java.util.List;
import com.salesmanager.core.business.exception.ServiceException;
import com.salesmanager.core.business.services.common.generic.SalesManagerEntityService;
import com.salesmanager.core.model.content.Content;
import com.salesmanager.core.model.content.ContentDescription;
import com.salesmanager.core.model.content.ContentType;
import com.salesmanager.core.model.content.FileContentType;
import com.salesmanager.core.model.content.InputContentFile;
import com.salesmanager.core.model.content.OutputContentFile;
import com.salesmanager.core.model.merchant.MerchantStore;
import com.salesmanager.core.model.reference.language.Language;
/**
*
* Interface defining methods responsible for CMSContentService.
* ContentServive will be be entry point for CMS and take care of following functionalities.
* <li>Adding,removing Content images for given merchant store</li>
* <li>Get,Save,Update Content data for given merchant store</li>
*
* @author Umesh Awasthhi
*
*/
public interface ContentService
extends SalesManagerEntityService<Long, Content>
{
public List<Content> listByType( ContentType contentType, MerchantStore store, Language language )
throws ServiceException;
public List<Content> listByType( List<ContentType> contentType, MerchantStore store, Language language )
throws ServiceException;
Content getByCode( String code, MerchantStore store )
throws ServiceException;
void saveOrUpdate( Content content )
throws ServiceException;
Content getByCode( String code, MerchantStore store, Language language )
throws ServiceException;
/**
* Method responsible for storing content file for given Store.Files for given merchant store will be stored in
* Infinispan.
*
* @param merchantStoreCode merchant store whose content images are being saved.
* @param contentFile content image being stored
* @throws ServiceException
*/
void addContentFile( String merchantStoreCode, InputContentFile contentFile )
throws ServiceException;
/**
* Method responsible for storing list of content image for given Store.Images for given merchant store will be stored in
* Infinispan.
*
* @param merchantStoreCode merchant store whose content images are being saved.
* @param contentImagesList list of content images being stored.
* @throws ServiceException
*/
void addContentFiles(String merchantStoreCode,List<InputContentFile> contentFilesList) throws ServiceException;
/**
* Method to remove given content image.Images are stored in underlying system based on there name.
* Name will be used to search given image for removal
* @param imageContentType
* @param imageName
* @param merchantStoreCode merchant store code
* @throws ServiceException
*/
public void removeFile( String merchantStoreCode, FileContentType fileContentType, String fileName) throws ServiceException;
/**
* Method to remove all images for a given merchant.It will take merchant store as an input and will
* remove all images associated with given merchant store.
*
* @param merchantStoreCode
* @throws ServiceException
*/
public void removeFiles( String merchantStoreCode ) throws ServiceException;
/**
* Method responsible for fetching particular content image for a given merchant store. Requested image will be
* search in Infinispan tree cache and OutputContentImage will be sent, in case no image is found null will
* returned.
*
* @param merchantStoreCode
* @param imageName
* @return {@link OutputContentImage}
* @throws ServiceException
*/
public OutputContentFile getContentFile( String merchantStoreCode, FileContentType fileContentType, String fileName )
throws ServiceException;
/**
* Method to get list of all images associated with a given merchant store.In case of no image method will return an empty list.
* @param merchantStoreCode
* @param imageContentType
* @return list of {@link OutputContentImage}
* @throws ServiceException
*/
public List<OutputContentFile> getContentFiles( String merchantStoreCode, FileContentType fileContentType )
throws ServiceException;
List<String> getContentFilesNames(String merchantStoreCode,
FileContentType fileContentType) throws ServiceException;
/**
* Add the store logo
* @param merchantStoreCode
* @param cmsContentImage
* @throws ServiceException
*/
void addLogo(String merchantStoreCode, InputContentFile cmsContentImage)
throws ServiceException;
/**
* Adds a property (option) image
* @param merchantStoreId
* @param cmsContentImage
* @throws ServiceException
*/
void addOptionImage(String merchantStoreCode, InputContentFile cmsContentImage)
throws ServiceException;
List<Content> listByType(List<ContentType> contentType, MerchantStore store)
throws ServiceException;
List<ContentDescription> listNameByType(List<ContentType> contentType,
MerchantStore store, Language language) throws ServiceException;
Content getByLanguage(Long id, Language language) throws ServiceException;
ContentDescription getBySeUrl(MerchantStore store, String seUrl);
}