blob: 8bf34a83caaeb342bf11ede3ef3afa4d1cee0902 [file] [log] [blame]
package net.onrc.onos.core.matchaction;
import java.util.ArrayList;
import java.util.Collection;
import java.util.EventListener;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.floodlightcontroller.core.IFloodlightProviderService;
import net.floodlightcontroller.core.module.FloodlightModuleContext;
import net.floodlightcontroller.core.module.FloodlightModuleException;
import net.floodlightcontroller.core.module.IFloodlightModule;
import net.floodlightcontroller.core.module.IFloodlightService;
import net.floodlightcontroller.restserver.IRestApiService;
import net.onrc.onos.api.flowmanager.ConflictDetectionPolicy;
import net.onrc.onos.core.datagrid.IDatagridService;
import net.onrc.onos.core.flowprogrammer.IFlowPusherService;
import net.onrc.onos.core.matchaction.web.MatchActionWebRoutable;
import net.onrc.onos.core.registry.IControllerRegistryService;
import net.onrc.onos.core.util.IdGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Floodlight module for Match Action service.
*/
public class MatchActionModule implements MatchActionFloodlightService, IFloodlightModule {
private static final Logger log = LoggerFactory
.getLogger(MatchActionModule.class);
private MatchActionComponent matchActionComponent;
@Override
public Collection<Class<? extends IFloodlightService>> getModuleServices() {
List<Class<? extends IFloodlightService>> services = new ArrayList<>();
log.info("get module services");
services.add(MatchActionFloodlightService.class);
return services;
}
@Override
public Map<Class<? extends IFloodlightService>, IFloodlightService> getServiceImpls() {
Map<Class<? extends IFloodlightService>, IFloodlightService> impls =
new HashMap<>();
impls.put(MatchActionFloodlightService.class, this);
return impls;
}
@Override
public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
List<Class<? extends IFloodlightService>> dependencies = new ArrayList<>();
dependencies.add(IDatagridService.class);
dependencies.add(IFlowPusherService.class);
dependencies.add(IFloodlightProviderService.class);
dependencies.add(IControllerRegistryService.class);
dependencies.add(IRestApiService.class);
return dependencies;
}
@Override
public void init(FloodlightModuleContext context) throws FloodlightModuleException {
final IDatagridService datagrid = context.getServiceImpl(IDatagridService.class);
final IFlowPusherService pusher = context.getServiceImpl(IFlowPusherService.class);
final IFloodlightProviderService provider = context.getServiceImpl(IFloodlightProviderService.class);
final IControllerRegistryService registry = context.getServiceImpl(IControllerRegistryService.class);
final IRestApiService restApi = context.getServiceImpl(IRestApiService.class);
restApi.addRestletRoutable(new MatchActionWebRoutable());
matchActionComponent = new MatchActionComponent(datagrid, pusher, provider, registry);
}
@Override
public void startUp(FloodlightModuleContext context) throws FloodlightModuleException {
matchActionComponent.start();
}
@Override
public boolean addMatchAction(MatchAction matchAction) {
return matchActionComponent.addMatchAction(matchAction);
}
@Override
public Set<MatchAction> getMatchActions() {
return matchActionComponent.getMatchActions();
}
@Override
public boolean executeOperations(MatchActionOperations operations) {
matchActionComponent.installMatchActionOperations(operations);
return false; // TODO define return value semantics
}
@Override
public void setConflictDetectionPolicy(ConflictDetectionPolicy policy) {
throw new UnsupportedOperationException("conflict detection not implemented yet");
}
@Override
public ConflictDetectionPolicy getConflictDetectionPolicy() {
return null;
}
@Override
public IdGenerator<MatchActionId> getMatchActionIdGenerator() {
return matchActionComponent.getMatchActionIdGenerator();
}
@Override
public IdGenerator<MatchActionOperationsId> getMatchActionOperationsIdGenerator() {
return matchActionComponent.getMatchActionOperationsIdGenerator();
}
@Override
public void addEventListener(EventListener listener) {
// TODO
log.warn("Could not add MatchAction EventListener: {}", listener);
}
@Override
public void removeEventListener(EventListener listener) {
// TODO
log.warn("Could not remove MatchAction EventListener: {}", listener);
}
}