| package net.onrc.onos.core.topology.web; |
| |
| import net.onrc.onos.core.topology.ITopologyService; |
| import net.onrc.onos.core.topology.Topology; |
| |
| import org.restlet.engine.io.BufferingRepresentation; |
| import org.restlet.representation.Representation; |
| import org.restlet.resource.Get; |
| import org.restlet.resource.ServerResource; |
| |
| /** |
| * A class to access the network topology information. |
| */ |
| public class TopologyResource extends ServerResource { |
| /** |
| * Gets the network topology information. |
| * |
| * @return a Representation of the network topology. |
| */ |
| @Get("json") |
| public Representation retrieve() { |
| ITopologyService topologyService = |
| (ITopologyService) getContext().getAttributes() |
| .get(ITopologyService.class.getCanonicalName()); |
| |
| Topology topology = topologyService.getTopology(); |
| topology.acquireReadLock(); |
| try { |
| return eval(toRepresentation(topology, null)); |
| } finally { |
| topology.releaseReadLock(); |
| } |
| } |
| |
| /** |
| * Workaround code to trigger evaluation of Representation immediately. |
| * |
| * @param repr Representation to evaluate immediately |
| * @return Evaluated Representation |
| */ |
| public static Representation eval(final Representation repr) { |
| |
| BufferingRepresentation eval = new BufferingRepresentation(repr); |
| // trigger evaluation |
| eval.getSize(); |
| return eval; |
| } |
| } |