package org.nightlabs.jfire.voucher.print.ui.transfer.deliver; import java.io.File; import java.util.List; import java.util.Map; import java.util.Set; import javax.jdo.FetchPlan; import org.apache.log4j.Logger; import org.nightlabs.jdo.NLJDOHelper; import org.nightlabs.jdo.ObjectID; import org.nightlabs.jdo.ObjectIDUtil; import org.nightlabs.jfire.base.JFireEjb3Factory; import org.nightlabs.jfire.base.login.ui.Login; import org.nightlabs.jfire.scripting.id.ScriptRegistryItemID; import org.nightlabs.jfire.scripting.print.ui.transfer.delivery.AbstractClientDeliveryProcessorPrint; import org.nightlabs.jfire.scripting.print.ui.transfer.delivery.AbstractScriptDataProviderThread; import org.nightlabs.jfire.store.id.ProductID; import org.nightlabs.jfire.trade.editor2d.ILayout; import org.nightlabs.jfire.trade.editor2d.LayoutMapForArticleIDSet; import org.nightlabs.jfire.trade.id.ArticleID; import org.nightlabs.jfire.voucher.VoucherManagerRemote; import org.nightlabs.jfire.voucher.scripting.VoucherLayout; import org.nightlabs.jfire.voucher.scripting.id.VoucherLayoutID; import org.nightlabs.util.CollectionUtil; import org.nightlabs.util.ParameterCoder; import org.nightlabs.util.ParameterCoderMinusHexExt; /** * @author Daniel.Mazurek [at] NightLabs [dot] de * */ public class VoucherDataProviderThread extends AbstractScriptDataProviderThread { private static final Logger logger = Logger.getLogger(VoucherDataProviderThread.class); public VoucherDataProviderThread(AbstractClientDeliveryProcessorPrint clientDeliveryProcessor) { super(clientDeliveryProcessor); } private static final String[] FETCH_GROUPS_VOUCHER_LAYOUT_STAGE_1 = { FetchPlan.DEFAULT }; private static final String[] FETCH_GROUPS_VOUCHER_LAYOUT_STAGE_2 = { FetchPlan.DEFAULT, VoucherLayout.FETCH_GROUP_FILE }; // @Override // public File getLayoutFile(ProductID productID) // { // VoucherLayout voucherLayout; // synchronized (layoutMapForArticleIDSetMutex) { // voucherLayout = (VoucherLayout) layoutMapForArticleIDSet.getProductID2LayoutMap().get(productID); // } // if (voucherLayout == null) // throw new IllegalArgumentException("productID unknown: " + productID); // // VoucherLayoutID voucherLayoutID = (VoucherLayoutID) JDOHelper.getObjectId(voucherLayout); // return getVoucherLayoutFile(voucherLayoutID); // } private VoucherManagerRemote getVoucherManager() { try { return JFireEjb3Factory.getRemoteBean(VoucherManagerRemote.class, Login.getLogin().getInitialContextProperties()); } catch (Exception e) { throw new RuntimeException(e); } } @Override protected LayoutMapForArticleIDSet getLayoutMapForArticleIDSet(List<ArticleID> articleIDs) { long start = 0; if (logger.isDebugEnabled()) start = System.currentTimeMillis(); VoucherManagerRemote voucherManager = getVoucherManager(); LayoutMapForArticleIDSet result = voucherManager.getVoucherLayoutMapForArticleIDSet( articleIDs, FETCH_GROUPS_VOUCHER_LAYOUT_STAGE_1, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT); if (logger.isDebugEnabled()) logger.debug("Getting LayoutMapForArticleIDSet for " + articleIDs.size() + " articles took " + (System.currentTimeMillis() - start) + " ms."); return result; } @Override protected List<ILayout> getLayouts(Set<ObjectID> layoutIDs) { long start = 0; if (logger.isDebugEnabled()) start = System.currentTimeMillis(); VoucherManagerRemote voucherManager = getVoucherManager(); Set<VoucherLayoutID> voucherLayoutIDs = CollectionUtil.castSet(layoutIDs); List<VoucherLayout> result = voucherManager.getVoucherLayouts( voucherLayoutIDs, FETCH_GROUPS_VOUCHER_LAYOUT_STAGE_2, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT); if (logger.isDebugEnabled()) logger.debug("Getting " + (result != null ? result.size() : "null") + " voucher layouts took " + (System.currentTimeMillis() - start) + " ms."); return CollectionUtil.castList(result); } @Override protected Map<ProductID, Map<ScriptRegistryItemID, Object>> getScriptingResults(List<ProductID> productIDs) { long start = 0; if (logger.isDebugEnabled()) start = System.currentTimeMillis(); VoucherManagerRemote voucherManager = getVoucherManager(); try { Map<ProductID, Map<ScriptRegistryItemID, Object>> result = voucherManager.getVoucherScriptingResults(productIDs, false); if (logger.isDebugEnabled()) logger.debug("Getting script results for " + productIDs.size() + " tickets took" + (System.currentTimeMillis() - start) + " ms."); return result; } catch (Exception e) { throw new RuntimeException(e); } } @Override protected File getLayoutFileByLayoutID(ObjectID layoutID) { if (layoutID == null) throw new IllegalArgumentException("layoutID must not be null!"); if (!(layoutID instanceof VoucherLayoutID)) throw new IllegalArgumentException("Param layoutID "+layoutID+" is not a VoucherLayoutID!"); VoucherLayoutID voucherLayoutID = (VoucherLayoutID) layoutID; // return new File( // getCacheDir(), // voucherLayoutID.organisationID + File.separatorChar + voucherLayoutID.voucherLayoutID); ParameterCoder parameterCoder = new ParameterCoderMinusHexExt(); return new File( getCacheDir(), + File.separatorChar + parameterCoder.encode(voucherLayoutID.getClass().getName()) + File.separatorChar + parameterCoder.encode(voucherLayoutID.organisationID) + File.separatorChar + ObjectIDUtil.longObjectIDFieldToString(voucherLayoutID.voucherLayoutID) ); } }