@Override   
   public BigDecimal calculateSaleTax(ConcreteItem item){
	   Set<TaxRateType>taxRateTypeSet =  item.getTaxRateType();
	   BigDecimal finalSaleTax;
	   if(taxRateTypeSet.contains(TaxRateType.BASIC_SALE_TAX)){
	        BasicSaleTaxWithRounding basckSaleTax = new BasicSaleTaxWithRounding();
		    if(taxRateTypeSet.contains(TaxRateType.IMPORT_TAX)){
		         ImportedTaxWithRounding  ImportedTax = new ImportedTaxWithRounding(basckSaleTax);
		         finalSaleTax = ImportedTax.getTaxWithRounding(item);	         
		    }else{
		    	 finalSaleTax = basckSaleTax.getTaxWithRounding(item);		    	
		    }

	   }else{
	         ExemptTaxWithRounding exemptTax = new ExemptTaxWithRounding();
			    if(taxRateTypeSet.contains(TaxRateType.IMPORT_TAX)){
			         ImportedTaxWithRounding  ImportedTax = new ImportedTaxWithRounding(exemptTax);
			         finalSaleTax = ImportedTax.getTaxWithRounding(item);			         
			    }else{
			    	finalSaleTax = exemptTax.getTaxWithRounding(item);			    	
			    }	         
	   }
	return finalSaleTax;
	   
   }