package edu.asu.spring.quadriga.service.network.impl; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import edu.asu.spring.quadriga.domain.impl.networks.ElementEventsType; import edu.asu.spring.quadriga.domain.network.INetworkNodeInfo; import edu.asu.spring.quadriga.service.network.INetworkTransformer; import edu.asu.spring.quadriga.service.network.domain.ITransformedNetwork; import edu.asu.spring.quadriga.service.network.domain.impl.TransformedNetwork; import edu.asu.spring.quadriga.transform.Link; import edu.asu.spring.quadriga.transform.Node; /** * Class responsible for transforming networks retrieved from QStore into that * have Appellation and Relation Events into S-P-O networks that are collapsed * for S and O nodes, but have unique P nodes. * * @author jdamerow * */ @Service public class NetworkTransformer implements INetworkTransformer { @Autowired private EventParser parser; @Autowired private NetworkDownloadService networkDownloadService; /** * * {@inheritDoc} */ @Override public ITransformedNetwork transformNetwork( List<INetworkNodeInfo> networkNodeInfoList) { Map<String, Node> nodes = new HashMap<>(); List<Link> links = new ArrayList<>(); ITransformedNetwork transformedNetwork = new TransformedNetwork(nodes, links); if (networkNodeInfoList == null || networkNodeInfoList.size() == 0) { // return the trasnformed network return transformedNetwork; } List<ElementEventsType> elementEventsTypeList = networkDownloadService .getElementEventTypes(networkNodeInfoList); // loop through all the elementEventsTypeList and parse the staement // We made sure that networkNodeInfoList and elementEventsTypeList // have same size. int index = 0; for (INetworkNodeInfo networkNodeInfo: networkNodeInfoList) { ElementEventsType elementEventsType = elementEventsTypeList.get(index++); // Do not proceed if the elementEventsType is null // null implies there is some exception while retrieving the dataj if (elementEventsType == null) { continue; } parser.parseStatement(networkNodeInfo.getId(), elementEventsType, nodes, links); } // Instead of sending null // send an empty transformed network return transformedNetwork; } }