Search in sources :

Example 1 with Stream

use of cwms.radar.data.dto.basinconnectivity.Stream in project cwms-radar-api by USACE.

the class BasinConnectivityStream method addStreamJunctionNodes.

private void addStreamJunctionNodes() {
    for (BasinConnectivityStream basinConnTributary : getTributaries()) {
        Stream tributary = basinConnTributary.getStream();
        Double confluenceStation = tributary.getConfluenceStation();
        Double diversionStation = tributary.getDiversionStation();
        BasinConnectivityStream divertsFromStream = getChildStream(tributary.getDivertingStreamId());
        if (// if the stream the tributary diverts from is also in basin
        divertsFromStream != null) {
            BasinConnectivityNode tributaryDiversionNode = divertsFromStream.getNodeAtStation(diversionStation);
            if (// if no stream node at this station, we must make an empty node
            tributaryDiversionNode == null) {
                tributaryDiversionNode = new EmptyStreamNode(divertsFromStream.getStream().getStreamName(), diversionStation, basinConnTributary.getStream().getDiversionBank());
                divertsFromStream.insertNode(tributaryDiversionNode);
                // remove first node from tributary, because this node now exists on tributary's diversion stream
                basinConnTributary.removeNode(basinConnTributary.getFirstNode());
            }
            basinConnTributary.setDiversionNode(tributaryDiversionNode);
        }
        BasinConnectivityNode existingNodeAtConfluenceStation = getNodeAtStation(confluenceStation);
        if (// if no stream node at this station, we must make an empty node
        existingNodeAtConfluenceStation == null) {
            EmptyStreamNode emptyNode = new EmptyStreamNode(getStream().getStreamName(), confluenceStation, basinConnTributary.getStream().getConfluenceBank());
            streamNodes.add(emptyNode);
        }
    }
}
Also used : BasinConnectivityNode(cwms.radar.api.graph.basinconnectivity.nodes.BasinConnectivityNode) Stream(cwms.radar.data.dto.basinconnectivity.Stream) EmptyStreamNode(cwms.radar.api.graph.basinconnectivity.nodes.EmptyStreamNode)

Example 2 with Stream

use of cwms.radar.data.dto.basinconnectivity.Stream in project cwms-radar-api by USACE.

the class BasinConnectivityStream method createAllStreamEdgesRecursive.

private static List<StreamEdge> createAllStreamEdgesRecursive(BasinConnectivityStream currentBasinConnStream, BasinConnectivityStream receivingStream) {
    List<StreamEdge> retval = new ArrayList<>();
    List<BasinConnectivityNode> streamNodes = currentBasinConnStream.getStreamNodes();
    BasinConnectivityNode diversionNode = currentBasinConnStream.getDiversionNode();
    BasinConnectivityNode confluenceNode = null;
    Stream currentStream = currentBasinConnStream.getStream();
    boolean isTributary = !currentBasinConnStream.isPrimary();
    if (// initialize confluence node if this is a tributary
    isTributary) {
        confluenceNode = receivingStream.getNodeAtStation(currentStream.getConfluenceStation());
    }
    if (// if stream diverts from another stream in basin, add edge between that stream and first node in this stream
    diversionNode != null) {
        // for case where there are no nodes on stream, but stream connects nodes on 2 different streams
        BasinConnectivityNode targetNode = confluenceNode;
        if (// if there are nodes on stream, then set target of first edge (coming from diversion stream) to the first node on stream
        !streamNodes.isEmpty()) {
            targetNode = streamNodes.get(0);
        }
        StreamEdge edge = new StreamEdge(currentStream.getStreamName(), diversionNode, targetNode);
        retval.add(edge);
    }
    for (int i = 0; i < streamNodes.size() - 1; i++) {
        StreamEdge edge = new StreamEdge(currentStream.getStreamName(), streamNodes.get(i), streamNodes.get(i + 1));
        retval.add(edge);
    }
    if (// if tributary, then connect last edge to junction node in receiving stream
    isTributary && !streamNodes.isEmpty()) {
        StreamEdge edge = new StreamEdge(currentStream.getStreamName(), streamNodes.get(streamNodes.size() - 1), confluenceNode);
        retval.add(edge);
    }
    for (BasinConnectivityStream tributary : currentBasinConnStream.getTributaries()) {
        retval.addAll(createAllStreamEdgesRecursive(tributary, currentBasinConnStream));
    }
    return retval;
}
Also used : BasinConnectivityNode(cwms.radar.api.graph.basinconnectivity.nodes.BasinConnectivityNode) StreamEdge(cwms.radar.api.graph.basinconnectivity.edges.StreamEdge) Stream(cwms.radar.data.dto.basinconnectivity.Stream)

Example 3 with Stream

use of cwms.radar.data.dto.basinconnectivity.Stream in project cwms-radar-api by USACE.

the class BasinConnectivityReach method createReachEdges.

