/* * Copyright (C) 2013 Intel Corporation * All rights reserved. */ package com.intel.mtwilson.policy; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author jbuhacoff */ @JsonInclude(JsonInclude.Include.NON_EMPTY) @JsonIgnoreProperties(ignoreUnknown=true) public class PolicyEngine { private Logger log = LoggerFactory.getLogger(getClass()); // this is the normal case - given a list of policies, apply them all, and combine the results into one report. public List<RuleResult> applyAll(HostReport hostReport, Rule... rules) { log.debug("PolicyEngine.applyAll(... {} rules)", rules.length); ArrayList<RuleResult> list = new ArrayList<RuleResult>(); for(Rule rule : rules) { log.debug("Applying rule {}", rule.getClass().getName()); RuleResult result = rule.apply(hostReport); list.add(result); } return list; } public List<RuleResult> applyAll(HostReport hostReport, Set<Rule> rules) { log.debug("PolicyEngine.applyAll(set of {} rules)", rules.size()); ArrayList<RuleResult> list = new ArrayList<RuleResult>(); for(Rule rule : rules) { log.debug("Applying rule {}", rule.getClass().getName()); RuleResult result = rule.apply(hostReport); list.add(result); } return list; } // this was formerly called "applyAny" because if ANY ONE of the policies says isTrusted then it's fine. // however, this is not the right spot to check that... so where do we check it ??? in the app?? that // would then be a feature of the app. which is fine. public List<TrustReport> applyAll(HostReport hostReport, Policy... policies) { log.debug("PolicyEngine.applyAll(... {} policies)", policies.length); ArrayList<TrustReport> list = new ArrayList<TrustReport>(); for(Policy policy : policies) { log.debug("Applying policy {}", policy.getName()); TrustReport report = apply(hostReport, policy); list.add(report); } return list; } /* public TrustReport applyAny(HostReport hostReport, TrustPolicy... policies) { RequireAny requireAny = new RequireAny(Arrays.asList(policies)); TrustReport report = requireAny.apply(hostReport); return report; }*/ public TrustReport apply(HostReport hostReport, Policy policy) { log.debug("PolicyEngine.apply policy {}", policy.getName()); TrustReport policyReport = new TrustReport(hostReport, policy.getName()); List<RuleResult> results = applyAll(hostReport, policy.getRules()); Iterator<RuleResult> it = results.iterator(); while(it.hasNext()) { RuleResult result = it.next(); policyReport.addResult(result); } return policyReport; } }