/*
* Copyright (c) 2014 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.renderer.ofoverlay.sf;
import java.util.List;
import java.util.Map;
import org.opendaylight.groupbasedpolicy.api.sf.AllowActionDefinition;
import org.opendaylight.groupbasedpolicy.api.sf.ChainActionDefinition;
import org.opendaylight.groupbasedpolicy.api.sf.EtherTypeClassifierDefinition;
import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition;
import org.opendaylight.groupbasedpolicy.api.sf.L4ClassifierDefinition;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionDefinitionId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierDefinitionId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitions;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitionsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinition;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinition;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
/**
* Defines the subject features that are supported by the OF overlay renderer
*/
public class SubjectFeatures {
private static final Map<ClassifierDefinitionId, Classifier> classifiers = ImmutableMap.
of(EtherTypeClassifierDefinition.ID, Classifier.ETHER_TYPE_CL,
IpProtoClassifierDefinition.ID, Classifier.IP_PROTO_CL,
L4ClassifierDefinition.ID, Classifier.L4_CL);
private static final List<ClassifierDefinition> classifierDefs =
ImmutableList.copyOf(Collections2.transform(classifiers.values(),
new Function<Classifier, ClassifierDefinition>() {
@Override
public ClassifierDefinition apply(Classifier input) {
return input.getClassifierDefinition();
}
}
));
private static final Map<ActionDefinitionId, Action> actions = ImmutableMap.
of(AllowActionDefinition.ID, new AllowAction(), ChainActionDefinition.ID,
new ChainAction());
private static final List<ActionDefinition> actionDefs =
ImmutableList.copyOf(Collections2.transform(actions.values(),
new Function<Action, ActionDefinition>() {
@Override
public ActionDefinition apply(Action input) {
return input.getActionDef();
}
}
));
public static final SubjectFeatureDefinitions OF_OVERLAY_FEATURES =
new SubjectFeatureDefinitionsBuilder()
.setActionDefinition(actionDefs)
.setClassifierDefinition(classifierDefs)
.build();
/**
* Get the {@link Classifier} associated with the given
* {@link ClassifierDefinitionId}
* @param id the {@link ClassifierDefinitionId} to look up
* @return the {@link Classifier} if one exists, or <code>null</code>
* otherwise
*/
public static Classifier getClassifier(ClassifierDefinitionId id) {
return classifiers.get(id);
}
public static Map<ActionDefinitionId, Action> getActions() {
return actions;
}
/**
* Get the {@link Action} associated with the given
* {@link ActionDefinitionId}
* @param id the {@link ActionDefinitionId} to look up
* @return the {@link Action} if one exists, or <code>null</code>
* otherwise
*/
public static Action getAction(ActionDefinitionId id) {
return actions.get(id);
}
}