/*
* Copyright (c) 2016 Cisco Systems, Inc. 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.groupbasedpolicy.neutron.mapper.util;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import javax.annotation.Nullable;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.rules.attributes.SecurityRules;
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.secgroups.rev150712.security.rules.attributes.security.rules.SecurityRule;
import com.google.common.base.Function;
import com.google.common.base.Objects;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
public class SecurityRuleUtils {
public static Optional<SecurityRule> findSecurityRule(Uuid uuid, @Nullable SecurityRules securityRules) {
if (securityRules == null || securityRules.getSecurityRule() == null) {
return Optional.absent();
}
for (SecurityRule secRule : securityRules.getSecurityRule()) {
if (secRule.getUuid().equals(uuid)) {
return Optional.of(secRule);
}
}
return Optional.absent();
}
public static Set<SecurityRule> findSecurityRulesBySecGroupAndRemoteSecGroup(Uuid secGroup,
@Nullable Uuid remoteSecGroup, Neutron neutron) {
Preconditions.checkNotNull(secGroup);
return FluentIterable.from(findAllSecurityRules(neutron)).filter(new Predicate<SecurityRule>() {
@Override
public boolean apply(SecurityRule secRule) {
return (secRule.getSecurityGroupId().equals(secGroup)
&& Objects.equal(secRule.getRemoteGroupId(), remoteSecGroup));
}
}).toSet();
}
public static Set<Uuid> findSecurityGroupsHavingSecurityRules(Neutron neutron) {
return FluentIterable.from(findAllSecurityRules(neutron)).transform(new Function<SecurityRule, Uuid>() {
@Override
public Uuid apply(SecurityRule secRule) {
return secRule.getSecurityGroupId();
}
}).toSet();
}
public static List<SecurityRule> findAllSecurityRules(Neutron neutron) {
Preconditions.checkNotNull(neutron);
SecurityRules securityRules = neutron.getSecurityRules();
if (securityRules == null || securityRules.getSecurityRule() == null) {
return Collections.emptyList();
}
return securityRules.getSecurityRule();
}
}