package i5.las2peer.services.ocd.adapters.coverOutput; import i5.las2peer.services.ocd.adapters.AdapterException; import i5.las2peer.services.ocd.graphs.Cover; import i5.las2peer.services.ocd.graphs.CustomGraph; import java.io.Writer; import y.base.Node; import y.base.NodeCursor; /** * A cover output adapter for the labeled membership matrix format. * Each line of output contains first a node name and then n double values (where n is some natural number), using the space character (' ') as a delimiter. * There is one line for each node and the i-th double value of a row will define the node's membership degree for the i-th community. * @author Sebastian * */ public class LabeledMembershipMatrixCoverOutputAdapter extends AbstractCoverOutputAdapter { /** * Creates a new instance setting the writer attribute. * @param writer The writer used for output. */ public LabeledMembershipMatrixCoverOutputAdapter(Writer writer) { this.setWriter(writer); } public LabeledMembershipMatrixCoverOutputAdapter() { } @Override public void writeCover(Cover cover) throws AdapterException { try { CustomGraph graph = cover.getGraph(); NodeCursor nodes = graph.nodes(); while(nodes.ok()) { Node node = nodes.node(); String nodeName = graph.getNodeName(node); if(nodeName.isEmpty()) { nodeName = Integer.toString(node.index()); } writer.write(nodeName + " "); for(int i=0; i<cover.communityCount(); i++) { writer.write(String.format("%.4f ", cover.getBelongingFactor(node, i))); } nodes.next(); if(nodes.ok()) { writer.write("\n"); } } } catch (Exception e) { throw new AdapterException(e); } finally { try { writer.close(); } catch (Exception e) { } } } }