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);
}
}
}
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;
}
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;
}
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;
}
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;
}
Aggregations