Source:
<code><START> public GraphMLTopologyProvider(final GraphMLMetaTopologyProvider metaTopologyProvider, <END> final GraphMLGraph graph, final GraphMLServiceAccessor serviceAccessor) { super(graph.getProperty(GraphMLProperties.NAMESPACE)); this.metaTopologyProvider = metaTopologyProvider; m_serviceAccessor = serviceAccessor; for (GraphMLNode graphMLNode : graph.getNodes()) { GraphMLVertex newVertex = new GraphMLVertex(this.getVertexNamespace(), graphMLNode); setNodeIdForVertex(newVertex); addVertices(newVertex); } for (org.opennms.features.graphml.model.GraphMLEdge eachEdge : graph.getEdges()) { GraphMLVertex sourceVertex = (GraphMLVertex) getVertex(getVertexNamespace(), eachEdge.getSource().getId()); GraphMLVertex targetVertex = (GraphMLVertex) getVertex(getVertexNamespace(), eachEdge.getTarget().getId()); if (sourceVertex == null || targetVertex == null) { continue; } GraphMLEdge newEdge = new GraphMLEdge(getEdgeNamespace(), eachEdge, sourceVertex, targetVertex); addEdges(newEdge); } setTopologyProviderInfo(createTopologyProviderInfo(graph)); defaultSzl = getDefaultSzl(graph); focusStrategy = getFocusStrategy(graph); focusIds = getFocusIds(graph); preferredLayout = graph.getProperty(GraphMLProperties.PREFERRED_LAYOUT); vertexStatusProvider = graph.<Object>getProperty(GraphMLProperties.VERTEX_STATUS_PROVIDER, Boolean.FALSE); if (focusStrategy != FocusStrategy.SPECIFIC && !focusIds.isEmpty()) { LOG.warn("Focus ids is defined, but strategy is {}. Did you mean to specify {}={}. Ignoring focusIds.", GraphMLProperties.FOCUS_STRATEGY, FocusStrategy.SPECIFIC.name()); } }</code><technical_language>Please do expose full MetaTopologyProvider. introduce new, e.g. OppositeVertexAccessor is exposed. (see below)</technical_language>

Target:
public GraphMLTopologyProvider(final GraphMLMetaTopologyProvider metaTopologyProvider, final GraphMLGraph graph, final GraphMLServiceAccessor serviceAccessor) { super(graph.getProperty(GraphMLProperties.NAMESPACE)); this.metaTopologyProvider = metaTopologyProvider; m_serviceAccessor = serviceAccessor; for (GraphMLNode graphMLNode : graph.getNodes()) { GraphMLVertex newVertex = new GraphMLVertex(this.getVertexNamespace(), graphMLNode); setNodeIdForVertex(newVertex); addVertices(newVertex); } for (org.opennms.features.graphml.model.GraphMLEdge eachEdge : graph.getEdges()) { GraphMLVertex sourceVertex = (GraphMLVertex) getVertex(getVertexNamespace(), eachEdge.getSource().getId()); GraphMLVertex targetVertex = (GraphMLVertex) getVertex(getVertexNamespace(), eachEdge.getTarget().getId()); if (sourceVertex == null || targetVertex == null) { continue; } GraphMLEdge newEdge = new GraphMLEdge(getEdgeNamespace(), eachEdge, sourceVertex, targetVertex); addEdges(newEdge); } setTopologyProviderInfo(createTopologyProviderInfo(graph)); defaultSzl = getDefaultSzl(graph); focusStrategy = getFocusStrategy(graph); focusIds = getFocusIds(graph); preferredLayout = graph.getProperty(GraphMLProperties.PREFERRED_LAYOUT); this.vertexStatusProviderType = getVertexProviderTypeFromGraph(graph); if (focusStrategy != FocusStrategy.SPECIFIC && !focusIds.isEmpty()) { LOG.warn("Focus ids is defined, but strategy is {}. Did you mean to specify {}={}. Ignoring focusIds.", GraphMLProperties.FOCUS_STRATEGY, FocusStrategy.SPECIFIC.name()); } }