package org.opennaas.extensions.genericnetwork.actionsets.internal.nettopology.actions;
/*
* #%L
* OpenNaaS :: Generic Network
* %%
* Copyright (C) 2007 - 2014 FundaciĆ³ Privada i2CAT, Internet i InnovaciĆ³ a Catalunya
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import org.opennaas.core.resources.ObjectSerializer;
import org.opennaas.core.resources.SerializationException;
import org.opennaas.core.resources.action.Action;
import org.opennaas.core.resources.action.ActionException;
import org.opennaas.core.resources.action.ActionResponse;
import org.opennaas.core.resources.protocol.IProtocolSessionManager;
import org.opennaas.extensions.genericnetwork.capability.nettopology.NetTopologyActionSet;
import org.opennaas.extensions.genericnetwork.model.GenericNetworkModel;
import org.opennaas.extensions.genericnetwork.model.topology.Topology;
/**
* Reads topology from a file and stores it in the resource model.
*
* @author Isart Canyameres Gimenez (i2cat)
*
*/
public class LoadTopologyAction extends Action {
public LoadTopologyAction() {
setActionID(NetTopologyActionSet.LOAD_TOPOLOGY);
}
@Override
public boolean checkParams(Object params) throws ActionException {
if (!(params instanceof String)) {
throw new ActionException(getActionID() + " should receive a path to a topology file");
}
try {
// Check file exists
FileInputStream file = new FileInputStream((String) params);
} catch (FileNotFoundException e) {
throw new ActionException(getActionID() + " should receive a path to an existing topology file", e);
}
return true;
}
@Override
public ActionResponse execute(IProtocolSessionManager protocolSessionManager) throws ActionException {
Topology topology;
try {
topology = loadTopologyFromFile();
updateModel(topology);
return ActionResponse.okResponse(getActionID());
} catch (FileNotFoundException e) {
throw new ActionException(getActionID() + " should receive a path to an existing topology file", e);
} catch (SerializationException e) {
throw new ActionException("Invalid topology file: " + params, e);
}
}
private Topology loadTopologyFromFile() throws FileNotFoundException, SerializationException {
FileInputStream file = new FileInputStream((String) params);
return ObjectSerializer.fromXml(file, Topology.class);
}
private void updateModel(Topology topology) {
((GenericNetworkModel) modelToUpdate).setTopology(topology);
}
}