Java tutorial
//------------------------------------------------------------------------------ // Copyright (c) 2015 Hewlett-Packard Development Company, L.P. and others. All rights reserved. // // This program and the accompanying materials are made available under the // terms of the Eclipse Public License v1.0 which accompanies this distribution, // and is available at http://www.eclipse.org/legal/epl-v10.html //------------------------------------------------------------------------------ package org.opendaylight.nic.compiler; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Collection; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.Queue; import java.util.Set; import org.opendaylight.nic.compiler.api.Action; import org.opendaylight.nic.compiler.api.Endpoint; import org.opendaylight.nic.compiler.api.IntentCompiler; import org.opendaylight.nic.compiler.api.IntentCompilerException; import org.opendaylight.nic.compiler.api.Policy; import com.google.common.collect.Sets; public class IntentCompilerImpl implements IntentCompiler { private final Transform transform; @Override public Collection<Policy> compile(Collection<Policy> policies) throws IntentCompilerException { Queue<Policy> conflictingPolicies = new LinkedList<>(policies); Collection<Policy> compiledPolicies = new LinkedList<>(); while (!conflictingPolicies.isEmpty()) { Policy policy = conflictingPolicies.remove(); Iterator<Policy> iterator2 = conflictingPolicies.iterator(); Collection<Policy> results = new LinkedList<>(); while (iterator2.hasNext()) { Policy policy2 = iterator2.next(); if (conflicts(policy, policy2)) { iterator2.remove(); results.addAll(transform.resolve(policy, policy2)); } } if (results.isEmpty()) { compiledPolicies.add(policy); } else { conflictingPolicies.addAll(results); } } return compiledPolicies; } @Override public Set<Endpoint> parseEndpointGroup(String csv) throws UnknownHostException { Set<Endpoint> endpoints = new LinkedHashSet<>(); String[] ipAdresses = csv.split(","); for (String ipAddress : ipAdresses) { endpoints.add(new EndpointImpl(InetAddress.getByName(ipAddress))); } return endpoints; } @Override public Policy createPolicy(Set<Endpoint> source, Set<Endpoint> destination, Set<Action> action) { return new PolicyImpl(source, destination, action); } public IntentCompilerImpl() { transform = new Transform(); } private boolean conflicts(Policy p1, Policy p2) { if (!Sets.intersection(p1.src(), p2.src()).isEmpty() && !Sets.intersection(p1.dst(), p2.dst()).isEmpty()) { return true; } return false; } }