public List<ReachEdge> createReachEdges(List<StreamEdge> allStreamEdges) {
    List<ReachEdge> retval = new ArrayList<>();
    Stream parentStream = parentBasinConnStream.getStream();
    BasinConnectivityNode firstNode = BasinConnectivityNode.getNode(parentBasinConnStream, reach.getUpstreamLocationName());
    BasinConnectivityNode lastNode = BasinConnectivityNode.getNode(parentBasinConnStream, reach.getDownstreamLocationName());
    if (parentStream.startsDownstream()) {
        BasinConnectivityNode tempNode = firstNode;
        firstNode = lastNode;
        lastNode = tempNode;
    }
    StreamEdge firstStreamEdge = parentBasinConnStream.getStreamEdgeWithSource(allStreamEdges, firstNode);
    ReachEdge reachEdge = new ReachEdge(reach.getReachName(), reach.getStreamName(), firstStreamEdge.getSource(), firstStreamEdge.getTarget());
    retval.add(reachEdge);
    while (!reachEdge.getTarget().equals(lastNode)) {
        StreamEdge nextStreamEdge = parentBasinConnStream.getStreamEdgeWithSource(allStreamEdges, reachEdge.getTarget());
        reachEdge = new ReachEdge(reach.getReachName(), reach.getStreamName(), nextStreamEdge.getSource(), nextStreamEdge.getTarget());
        retval.add(reachEdge);
    }
    return retval;
}
Also used : BasinConnectivityNode(cwms.radar.api.graph.basinconnectivity.nodes.BasinConnectivityNode) ReachEdge(cwms.radar.api.graph.basinconnectivity.edges.ReachEdge) ArrayList(java.util.ArrayList) StreamEdge(cwms.radar.api.graph.basinconnectivity.edges.StreamEdge) Stream(cwms.radar.data.dto.basinconnectivity.Stream)

Example 4 with Stream

use of cwms.radar.data.dto.basinconnectivity.Stream in project cwms-radar-api by USACE.

the class StreamDao method buildStreamsFromResultSet.

private Set<Stream> buildStreamsFromResultSet(ResultSet result, String parentStreamId, String unitSystem) throws SQLException {
    Set<Stream> retVal = new HashSet<>();
    while (result.next()) {
        String officeId = result.getString("OFFICE_ID");
        String streamId = result.getString("STREAM_ID");
        String receivingStreamId = result.getString("FLOWS_INTO_STREAM");
        if (receivingStreamId != null && receivingStreamId.equals(parentStreamId)) {
            Double confluenceStation = null;
            Object confluenceObject = result.getObject("FLOWS_INTO_STATION");
            if (confluenceObject instanceof Double) {
                confluenceStation = (Double) confluenceObject;
            }
            String confluenceBank = result.getString("FLOWS_INTO_BANK");
            String divertingStreamId = result.getString("DIVERTS_FROM_STREAM");
            Double diversionStation = null;
            Object diversionObject = result.getObject("DIVERTS_FROM_STATION");
            if (diversionObject instanceof Double) {
                diversionStation = (Double) diversionObject;
            }
            String diversionBank = result.getString("DIVERTS_FROM_BANK");
            Double streamLength = toDouble(result.getBigDecimal("STREAM_LENGTH"));
            boolean startsDownstream = result.getBoolean("STATIONING_STARTS_DS");
            Double averageSlope = toDouble(result.getBigDecimal("AVERAGE_SLOPE"));
            String comment = result.getString("COMMENTS");
            Stream stream = new Stream.Builder(streamId, startsDownstream, streamLength, officeId).withDivertingStreamId(divertingStreamId).withDiversionStation(diversionStation).withDiversionBank(diversionBank).withReceivingStreamId(receivingStreamId).withConfluenceStation(confluenceStation).withConfluenceBank(confluenceBank).withComment(comment).withAverageSlope(averageSlope).withStreamLocations(getStreamLocationsOnStream(streamId, unitSystem, officeId)).withTributaries(getTributaries(streamId, unitSystem, officeId)).withStreamReaches(getReaches(streamId, officeId)).build();
            retVal.add(stream);
        }
    }
    return retVal;
}
Also used : Stream(cwms.radar.data.dto.basinconnectivity.Stream) HashSet(java.util.HashSet)

Example 5 with Stream

use of cwms.radar.data.dto.basinconnectivity.Stream in project cwms-radar-api by USACE.

the class BasinDao method buildBasinsFromResultSet.

private List<Basin> buildBasinsFromResultSet(ResultSet rs, String unitSystem) throws SQLException {
    List<Basin> retval = new ArrayList<>();
    while (rs.next()) {
        String officeId = rs.getString("OFFICE_ID");
        String basinId = rs.getString("BASIN_ID");
        String parentBasinId = rs.getString("PARENT_BASIN_ID");
        Double sortOrder = rs.getDouble("SORT_ORDER");
        String primaryStreamId = rs.getString("PRIMARY_STREAM_ID");
        Double basinArea = rs.getDouble("TOTAL_DRAINAGE_AREA");
        Double contributingArea = rs.getDouble("CONTRIBUTING_DRAINAGE_AREA");
        Basin basin = new Basin.Builder(basinId, officeId).withBasinArea(basinArea).withContributingArea(contributingArea).withParentBasinId(parentBasinId).withSortOrder(sortOrder).build();
        if (primaryStreamId != null) {
            StreamDao streamDao = new StreamDao(dsl);
            Stream primaryStream = streamDao.getStream(primaryStreamId, unitSystem, officeId);
            basin = new Basin.Builder(basin).withPrimaryStream(primaryStream).build();
        }
        retval.add(basin);
    }
    return retval;
}
Also used : Basin(cwms.radar.data.dto.basinconnectivity.Basin) ArrayList(java.util.ArrayList) Stream(cwms.radar.data.dto.basinconnectivity.Stream)

Aggregations

Stream (cwms.radar.data.dto.basinconnectivity.Stream)6 BasinConnectivityNode (cwms.radar.api.graph.basinconnectivity.nodes.BasinConnectivityNode)3 StreamEdge (cwms.radar.api.graph.basinconnectivity.edges.StreamEdge)2 Basin (cwms.radar.data.dto.basinconnectivity.Basin)2 ArrayList (java.util.ArrayList)2 ReachEdge (cwms.radar.api.graph.basinconnectivity.edges.ReachEdge)1 EmptyStreamNode (cwms.radar.api.graph.basinconnectivity.nodes.EmptyStreamNode)1 HashSet (java.util.HashSet)1 CwmsDbBasinJooq (usace.cwms.db.jooq.dao.CwmsDbBasinJooq)1