code: public Graph<KT, VVT, Projection<KB, VVB, VVT, EV>> projectionTopFull() {
  		DataSet<Tuple5<KT, KB, EV, VVT, VVB>> edgesWithVertices	= joinEdgeWithVertices();
  
  		DataSet<Edge<KT, Projection<KB, VVB, VVT, EV>>> newEdges = edgesWithVertices.join(edgesWithVertices)
  			.where(1)
  			.equalTo(1)
  			.with(new ProjectionTopFull<>())
  				.name("Full top projection");
  
  		return Graph.fromDataSet(topVertices, newEdges, context);
  	}
docs: Convert a bipartite graph into a graph that contains only top vertices. An edge between two vertices in the new
  graph will exist only if the original bipartite graph contains at least one bottom vertex they both connect to.
  
  <p>The full projection performs three joins and returns edges containing the connecting vertex ID and value,
  both top vertex values, and both bipartite edge values.
  
  <p>Note: KT must override .equals(). This requirement may be removed in a future release.
  
  @return full top projection of the bipartite graph