prasadtalasila/BITS-Darshini

View on GitHub
src/main/java/in/ac/bits/protocolanalyzer/protocol/ProtocolGraph.java

Summary

Maintainability
A
35 mins
Test Coverage
package in.ac.bits.protocolanalyzer.protocol;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import in.ac.bits.protocolanalyzer.analyzer.CustomAnalyzer;
import in.ac.bits.protocolanalyzer.analyzer.Session;
import lombok.Getter;
import lombok.extern.log4j.Log4j;

@Component
@Scope(value = "prototype")
@Getter
@Log4j
public class ProtocolGraph {

    @Autowired
    private Protocol protocol;

    private Map<String, Set<String>> protocolGraph = new HashMap<String, Set<String>>();

    public void configureNode(Session session, ArrayList<String> graphLines,
            int startLine, int endLine) {
        String nodeName = graphLines.get(startLine);
        String[] tokens = nodeName.split("\\s");
        nodeName = tokens[1].toUpperCase();
        log.info("Node name extracted = " + nodeName);
        configureProtocol(session, nodeName);
        Set<String> toNodes = new HashSet<String>();
        int linePtr = startLine + 2;
        while (linePtr < endLine - 1) {
            String[] parts = graphLines.get(linePtr).split(":");
            String protocolName = parts[1].substring(0, parts[1].length() - 1)
                    .trim();
            log.info("Protocol name extracted in case statement ="
                    + protocolName);
            toNodes.add(protocolName.toUpperCase());
            linePtr++;
        }
        protocolGraph.put(nodeName.toUpperCase(), toNodes);
    }

    public void configureSessionCells(Session session) {
        if (protocolGraph == null) {
            log.info("protocolgraph is null in Protocolgraph!!");
        } else {
            for (Entry<String, Set<String>> entry : protocolGraph.entrySet()) {
                log.info("for protocol :" + entry.getKey());
                for (String str : entry.getValue()) {
                    log.info("Attaching: " + str);
                }
            }
        }
        session.connectCells(protocolGraph);
    }

    public void configureStartNode(Session session,
            ArrayList<String> graphLines, int startLine, int endLine) {
        String protocolName = graphLines.get(startLine + 1);
        protocolName = protocolName.substring(0, protocolName.length() - 1)
                .trim();
        log.info("Protocol name in startGraph = " + protocolName);
        configureProtocol(session, protocolName);

    }

    private void configureProtocol(Session session, String protocolName) {
        CustomAnalyzer analyzer = protocol.getCustomAnalyzer(protocolName);
        log.info("Custom analyzer obtained in protocol graph = "
                + analyzer.toString());
        int cellNumber = protocol.getCellNumber(protocolName);
        log.info("Cell number returned by protocol = " + cellNumber);
        session.attachCustomAnalyzer(cellNumber, analyzer);
    }

}