@Override public Iterator<Vertex> getVertexIterator() { return graph.getVertices().iterator(); }
@Override public boolean nodeExists(int nodeId) { Iterable<Vertex> iter = graph.getVertices(NODE_ID, nodeId); return iter.iterator().hasNext(); }
@Override public Vertex getVertex(Integer i) { return graph.getVertices(NODE_ID, i).iterator().next(); } }
@Override public double getEdgesInsideCommunity(int vertexCommunity, int communityVertices) { double edges = 0; Iterable<Vertex> vertices = graph.getVertices(NODE_COMMUNITY, vertexCommunity); Iterable<Vertex> comVertices = graph.getVertices(COMMUNITY, communityVertices); for (Vertex vertex : vertices) { for (Vertex v : vertex.getVertices(Direction.OUT, SIMILAR)) { if (Iterables.contains(comVertices, v)) { edges++; } } } return edges; }
@Override public Set<Integer> getNodesFromNodeCommunity(int nodeCommunity) { Set<Integer> nodes = new HashSet<Integer>(); Iterable<Vertex> iter = graph.getVertices("nodeCommunity", nodeCommunity); for (Vertex v : iter) { Integer nodeId = v.getProperty(NODE_ID); nodes.add(nodeId); } return nodes; }
@Override public double getGraphWeightSum() { long edges = 0; for (Vertex o : graph.getVertices()) { edges += ((OrientVertex) o).countEdges(Direction.OUT, SIMILAR); } return (double) edges; }
@Override public double getNodeCommunityWeight(int nodeCommunity) { double nodeCommunityWeight = 0; Iterable<Vertex> iter = graph.getVertices(NODE_COMMUNITY, nodeCommunity); for (Vertex vertex : iter) { nodeCommunityWeight += getNodeOutDegree(vertex); } return nodeCommunityWeight; }
@Override public void moveNode(int nodeCommunity, int toCommunity) { Iterable<Vertex> fromIter = graph.getVertices(NODE_COMMUNITY, nodeCommunity); for (Vertex vertex : fromIter) { vertex.setProperty(COMMUNITY, toCommunity); } }
@Override public double getNodeWeight(int nodeId) { Vertex vertex = graph.getVertices(NODE_ID, nodeId).iterator().next(); double weight = getNodeOutDegree(vertex); return weight; }
@Override public int getCommunity(int nodeCommunity) { final Iterator<Vertex> result = graph.getVertices(NODE_COMMUNITY, nodeCommunity).iterator(); if (!result.hasNext()) throw new IllegalArgumentException("node community not found: " + nodeCommunity); Vertex vertex = result.next(); int community = vertex.getProperty(COMMUNITY); return community; }
@Override public Set<Integer> getNodesFromCommunity(int community) { Set<Integer> nodes = new HashSet<Integer>(); Iterable<Vertex> iter = graph.getVertices(COMMUNITY, community); for (Vertex v : iter) { Integer nodeId = v.getProperty(NODE_ID); nodes.add(nodeId); } return nodes; }
@Override public int getCommunityFromNode(int nodeId) { Vertex vertex = graph.getVertices(NODE_ID, nodeId).iterator().next(); return vertex.getProperty(COMMUNITY); }
@Override public double getCommunityWeight(int community) { double communityWeight = 0; Iterable<Vertex> iter = graph.getVertices(COMMUNITY, community); if (Iterables.size(iter) > 1) { for (Vertex vertex : iter) { communityWeight += getNodeOutDegree(vertex); } } return communityWeight; }
@Override public int getCommunitySize(int community) { Iterable<Vertex> vertices = graph.getVertices(COMMUNITY, community); Set<Integer> nodeCommunities = new HashSet<Integer>(); for (Vertex v : vertices) { int nodeCommunity = v.getProperty(NODE_COMMUNITY); if (!nodeCommunities.contains(nodeCommunity)) { nodeCommunities.add(nodeCommunity); } } return nodeCommunities.size(); }
@Override public Set<Integer> getNeighborsIds(int nodeId) { Set<Integer> neighbours = new HashSet<Integer>(); Vertex vertex = graph.getVertices(NODE_ID, nodeId).iterator().next(); for (Vertex v : vertex.getVertices(Direction.IN, SIMILAR)) { Integer neighborId = v.getProperty(NODE_ID); neighbours.add(neighborId); } return neighbours; }
@Override public Map<Integer, List<Integer>> mapCommunities(int numberOfCommunities) { Map<Integer, List<Integer>> communities = new HashMap<Integer, List<Integer>>(); for (int i = 0; i < numberOfCommunities; i++) { Iterator<Vertex> verticesIter = graph.getVertices(COMMUNITY, i).iterator(); List<Integer> vertices = new ArrayList<Integer>(); while (verticesIter.hasNext()) { Integer nodeId = verticesIter.next().getProperty(NODE_ID); vertices.add(nodeId); } communities.put(i, vertices); } return communities; }
@Override public Set<Integer> getCommunitiesConnectedToNodeCommunities(int nodeCommunities) { Set<Integer> communities = new HashSet<Integer>(); Iterable<Vertex> vertices = graph.getVertices(NODE_COMMUNITY, nodeCommunities); for (Vertex vertex : vertices) { for (Vertex v : vertex.getVertices(Direction.OUT, SIMILAR)) { int community = v.getProperty(COMMUNITY); if (!communities.contains(community)) { communities.add(community); } } } return communities; }
@Override public void initCommunityProperty() { int communityCounter = 0; for (Vertex v : graph.getVertices()) { ((OrientVertex) v).setProperties(NODE_COMMUNITY, communityCounter, COMMUNITY, communityCounter); ((OrientVertex) v).save(); communityCounter++; } }
@Override public int reInitializeCommunities() { Map<Integer, Integer> initCommunities = new HashMap<Integer, Integer>(); int communityCounter = 0; for (Vertex v : graph.getVertices()) { int communityId = v.getProperty(COMMUNITY); if (!initCommunities.containsKey(communityId)) { initCommunities.put(communityId, communityCounter); communityCounter++; } int newCommunityId = initCommunities.get(communityId); ((OrientVertex) v).setProperties(COMMUNITY, newCommunityId, NODE_COMMUNITY, newCommunityId); ((OrientVertex) v).save(); } return communityCounter; }