InquiryImporter.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.i18n.Prop;
import sk.iway.iwcm.inquiry.AnswerForm;
import sk.iway.iwcm.inquiry.InquiryBean;
import sk.iway.iwcm.inquiry.InquiryDB;
import sk.iway.iwcm.stripes.SyncDirWriterService;
import sk.iway.iwcm.sync.export.Content;

/**
 * Import ankiet.
 *
 *@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: 25.6.2012 10:22:28
 *@modified     $Date: 2004/08/16 06:26:11 $
 */
public class InquiryImporter
{
	private static final String INQUIRY_PREFIX = "inquiry_";

	public static List<ContentInquiryBean> getInquiries(Content content, HttpServletRequest request)
	{
		List<ContentInquiryBean> inquiryBeans = new ArrayList<ContentInquiryBean>();
		if (null == content) return inquiryBeans;

		for (Numbered<InquiryBean> remoteInquiry : Numbered.list(content.getInquiries()))
		{
			InquiryBean localInquiry = getLocalInquiry(remoteInquiry.item, request);
			inquiryBeans.add(new ContentInquiryBean(remoteInquiry.number, remoteInquiry.item, localInquiry));
		}
		return inquiryBeans;
	}

	public static void importInquiries(HttpServletRequest request, Content content, PrintWriter writer) {
		Prop prop = Prop.getInstance(request);
		//
		SyncDirWriterService.prepareProgress(prop.getText("components.syncDirAction.progress.syncingInquiries"), "inquiriesImportCount", prop.getText("components.syncDirAction.progress.syncingInquiry") + ": - / -", writer);

		if (null == content) return;

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

		int importedInquiriesCount = 1;
		Iterable<Numbered<InquiryBean>> inquiriesToImport = Numbered.list(content.getInquiries());
		int inquiriesToImportCount = SyncDirWriterService.getCountToHandle(selectedInquiriesMap, inquiriesToImport, INQUIRY_PREFIX);

		for (Numbered<InquiryBean> inquiry : inquiriesToImport)
		{
			if (selectedInquiriesMap.get(INQUIRY_PREFIX + inquiry.number) != null)
			{
				SyncDirWriterService.updateProgress("inquiriesImportCount", prop.getText("components.syncDirAction.progress.syncingInquiry") + ": " + importedInquiriesCount + " / " + inquiriesToImportCount, writer);
				importedInquiriesCount++;

				createLocalContentInquiry(inquiry.item, request);
			}
		}
	}

	/**
	 * Vrati anketu zodpovedajucu importovanej (rovnaka skupina a otazka), alebo null.
	 *
	 * @param remoteInquiry
	 * @return
	 */
	private static InquiryBean getLocalInquiry(InquiryBean remoteInquiry, HttpServletRequest request)
	{
		List<Integer> localIds = InquiryDB.getInquiryIds(remoteInquiry.getAnswers().get(0).getGroup(), request, true);
		for (Integer localId : localIds)
		{
			InquiryBean localInquiry = InquiryDB.getInquiry(localId.intValue(), 0, null, "answer_id", true, request);
			if (Tools.areSame(remoteInquiry.getQuestion(), localInquiry.getQuestion()))
			{
				return localInquiry;
			}
		}
		return null;
	}

	private static boolean createLocalContentInquiry(InquiryBean remoteInquiry, HttpServletRequest request)
	{
		InquiryBean localInquiry = getLocalInquiry(remoteInquiry, request);
		if (null != localInquiry)
		{
			InquiryDB.deleteInquiry(localInquiry.getAnswers().get(0).getQuestionID(), request);
		}
		AnswerForm a = remoteInquiry.getAnswers().get(0);
		InquiryDB.createNewQuestion(a, request);
		int inquiryId = a.getQuestionID();
		for (AnswerForm remoteAnswer : remoteInquiry.getAnswers())
		{
			InquiryDB.addNewAnswer(inquiryId, remoteAnswer, request);
		}
		return true;
	}

}