BannerImporter.java

package sk.iway.iwcm.sync.inport;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import sk.iway.iwcm.Tools;
import sk.iway.iwcm.components.banner.BannerDB;
import sk.iway.iwcm.components.banner.model.BannerBean;
import sk.iway.iwcm.i18n.Prop;
import sk.iway.iwcm.stripes.SyncDirWriterService;
import sk.iway.iwcm.sync.export.Content;

/**
 * Import bannerov.
 *
 *@Title        webjet7
 *@Company      Interway s.r.o. (www.interway.sk)
 *@Copyright    Interway s.r.o. (c) 2001-2012
 *@author       $Author: jeeff vbur $
 *@version      $Revision: 1.3 $
 *@created      Date: 15.6.2012 11:08:12
 *@modified     $Date: 2004/08/16 06:26:11 $
 */
public class BannerImporter
{

	private static final String BANNER_PREFIX = "banner_";

	public static List<ContentBannerBean> getBanners(Content content)
	{
		List<ContentBannerBean> bannerBeans = new ArrayList<ContentBannerBean>();
		if (null == content) return bannerBeans;

		for (Numbered<BannerBean> remoteBanner : Numbered.list(content.getBanners()))
		{
			BannerBean localBanner = getLocalBanner(remoteBanner.item);
			bannerBeans.add(new ContentBannerBean(remoteBanner.number, remoteBanner.item, localBanner));
		}
		return bannerBeans;
	}

	public static void importBanners(HttpServletRequest request, Content content, PrintWriter writer) {
		Prop prop = Prop.getInstance(request);
		//
		SyncDirWriterService.prepareProgress(prop.getText("components.syncDirAction.progress.syncingBanners"), "bammersImportCount", prop.getText("components.syncDirAction.progress.syncingBanner") + ": - / -", writer);

		if (null == content) return;

		Map<String, String> selectedBannersMap = SyncDirWriterService.getOptionsMap(BANNER_PREFIX, request);
		if(selectedBannersMap.size() < 1) return;

		int importedBannersCount = 1;
		Iterable<Numbered<BannerBean>> bannersToImport = Numbered.list(content.getBanners());
		int bannersToImportCount = SyncDirWriterService.getCountToHandle(selectedBannersMap, bannersToImport, BANNER_PREFIX);

		for (Numbered<BannerBean> banner : bannersToImport)
		{
			if (selectedBannersMap.get(BANNER_PREFIX + banner.number) != null)
			{
				SyncDirWriterService.updateProgress("bammersImportCount", prop.getText("components.syncDirAction.progress.syncingBanner") + ": " + importedBannersCount + " / " + bannersToImportCount, writer);
				importedBannersCount++;

				createLocalContentBanner(banner.item);
			}
		}
	}

	/**
	 * Vrati banner zodpovedajuci importovanemu (rovnaka skupina a meno), alebo null.
	 *
	 * @param remoteBanner
	 * @return
	 */
	private static BannerBean getLocalBanner(BannerBean remoteBanner)
	{
		List<BannerBean> localBanners = BannerDB.getBanners(remoteBanner.getBannerGroup(), null);  // rovnaka skupina
		for (BannerBean localBanner : localBanners)
		{
			if (Tools.areSame(remoteBanner.getName(), localBanner.getName()))  // rovnake meno
			{
				return localBanner;
			}
		}
		return null;
	}

	private static boolean createLocalContentBanner(BannerBean remoteBanner)
	{
		BannerBean localBanner = getLocalBanner(remoteBanner);
		if (null == localBanner)
		{
			remoteBanner.setBannerId(-1);
			return BannerDB.saveBanner(remoteBanner, -1);
		}
		int id = localBanner.getBannerId();
		remoteBanner.setBannerId(id);
		return BannerDB.saveBanner(remoteBanner, id);
	}

}