/* jBilling - The Enterprise Open Source Billing System Copyright (C) 2003-2011 Enterprise jBilling Software Ltd. and Emiliano Conde This file is part of jbilling. jbilling is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. jbilling is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with jbilling. If not, see <http://www.gnu.org/licenses/>. */ package com.sapienter.jbilling.server.mediation.task; import org.apache.log4j.Logger; import com.sapienter.jbilling.server.item.PricingField; import com.sapienter.jbilling.server.mediation.Record; import com.sapienter.jbilling.server.pluggableTask.TaskException; import com.sapienter.jbilling.server.rule.RulesBaseTask; import com.sapienter.jbilling.server.user.db.CompanyDAS; import java.util.List; public class RulesMediationTask extends RulesBaseTask implements IMediationProcess { protected Logger getLog() { return Logger.getLogger(RulesMediationTask.class); } public void process(List<Record> records, List<MediationResult> results, String configurationName) throws TaskException { // this plug-in gets called many times for the same instance rulesMemoryContext.clear(); int index = -1; // to track the results list // if results are passed, there has to be one per record if (results != null && results.size() > 0) { if (records.size() != results.size()) { throw new TaskException("If results are passed, there have to be the same number as" + " records"); } index = 0; } else if (results == null) { throw new TaskException("The results array can not be null"); } for (Record record: records) { // one result per record MediationResult result = null; if (index >= 0) { result = results.get(index++); } else { result = new MediationResult(configurationName, true); } result.setRecordKey(record.getKey()); rulesMemoryContext.add(result); results.add(result); // for easy retrival later for (PricingField field: record.getFields()) { field.setResultId(result.getId()); rulesMemoryContext.add(field); } } // add the company rulesMemoryContext.add(new CompanyDAS().find(getEntityId())); // then execute the rules executeRules(); } }