/*
* Copyright (c) 2015 Ciena 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.cli;
import org.apache.karaf.shell.commands.Argument;
import org.apache.karaf.shell.commands.Command;
import org.apache.karaf.shell.console.OsgiCommandSupport;
import org.opendaylight.nic.api.NicConsoleProvider;
import org.opendaylight.nic.impl.NicProvider;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intent.Actions;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intent.Constraints;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intent.Subjects;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intent.actions.Action;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intent.actions.action.Allow;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intent.actions.action.Block;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intent.actions.action.Log;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intent.actions.action.Redirect;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intent.constraints.constraints.ClassificationConstraint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intent.constraints.constraints.QosConstraint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intent.subjects.subject.EndPointGroup;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intents.Intent;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.types.rev150122.Uuid;
;
@Command(name = "show", scope = "intent", description = "Shows detailed information about an intent.")
public class IntentShowShellCommand extends OsgiCommandSupport {
protected NicConsoleProvider provider;
private static final String VALUE = " Value: %s\n";
@Argument(index = 0, name = "id", description = "Intent Id", required = true, multiValued = false)
String id;
public IntentShowShellCommand(NicConsoleProvider provider) {
this.provider = provider;
}
@Override
protected Object doExecute() throws Exception {
StringBuilder sb = new StringBuilder();
Uuid uuid = Uuid.getDefaultInstance(id);
Intent intent = provider.getIntent(uuid);
if (intent != null) {
sb.append(String.format("Intent Id: <%s>\n", intent.getId().getValue()));
sb.append(String.format("Subjects: \n"));
for (Subjects subjects : intent.getSubjects()) {
EndPointGroup endPointGroup = (EndPointGroup) subjects.getSubject();
sb.append(String.format(" Order: %d\n", subjects.getOrder()));
sb.append(String.format(VALUE , endPointGroup.getEndPointGroup().getName()));
sb.append("\n");
}
sb.append(String.format("Actions: \n"));
for (Actions actions : intent.getActions()) {
Action action = actions.getAction();
sb.append(String.format(" Order: %d\n", actions.getOrder()));
if (action instanceof Allow) {
sb.append(String.format(VALUE , NicProvider.ACTION_ALLOW));
} else if (action instanceof Block) {
sb.append(String.format(VALUE , NicProvider.ACTION_BLOCK));
} else if (action instanceof Log) {
sb.append(String.format(VALUE , NicProvider.ACTION_LOG));
} else if (action instanceof Redirect) {
sb.append(String.format(VALUE , NicProvider.ACTION_REDIRECT));
} else {
sb.append(String.format(VALUE , "UNKNOWN"));
}
}
//TODO provide support for bandwidth-constraint, fail-type etc.
if (intent.getConstraints() != null) {
sb.append(String.format("\nConstraints: \n"));
for (Constraints constraints : intent.getConstraints()) {
org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intent.constraints.Constraints constraint = constraints.getConstraints();
sb.append(String.format(" Order: %d\n", constraints.getOrder()));
if (constraint instanceof QosConstraint) {
sb.append(String.format(VALUE , ((QosConstraint) constraints.getConstraints()).getQosConstraint().getQosName()));
} else if (constraint instanceof ClassificationConstraint) {
sb.append(String.format(VALUE , ((ClassificationConstraint) constraints.getConstraints())
.getClassificationConstraint().getClassifier()));
} else {
sb.append(String.format(VALUE , "UNKNOWN YET"));
}
sb.append("\n");
}
}
return sb.toString();
} else {
return String.format("No intent found. Check the logs for more details.");
}
}
}