Java tutorial
package com.webbfontaine.valuewebb.action.pricedb.pdss; import com.webbfontaine.valuewebb.action.PdHome; import com.webbfontaine.valuewebb.action.SPDHome; import com.webbfontaine.valuewebb.cache.PersistenceUtil; import com.webbfontaine.valuewebb.model.MarketPrice; import com.webbfontaine.valuewebb.model.Pd; import com.webbfontaine.valuewebb.model.PreFinSel; import com.webbfontaine.valuewebb.model.SimpleDocument; import com.webbfontaine.valuewebb.model.constants.Constants; import com.webbfontaine.valuewebb.model.constants.Messages; import com.webbfontaine.valuewebb.model.util.Utils; import com.webbfontaine.valuewebb.search.UserCriterionUtils; import com.webbfontaine.valuewebb.search.custom.Search; import com.webbfontaine.valuewebb.search.custom.StringConditions; import com.webbfontaine.valuewebb.search.custom.UserCriterion; import com.webbfontaine.valuewebb.validation.ErrorHandling; import org.hibernate.Criteria; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Factory; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.intercept.BypassInterceptors; import org.jboss.seam.log.Log; import org.jboss.seam.log.Logging; import javax.faces.application.FacesMessage; import java.util.ArrayList; import java.util.List; /** * Copyrights 2002-2011 Webb Fontaine * This software is the proprietary information of Webb Fontaine. * Its use is subject to License terms. * User: nigiyan * Date: 5/20/11 */ @Name("pdssSearch") @BypassInterceptors public class PdssSearch extends Search { private static final Log LOGGER = Logging.getLog(PdssSearch.class); private PreFinSel preFinSelTmp = new PreFinSel(); private Pd instance; private Criteria pdCriteria; private Criteria mpCriteria; private List<Pd> pds = new ArrayList<>(); private List<MarketPrice> mps = new ArrayList<>(); private int pdsSearchResultCount; private int mpsSearchResultCount; private Long pdId; public PdssSearch() { setCriteriaContainer(new PdssCriteriaContainer()); } public Pd getInstance() { return instance; } public void setInstance(Pd instance) { this.instance = instance; } public Object initByPdInstance() { /*pdId is null when audited entity*/ if (instance != null && pdId != null && pdId .equals(instance.getId()) /*link is clicked while pdss is open => need to clear pdss/close*/) { instance = null; pds.clear(); mps.clear(); } else { if (instance == null || pdId != null && !instance.getId().equals(pdId)) { String viewId = Utils.currentPage(); if (viewId.contains("PdEdit")) { instance = Utils.getEntityManager().find(Pd.class, pdId); } else { if (viewId.contains("SPD")) { List<Pd> spdPds = SPDHome.getInstance().getPds(); for (Pd spdPd : spdPds) { if (spdPd.getId().equals(pdId)) { instance = spdPd; break; } } } else { throw new RuntimeException("Unexpected PDSS use case"); } } } getCriteriaContainer().getSelectedUserCriteria().clear(); pds.clear(); mps.clear(); List<PreFinSel> pfss = instance.getLoadedPfs(); for (PreFinSel pfs : pfss) { if (pfs.getReferenceDocName().equals(Constants.PD_DOC_NAME)) { Pd pd = Utils.getEntityManager().find(Pd.class, pfs.getReferenceDocId()); if (pd != null) { pds.add(pd); } } else { MarketPrice mp = Utils.getEntityManager().find(MarketPrice.class, pfs.getReferenceDocId()); if (mp != null) { mps.add(mp); } } } } return ""; } public PreFinSel extractSelection(SimpleDocument referer) { PreFinSel retVal = new PdssUtils(instance).extractSelection((Long) referer.getId(), referer.description()); if (retVal == null) { retVal = new PreFinSel(); } return retVal; } public String loadDefaultCriteria() { PdssCriteriaContainer criteriaContainer = (PdssCriteriaContainer) getCriteriaContainer(); criteriaContainer.getSelectedUserCriteria().clear(); UserCriterion uc = criteriaContainer.getDefinedCriterion("hsCode"); uc.setCondition(StringConditions.STARTS_WITH); uc.setValue(instance.getHsCodeD().substring(0, 4)); criteriaContainer.getSelectedUserCriteria().add(uc); uc = criteriaContainer.getDefinedCriterion("used"); uc.setCondition(StringConditions.EQ); uc.setValue(instance.getUsed()); criteriaContainer.getSelectedUserCriteria().add(uc); uc = criteriaContainer.getDefinedCriterion("productDsc"); uc.setCondition(StringConditions.CONTAINS); uc.setValue(instance.getProductDscD()); criteriaContainer.getSelectedUserCriteria().add(uc); uc = criteriaContainer.getDefinedCriterion("ageOfPrice"); uc.setCondition(StringConditions.LE); uc.setValue(90L); criteriaContainer.getSelectedUserCriteria().add(uc); return ""; } // passed when selection changed public PreFinSel getPreFinSelTmp() { return preFinSelTmp; } public void setPreFinSelTmp(PreFinSel preFinSelTmp) { this.preFinSelTmp = preFinSelTmp; } public Object selectionSubmit() { PdssUtils pdssUtils = new PdssUtils(instance); pdssUtils.updatePFS(preFinSelTmp); return null; } public void arrangeSearchResForSelections() { LOGGER.trace("PDSS: "); for (PreFinSel pfs : instance.getLoadedPfs()) { if (pfs.getReferenceDocName().equals(Constants.PD_DOC_NAME)) { Pd pdToShift = null; for (Pd searchPd : pds) { if (searchPd.getId().equals(pfs.getReferenceDocId())) { pdToShift = searchPd; break; } } if (pdToShift == null) { pdToShift = Utils.getEntityManager().find(Pd.class, pfs.getReferenceDocId()); } if (pdToShift != null) { pds.remove(pdToShift); pds.add(0, pdToShift); } } else { // mp if (pfs.getReferenceDocName().equals(Constants.MARKET_PRICE_DOC_NAME)) { MarketPrice mpToShift = null; for (MarketPrice searchMp : mps) { if (searchMp.getId().equals(pfs.getReferenceDocId())) { mpToShift = searchMp; break; } } if (mpToShift == null) { mpToShift = Utils.getEntityManager().find(MarketPrice.class, pfs.getReferenceDocId()); } if (mpToShift != null) { mps.remove(mpToShift); mps.add(0, mpToShift); } } else { throw new RuntimeException("Undefined reference doc name"); } } } } @Override public Object search() { ErrorHandling.getInstance().removeErrorByMessage(Messages.SEARCH_ARGS_INCORRECT); ErrorHandling.getInstance().removeErrorByFieldId(Constants.document_id); if (UserCriterionUtils.checkAgeOfPrice(getCriteriaContainer())) { try { constructCriteria(); pds = pdCriteria.list(); mps = mpCriteria.list(); pdsSearchResultCount = (Integer) pdCriteria.setProjection(Projections.rowCount()).uniqueResult(); mpsSearchResultCount = (Integer) mpCriteria.setProjection(Projections.rowCount()).uniqueResult(); LOGGER.debug("Search summary. PD list/count: {0}/{1}, MP list/count: {2}/{3}", pds.size(), pdsSearchResultCount, mps.size(), mpsSearchResultCount); arrangeSearchResForSelections(); } catch (Exception e) { LOGGER.warn("", e); ErrorHandling.addFacesMessage(null, Messages.SEARCH_ARGS_INCORRECT, FacesMessage.SEVERITY_ERROR); } } return ""; } @Override protected boolean isCriteriaValid() { return true; } @Override protected Criteria constructCriteria() throws Exception { PdssCriteriaContainer criteriaContainer = (PdssCriteriaContainer) getCriteriaContainer(); criteriaContainer.setEntityClass(Pd.class); criteriaContainer.setFakeToRealPropertyMap(PropertyMapProvider.forClass(Pd.class)); pdCriteria = criteriaContainer.transformUserCriteria(PersistenceUtil.getSession(Utils.getEntityManager())); // pdCriteria.addOrder(Order.desc("id")); pdCriteria.setMaxResults(Constants.MAX_RECORDS_IN_ATTACHED_FINDER); pdCriteria.add(Restrictions.ne("id", pdId)); criteriaContainer.setEntityClass(MarketPrice.class); criteriaContainer.setFakeToRealPropertyMap(PropertyMapProvider.forClass(MarketPrice.class)); mpCriteria = criteriaContainer.transformUserCriteria(PersistenceUtil.getSession(Utils.getEntityManager())); // mpCriteria.addOrder(Order.desc("id")); mpCriteria.setMaxResults(Constants.MAX_RECORDS_IN_ATTACHED_FINDER); return null; } public List<Pd> getPds() { return pds; } public List<MarketPrice> getMps() { return mps; } public int getPdsSearchResultCount() { return pdsSearchResultCount; } public int getMpsSearchResultCount() { return mpsSearchResultCount; } @Override public Object reset() { getCriteriaContainer().getSelectedUserCriteria().clear(); List<Pd> pdsAfterClear = new ArrayList<>(); List<MarketPrice> mpsAfterClear = new ArrayList<>(); for (Pd pd : pds) { if (extractSelection(pd).getId() != null) { pdsAfterClear.add(pd); } } for (MarketPrice mp : mps) { if (extractSelection(mp).getId() != null) { mpsAfterClear.add(mp); } } pds = pdsAfterClear; mps = mpsAfterClear; pdsSearchResultCount = 0; mpsSearchResultCount = 0; return ""; } @Override public String desciption() { throw new RuntimeException("Unused"); } public Long getPdId() { return pdId; } public void setPdId(Long pdId) { this.pdId = pdId; } @Factory(value = "pdssDisabled", scope = ScopeType.EVENT) public static Boolean pdssEditable() { PdHome pdHome = PdHome.getComponentInstance(false); return !(/*enabled for SPD and PD Edit: */Utils.currentPage().contains("SPD") || pdHome != null && !pdHome.isReadOnlyMode()); } }