package com.appirio.report;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
public class DisclaimerStore {
//private Map<String, List<DisclaimerWrapper>> disclaimersMetadataMap = new HashMap<String, List<DisclaimerWrapper>> ();
public List<DisclaimerWrapper> disclaimerWrapperList = new ArrayList<DisclaimerWrapper> ();
public void createDisclaimerWrapper(String disclaimerText,
String outputLocation, String proposalType, String marketName,
String mediaType, String notes, String sequence,
String shippingInstruction, boolean isAdditionalCostRelated,
String additionalCostType) {
DisclaimerWrapper wrapper = new DisclaimerWrapper(disclaimerText,
outputLocation, proposalType, marketName, mediaType, notes,
sequence, shippingInstruction, isAdditionalCostRelated,
additionalCostType);
disclaimerWrapperList.add(wrapper);
}
public List<DisclaimerWrapper> getValidDisclaimers2 (String flightName,String flightMarket, String flightMediaCategory) {
//Set<String> validDisclaimersTextSet = new HashSet<String>();
List<DisclaimerWrapper> validDisclaimersList = new ArrayList<DisclaimerWrapper>();
for(DisclaimerWrapper wrapper : disclaimerWrapperList) {
//System.out.println(" getValidDisclaimers sequence " + wrapper.sequence +
//" wrapper.market --> " + wrapper.market +
//" flightMarket : " + flightMarket +
// " wrapper.mediaCategory -->" + wrapper.mediaCategory +
// " flightMediaCategory --> " + flightMediaCategory
// + " disclaimer text " + wrapper.disclaimerText);
//System.out.println(" getValidDisclaimers 222222222222 disclaimer " + wrapper.toString());
if(wrapper.isMatchingMarket(flightMarket) && wrapper.isMatchingMediaCategory(flightMediaCategory)) {
//System.out.println(" disclaimer matched flightMarket " +flightMarket + " flightMediaCategory " + flightMediaCategory + " disclaimer " + wrapper.disclaimerText);
//validDisclaimersTextSet.add(wrapper.disclaimerText);
validDisclaimersList.add(wrapper);
}
}
Collections.sort(validDisclaimersList);
//System.out.println(validDisclaimersList);
return validDisclaimersList ;
}
public List<DisclaimerWrapper> getValidDisclaimers_Cost(String flightName,String flightMarket, String flightMediaCategory, boolean isAdditionalCostFieldSelected,
String flightLineAdditonalCostFieldValue, String flightLineAdditionalCostType) {
//Set<String> validDisclaimersTextSet = new HashSet<String>();
List<DisclaimerWrapper> validDisclaimersList = new ArrayList<DisclaimerWrapper>();
for(DisclaimerWrapper wrapper : disclaimerWrapperList) {
//System.out.println(" getValidDisclaimers sequence " + wrapper.sequence +
//" wrapper.market --> " + wrapper.market +
//" flightMarket : " + flightMarket +
// " wrapper.mediaCategory -->" + wrapper.mediaCategory +
// " flightMediaCategory --> " + flightMediaCategory
// + " disclaimer text " + wrapper.disclaimerText);
//System.out.println(" getValidDisclaimers disclaimer " + wrapper.toString());
boolean includeDisclaimer = false;
if(wrapper.isMatchingMarket(flightMarket) && wrapper.isMatchingMediaCategory(flightMediaCategory)) {
// disclaimer is cost related
includeDisclaimer = true;
/*System.out.println(" disclaimer matched flightMarket " +flightMarket + " flightMediaCategory "
+ flightMediaCategory + " disclaimer " + wrapper.disclaimerText + " isDisclaimerAdditionalCostRelated " +wrapper.isAdditionalCostRelated()
+ " isAdditionalCostFieldSelected " +isAdditionalCostFieldSelected + " AdditionalCostType " +wrapper.getAdditionalCostType() +
" flightLineAdditonalCostFieldValue " + flightLineAdditonalCostFieldValue + " flightLineAdditionalCostType " +flightLineAdditionalCostType);*/
if(wrapper.isAdditionalCostRelated()) {
//check if flight line additional cost field is selected
if(isAdditionalCostFieldSelected){
//check flight line additional cost value
if (flightLineAdditonalCostFieldValue != null && flightLineAdditonalCostFieldValue != "0.0"
&& StringUtils.isNotEmpty(flightLineAdditionalCostType)
&& flightLineAdditionalCostType.equals(wrapper.getAdditionalCostType())) {
includeDisclaimer = true;
}else {
includeDisclaimer = false;
}
}
//do not show the disclaimer
else {
includeDisclaimer = false;
}
}
}
if(includeDisclaimer) {
System.out.println(" disclaimer included ::::::::::::::::::::: " + wrapper);
validDisclaimersList.add(wrapper);
}
}
Collections.sort(validDisclaimersList);
//System.out.println(validDisclaimersList);
return validDisclaimersList ;
}
public Set<String> getValidDisclaimers (String flightName,String flightMarket, String flightMediaCategory) {
Set<String> validDisclaimersTextSet = new HashSet<String>();
for(DisclaimerWrapper wrapper : disclaimerWrapperList) {
/*System.out.println(" getValidDisclaimers sequence " + wrapper.sequence +
" wrapper.market --> " + wrapper.market +
" flightMarket : " + flightMarket +
" wrapper.mediaCategory -->" + wrapper.mediaCategory +
" flightMediaCategory --> " + flightMediaCategory
+ " disclaimer text " + wrapper.disclaimerText);*/
//System.out.println(" getValidDisclaimers disclaimer " + wrapper.toString());
if(wrapper.isMatchingMarket(flightMarket) && wrapper.isMatchingMediaCategory(flightMediaCategory)) {
//System.out.println(" disclaimer matched flightMarket " +flightMarket + " flightMediaCategory " + flightMediaCategory + " disclaimer " + wrapper.disclaimerText);
validDisclaimersTextSet.add(wrapper.disclaimerText);
}
}
return validDisclaimersTextSet ;
}
public Set<String> getAutoDisclaimers (String flightName,String flightMarket, String flightMediaCategory) {
Set<String> autoDisclaimersTextSet = new HashSet<String>();
for(DisclaimerWrapper wrapper : disclaimerWrapperList) {
//System.out.println(" getAutoValidDisclaimers wrapper.market --> " + wrapper.market +
// " wrapper.mediaCategory -->" + wrapper.mediaCategory + " disclaimer text " +
// wrapper.disclaimerText);
//if(wrapper.market != null && wrapper.market.trim().equalsIgnoreCase("None")
//&& wrapper.mediaCategory != null && wrapper.mediaCategory.trim().equalsIgnoreCase("None"))
if(wrapper.isShippingInstruction()) {
//System.out.println(" GOT AUTO Disclaimer " + wrapper.disclaimerText);
autoDisclaimersTextSet.add(wrapper.disclaimerText);
}
}
return autoDisclaimersTextSet ;
}
public List<DisclaimerWrapper> getDisclaimersList() {
return disclaimerWrapperList;
}
public class DisclaimerWrapper implements Comparable<DisclaimerWrapper>{
public String disclaimerText;
public String proposalType ;
public String market;
public String mediaCategory ;
public String outputLocation ;
public String notes ;
public String sequence;
public Integer sequenceInt;
public String shippingInstr;
public boolean additionalCostRelated;
public String additionalCostType;
public DisclaimerWrapper() {
this.disclaimerText = "";
this.outputLocation = "";
this.proposalType = "";
this.market = "";
this.mediaCategory = "";
this.notes = "";
this.sequence = "";
this.sequenceInt = null;
this.shippingInstr = "";
this.additionalCostRelated = false;
this.additionalCostType = "";
}
public DisclaimerWrapper(String disclaimerText, String outputLocation,
String proposalType, String marketName, String mediaCategory,
String notes2, String sequence, String shippingInst,
boolean isAdditionalCostRelated, String additionalCostType) {
this.disclaimerText = disclaimerText;
this.outputLocation = outputLocation;
this.proposalType = proposalType;
this.market = marketName;
this.mediaCategory = mediaCategory;
this.notes = notes2;
this.sequence = sequence;
//System.out.println(" ************ sq " + sequence);
if(sequence != null && sequence.trim() != "") {
sequenceInt = (int)Double.parseDouble(sequence);
}
//System.out.println(" ************ sequenceInt " + sequenceInt );
this.shippingInstr = shippingInst;
this.additionalCostRelated = isAdditionalCostRelated;
this.additionalCostType = additionalCostType;
}
public String getDisclaimerText() {
return disclaimerText;
}
public void setDisclaimerText(String disclaimerText) {
this.disclaimerText = disclaimerText;
}
public String getProposalType() {
return proposalType;
}
public void setProposalType(String proposalType) {
this.proposalType = proposalType;
}
public String getMarket() {
return market;
}
public void setMarket(String market) {
this.market = market;
}
public String getMediaCategory() {
return mediaCategory;
}
public void setMediaCategory(String mediaCategory) {
this.mediaCategory = mediaCategory;
}
public String getOutputLocation() {
return outputLocation;
}
public void setOutputLocation(String outputLocation) {
this.outputLocation = outputLocation;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public String getSequence() {
return sequence;
}
public void setSequence(String sequence) {
this.sequence = sequence;
}
public Integer getSequenceInt() {
return sequenceInt;
}
public void setSequenceInt(Integer sequenceInt) {
this.sequenceInt = sequenceInt;
}
public String getShippingInstr() {
return shippingInstr;
}
public void setShippingInstr(String shippingInstr) {
this.shippingInstr = shippingInstr;
}
public String getAdditionalCostType() {
return additionalCostType;
}
public void setAdditionalCostType(String additionalCostType) {
this.additionalCostType = additionalCostType;
}
public boolean isAdditionalCostRelated() {
return additionalCostRelated;
}
public void setAdditionalCostRelated(boolean isAdditionalCostRelated) {
this.additionalCostRelated = isAdditionalCostRelated;
}
public boolean isShippingInstruction() {
return this.shippingInstr != null && this.shippingInstr != "" && this.shippingInstr.equalsIgnoreCase("true");
}
public int compareTo(DisclaimerWrapper compareDisclaimer) {
//System.out.println(" ********** compareto this.sequenceInt " + this.sequenceInt + " compareDisclaimer " + compareDisclaimer.getSequenceInt());
Integer sequenceNo = ((DisclaimerWrapper) compareDisclaimer).getSequenceInt();
//ascending order
return this.sequenceInt - sequenceNo;
//descending order
//return compareQuantity - this.quantity;
}
public boolean isMatchingMarket(String marketName) {
boolean isMarketMatched = false;
//System.out.println(" flight market to be matched " + marketName + " rule market " + this.market);
//if rule market not present it means All in disclaimer rule and is valid, no check on market required
//also if flight market is null then also all rules are valid;.
if(this.market == null || this.market.trim() == "" && (!isShippingInstruction())) {
isMarketMatched = true;
//this means multiple markets
} else if(this.market.contains(";")) {
this.market.split(";");
Set<String> marketNamesSet = new HashSet<String>(Arrays.asList(market.split(";")));
if(marketNamesSet.contains(marketName)) {
//System.out.println(" flight market matched in marketNamesSet ");
isMarketMatched = true;
}else {
//System.out.println(" flight market NOT matched in marketNamesSet ");
isMarketMatched = false;
}
}else {
if(this.market != null && marketName !=null ) {
isMarketMatched = this.market.trim().equalsIgnoreCase(marketName.trim());
//System.out.println(" else market check ");
}
}
//System.out.println(" flight market to be matched " + marketName + " rule market " + this.market + " isMarketMatched " + isMarketMatched);
return isMarketMatched;
}
public boolean isMatchingMediaCategory(String mediaCat) {
boolean isMediaCategoryMatched = false;
//System.out.println(" flight MediaCategory to be matched " + mediaCat + " rule mediaCategory " + this.mediaCategory);
//if market not present in disclaimer rule or if All present in rule then is valid, no check on market req
if(this.mediaCategory == null || this.mediaCategory.trim() == "" && (!isShippingInstruction()) ) {
isMediaCategoryMatched = true;
//this means multiple markets
} else if(this.mediaCategory.contains(";")) {
this.mediaCategory.split(";");
Set<String> mediaCategorySet = new HashSet<String>(Arrays.asList(mediaCategory.split(";")));
if(mediaCategorySet.contains(mediaCat)) {
//System.out.println(" flight MediaCategory matched in mediaCategorySet ");
isMediaCategoryMatched = true;
}else {
//System.out.println(" flight MediaCategory NOT matched in mediaCategorySet ");
isMediaCategoryMatched = false;
}
}else {
if(this.mediaCategory != null && mediaCat !=null ) {
isMediaCategoryMatched = this.mediaCategory.trim().equalsIgnoreCase(mediaCat.trim());
//System.out.println(" else media cat check");
}
}
//System.out.println(" flight MediaCategory to be matched " + mediaCat + " rule mediaCategory " + this.mediaCategory + " isMediaCategoryMatched " + isMediaCategoryMatched);
return isMediaCategoryMatched;
}
public boolean isMatchingOutputLocation(String outputLocation) {
return this.outputLocation.equalsIgnoreCase(outputLocation);
}
public boolean isMatchingProposalType(String proposal) {
return this.proposalType.equalsIgnoreCase(proposal);
}
public String toString() {
return " Disclaimer : Sequence " + this.sequenceInt + " Disclaimer :" + this.disclaimerText
+ " Market " + this.market + " Media Category " + this.mediaCategory
+ " additionalCostType " + additionalCostType + " additionalCostRelated " + additionalCostRelated ;
}
}
}