Package no.ugland.utransprod.service.impl

Source Code of no.ugland.utransprod.service.impl.TakstolPackageVManagerImpl

package no.ugland.utransprod.service.impl;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import no.ugland.utransprod.dao.TakstolPackageVDAO;
import no.ugland.utransprod.gui.model.Applyable;
import no.ugland.utransprod.model.Colli;
import no.ugland.utransprod.model.PackableListItem;
import no.ugland.utransprod.model.Produceable;
import no.ugland.utransprod.model.ProductAreaGroup;
import no.ugland.utransprod.model.TakstolPackageV;
import no.ugland.utransprod.model.TakstolProductionV;
import no.ugland.utransprod.service.TakstolPackageVManager;

/**
* Implementasjon av serviceklasse for view TAKSTOL_PACKAGE_V.
*
* @author atle.brekka
*/
public class TakstolPackageVManagerImpl extends
    AbstractApplyListManager<PackableListItem> implements
    TakstolPackageVManager {
  private TakstolPackageVDAO dao;
  private static final String MAIN_ARTICLE_NAME = "Takstoler";

  /**
   * Setter dao for kunder.
   *
   * @param aDao
   */
  public final void setTakstolPackageVDAO(final TakstolPackageVDAO aDao) {
    this.dao = aDao;
  }

  /**
   * @see no.ugland.utransprod.service.IApplyListManager#findAllApplyable()
   */
  public final List<PackableListItem> findAllApplyable() {
    List<PackableListItem> items = dao.findAll();
    return setRelated(items);
  }

  private List<PackableListItem> setRelated(List<PackableListItem> items) {
    List<PackableListItem> packable = new ArrayList<PackableListItem>();
    if (items != null && items.size() != 0) {
      Map<String, TakstolPackageV> defaultTakstolMap = new HashMap<String, TakstolPackageV>();
      PackableListItem currentTakstol = null;// new TakstolProductionV();
      List<Applyable> relatedArticles = null;

      for (PackableListItem item : items) {
        if (item.getOrderNr().equalsIgnoreCase("56439")) {
          System.out.println("funnet");
        }
        if (currentTakstol == null) {// dersom f�rste ordrelinje
          currentTakstol = item;
        }
        if (!item.getOrderNr().equalsIgnoreCase(
            currentTakstol.getOrderNr())) {// dersom
          // ny
          // ordre
          handleCurrentTakstol(defaultTakstolMap, currentTakstol,
              relatedArticles, packable);
          relatedArticles = null;// nullstiller relaterte artikler

          currentTakstol = item;// setter ny current
        } else {
          if (!currentTakstol.equals(item)) {// kan ikke sett relatert
                            // til
            // seg selv
            if (canHaveRelatedArticles(currentTakstol)) {// gjeldende
              // takstol
              // m� kunne
              // ha
              // relaterte
              relatedArticles = relatedArticles == null ? new ArrayList<Applyable>()
                  : relatedArticles;
              relatedArticles.add(item);
            } else {// dersom gjeldende takstol ikke kan ha
                // relaterte
              // legges den under default takstol
              addArticleToDefaultTakstol(item, defaultTakstolMap);
            }
          }
        }
      }
      handleCurrentTakstol(defaultTakstolMap, currentTakstol,
          relatedArticles, packable);

      packable.addAll(defaultTakstolMap.values());
      Collections.sort(packable, new PackableListItemComparator());
    }
    return packable;
  }

  private void handleCurrentTakstol(
      Map<String, TakstolPackageV> defaultTakstolMap,
      PackableListItem currentTakstol, List<Applyable> relatedArticles,
      List<PackableListItem> producables) {
    if (canHaveRelatedArticles(currentTakstol)) {
      currentTakstol.setRelatedArticles(relatedArticles);// setter
      // relaterte
      // ordrelinjer
      boolean success = currentTakstol.getOrderNr() != null ? producables
          .add(currentTakstol) : false;// dersom takstol har
                          // ordrenummer
    } else {
      addArticleToDefaultTakstol(currentTakstol, defaultTakstolMap);
    }
  }

  /*
   * private List<PackableListItem> setRelated(List<PackableListItem> items) {
   * Map<String, TakstolPackageV> defaultTakstolMap = new HashMap<String,
   * TakstolPackageV>(); PackableListItem currentTakstol=new
   * TakstolPackageV(); List<Applyable> relatedArticles=null;
   * List<PackableListItem> producables=new ArrayList<PackableListItem>(); for
   * (PackableListItem item : items) { if(canHaveRelatedArticles(item)){
   * currentTakstol.setRelatedArticles(relatedArticles); relatedArticles=null;
   * boolean
   * success=currentTakstol.getOrderNr()!=null?producables.add(currentTakstol
   * ):false; currentTakstol=item; }else{
   * if(item.getOrderNr().equalsIgnoreCase(currentTakstol.getOrderNr())){
   * relatedArticles=relatedArticles==null?new
   * ArrayList<Applyable>():relatedArticles; relatedArticles.add(item); }else
   * if(isTakstol(item)){ producables.add(item); }else{
   *
   * addArticleToDefaultTakstol(item,defaultTakstolMap); } }
   *
   *
   *
   * } boolean
   * success=currentTakstol.getOrderNr()!=null?producables.add(currentTakstol
   * ):false; producables.addAll(defaultTakstolMap.values());
   * Collections.sort(producables, new PackableListItemComparator()); return
   * producables; }
   */

  private boolean isTakstol(PackableListItem item) {
    return item.getArticleName().equalsIgnoreCase(MAIN_ARTICLE_NAME);
  }

  private Map<String, TakstolPackageV> addArticleToDefaultTakstol(
      PackableListItem item,
      Map<String, TakstolPackageV> defaultTakstolMap) {
    TakstolPackageV defaultTakstol = defaultTakstolMap.get(item
        .getOrderNr());
    defaultTakstol = defaultTakstol == null ? createDefaultTakstol(item)
        : defaultTakstol;
    defaultTakstol.addRelatedArticle(item);
    addRelatedAttributeInfo(defaultTakstol, item);
    defaultTakstolMap.put(item.getOrderNr(), defaultTakstol);
    return defaultTakstolMap;
  }

  private void addRelatedAttributeInfo(TakstolPackageV defaultTakstol,
      PackableListItem item) {
    StringBuilder stringBuilder = new StringBuilder(defaultTakstol
        .getAttributeInfo() != null ? defaultTakstol.getAttributeInfo()
        : "");
    stringBuilder = stringBuilder.length() != 0 ? stringBuilder.append(",")
        : stringBuilder;
    stringBuilder.append(item.getArticleName()).append("-").append(
        item.getAttributeInfo());
    defaultTakstol.setAttributeInfo(stringBuilder.toString());

  }

  private TakstolPackageV createDefaultTakstol(PackableListItem item) {
    TakstolPackageV defaultTakstol = ((TakstolPackageV) item).clone();
    defaultTakstol.setArticleName(MAIN_ARTICLE_NAME);
    return defaultTakstol;
  }

  private boolean haveNotRelatedTakstol(PackableListItem item) {
    return !item.getArticleName().equalsIgnoreCase(MAIN_ARTICLE_NAME)
        && !haveRelatedTakstol(item) ? true : false;
  }

  private boolean haveRelatedTakstol(PackableListItem item) {
    List<PackableListItem> list = dao.findApplyableByOrderNrAndArticleName(
        item.getOrderNr(), MAIN_ARTICLE_NAME);
    return list != null && list.size() != 0;
  }

  private void setRelatedArticles(List<PackableListItem> items,
      PackableListItem item) {
    List<Applyable> relatedArticles = checkAndGetRelatedArticles(item,
        items);
    item.setRelatedArticles(relatedArticles);
  }

  private List<Applyable> checkAndGetRelatedArticles(PackableListItem item,
      List<PackableListItem> items) {

    return item.getNumberOfItems() != null && item.getNumberOfItems() > 3 ? getRelatedArticles(
        item, items)
        : new ArrayList<Applyable>();
  }

  private boolean canHaveRelatedArticles(PackableListItem item) {
    return item.getArticleName().equalsIgnoreCase(MAIN_ARTICLE_NAME)
        && item.getNumberOfItems() != null
        && item.getNumberOfItems() > 3 ? true : false;
  }

  private List<Applyable> getRelatedArticles(final PackableListItem packable,
      final List<PackableListItem> items) {
    List<Applyable> relatedArticles = new ArrayList<Applyable>();

    for (PackableListItem item : items) {
      if (!item.getArticleName().equalsIgnoreCase(MAIN_ARTICLE_NAME)
          && item.getOrderNr()
              .equalsIgnoreCase(packable.getOrderNr())
          && item.getOrderLineId() != packable.getOrderLineId()) {
        relatedArticles.add(item);
      }
    }
    return relatedArticles;
  }

  /**
   * @see no.ugland.utransprod.service.IApplyListManager#findApplyableByOrderNr(java.lang.String)
   */
  public final List<PackableListItem> findApplyableByOrderNr(
      final String orderNr) {
    List<PackableListItem> items = dao.findByOrderNr(orderNr);
    return setRelated(items);

  }

  /**
   * @see no.ugland.utransprod.service.TakstolPackageVManager#
   *      refresh(no.ugland.utransprod.model.TakstolPackageV)
   */
  public final void refresh(final TakstolPackageV productionV) {
    dao.refresh(productionV);

  }

  /**
   * @see no.ugland.utransprod.service.IApplyListManager#findApplyableByCustomerNr(java.lang.Integer)
   */
  public final List<PackableListItem> findApplyableByCustomerNr(
      final Integer customerNr) {
    List<PackableListItem> items = dao.findByCustomerNr(customerNr);
    return setRelated(items);
  }

  /**
   * @param object
   * @see no.ugland.utransprod.service.IApplyListManager#refresh(java.lang.Object)
   */
  public final void refresh(final PackableListItem object) {
    refresh((TakstolPackageV) object);

  }

  public TakstolPackageV findByOrderNrAndOrderLineId(String orderNr,
      Integer orderLineId) {
    List<PackableListItem> list = dao.findByOrderNr(orderNr);
    TakstolPackageV takstolPackageV = findByOrderLineId(orderLineId, list);
    if (takstolPackageV != null) {
      takstolPackageV
          .setRelatedArticles(takstolPackageV.getNumberOfItems() != null
              && takstolPackageV.getNumberOfItems() > 3 ? getRelatedArticles(
              takstolPackageV, list)
              : new ArrayList<Applyable>());
    }
    return takstolPackageV;
  }

  private TakstolPackageV findByOrderLineId(Integer orderLineId,
      List<PackableListItem> list) {
    for (PackableListItem item : list) {
      if (item.getOrderLineId().equals(orderLineId)) {
        return (TakstolPackageV) item;
      }
    }
    return null;
  }

  public List<PackableListItem> findApplyableByOrderNrAndArticleName(
      String orderNr, String mainArticleName) {
    List<PackableListItem> items = dao
        .findApplyableByOrderNrAndArticleName(orderNr, mainArticleName);
    return setRelated(items);
  }

  public List<PackableListItem> findApplyableByCustomerNrAndProductAreaGroup(
      Integer customerNr, ProductAreaGroup productAreaGroup) {
    List<PackableListItem> items = dao.findByCustomerNrAndProductAreaGroup(
        customerNr, productAreaGroup);
    return setRelated(items);
  }

  public List<PackableListItem> findApplyableByOrderNrAndProductAreaGroup(
      String orderNr, ProductAreaGroup productAreaGroup) {
    List<PackableListItem> items = dao.findByOrderNrAndProductAreaGroup(
        orderNr, productAreaGroup);
    return setRelated(items);
  }

}
TOP

Related Classes of no.ugland.utransprod.service.impl.TakstolPackageVManagerImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.