|
|
|
|
@ -1,15 +1,21 @@
|
|
|
|
|
package org.leolo.nrdatad.db.mariadb; |
|
|
|
|
|
|
|
|
|
import org.apache.logging.log4j.LogManager; |
|
|
|
|
import org.apache.logging.log4j.Logger; |
|
|
|
|
import org.leolo.nrdatad.db.DatabaseManager; |
|
|
|
|
import org.leolo.nrdatad.db.ParameterStore; |
|
|
|
|
import org.leolo.nrdatad.db.SearchMode; |
|
|
|
|
import org.leolo.nrdatad.model.Smart; |
|
|
|
|
import org.leolo.nrdatad.model.SmartEvent; |
|
|
|
|
import org.leolo.nrdatad.model.SmartStepType; |
|
|
|
|
import org.leolo.nrdatad.util.Range; |
|
|
|
|
|
|
|
|
|
import java.sql.Connection; |
|
|
|
|
import java.sql.PreparedStatement; |
|
|
|
|
import java.sql.SQLException; |
|
|
|
|
import java.sql.Statement; |
|
|
|
|
import java.sql.*; |
|
|
|
|
import java.util.Collection; |
|
|
|
|
import java.util.Vector; |
|
|
|
|
|
|
|
|
|
public class SmartDao extends org.leolo.nrdatad.db.SmartDao { |
|
|
|
|
Logger log = LogManager.getLogger(); |
|
|
|
|
|
|
|
|
|
public SmartDao(DatabaseManager manager) { |
|
|
|
|
super(manager); |
|
|
|
|
@ -83,4 +89,234 @@ public class SmartDao extends org.leolo.nrdatad.db.SmartDao {
|
|
|
|
|
stmt.executeUpdate("TRUNCATE TABLE smart"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Smart parseResultSet(ResultSet rs) throws SQLException{ |
|
|
|
|
Smart smart = new Smart(); |
|
|
|
|
smart.setSmartId(rs.getInt("smart_id")); |
|
|
|
|
smart.setTd(rs.getString("td")); |
|
|
|
|
smart.setFromBerth(rs.getString("from_berth")); |
|
|
|
|
smart.setToBerth(rs.getString("to_berth")); |
|
|
|
|
smart.setFromLine(rs.getString("from_line")); |
|
|
|
|
smart.setToLine(rs.getString("to_line")); |
|
|
|
|
smart.setBerthOffset(rs.getInt("berth_offset")); |
|
|
|
|
smart.setPlatform(rs.getString("platform")); |
|
|
|
|
smart.setEvent(SmartEvent.parseCode(rs.getString("event"))); |
|
|
|
|
smart.setRoute(rs.getString("route")); |
|
|
|
|
smart.setStanox(rs.getString("stanox")); |
|
|
|
|
smart.setStationName(rs.getString("station_name")); |
|
|
|
|
smart.setStepType(SmartStepType.parseCode(rs.getString("step_type"))); |
|
|
|
|
smart.setComment(rs.getString("comment")); |
|
|
|
|
return smart; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Collection<Smart> searchSmartByBerth(String fromBerth, String toBerth) throws SQLException { |
|
|
|
|
Vector<Smart> vector = new Vector<>(); |
|
|
|
|
try( |
|
|
|
|
Connection conn = getConnection(); |
|
|
|
|
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM smart WHERE from_berth = ? AND to_berth = ?"); |
|
|
|
|
){ |
|
|
|
|
pstmt.setString(1, fromBerth); |
|
|
|
|
pstmt.setString(2, toBerth); |
|
|
|
|
try(ResultSet rs = pstmt.executeQuery()){ |
|
|
|
|
vector.add(parseResultSet(rs)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return vector; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Collection<Smart> searchFromByBerth(String fromBerth) throws SQLException { |
|
|
|
|
Vector<Smart> vector = new Vector<>(); |
|
|
|
|
try( |
|
|
|
|
Connection conn = getConnection(); |
|
|
|
|
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM smart WHERE from_berth =?"); |
|
|
|
|
){ |
|
|
|
|
pstmt.setString(1, fromBerth); |
|
|
|
|
try(ResultSet rs = pstmt.executeQuery()){ |
|
|
|
|
vector.add(parseResultSet(rs)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return vector; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Collection<Smart> searchToBerth(String toBerth) throws SQLException {Vector<Smart> vector = new Vector<>(); |
|
|
|
|
try( |
|
|
|
|
Connection conn = getConnection(); |
|
|
|
|
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM smart WHERE to_berth = ?"); |
|
|
|
|
){ |
|
|
|
|
pstmt.setString(1, toBerth); |
|
|
|
|
try(ResultSet rs = pstmt.executeQuery()){ |
|
|
|
|
vector.add(parseResultSet(rs)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return vector; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Collection<Smart> searchSmartByBerthLine(String fromBerth, String toBerth, String fromLine, String toLine) throws SQLException { |
|
|
|
|
Vector<Smart> vector = new Vector<>(); |
|
|
|
|
try( |
|
|
|
|
Connection conn = getConnection(); |
|
|
|
|
PreparedStatement pstmt = conn.prepareStatement( |
|
|
|
|
"SELECT * FROM smart WHERE from_berth = ? AND to_berth = ? AND from_line = ? AND to_line = ?"); |
|
|
|
|
){ |
|
|
|
|
pstmt.setString(1, fromBerth); |
|
|
|
|
pstmt.setString(2, toBerth); |
|
|
|
|
pstmt.setString(3, fromLine); |
|
|
|
|
pstmt.setString(4, toLine); |
|
|
|
|
try(ResultSet rs = pstmt.executeQuery()){ |
|
|
|
|
vector.add(parseResultSet(rs)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return vector; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Collection<Smart> searchSmartByFromBerthLine(String fromBerth, String fromLine) throws SQLException { |
|
|
|
|
Vector<Smart> vector = new Vector<>(); |
|
|
|
|
try( |
|
|
|
|
Connection conn = getConnection(); |
|
|
|
|
PreparedStatement pstmt = conn.prepareStatement( |
|
|
|
|
"SELECT * FROM smart WHERE from_berth = ? AND to_berth = ? AND from_line = ? AND to_line = ?"); |
|
|
|
|
){ |
|
|
|
|
pstmt.setString(1, fromBerth); |
|
|
|
|
pstmt.setString(2, fromLine); |
|
|
|
|
try(ResultSet rs = pstmt.executeQuery()){ |
|
|
|
|
vector.add(parseResultSet(rs)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return vector; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Collection<Smart> searchSmartByToBerthLine(String toBerth, String toLine) throws SQLException { |
|
|
|
|
Vector<Smart> vector = new Vector<>(); |
|
|
|
|
try( |
|
|
|
|
Connection conn = getConnection(); |
|
|
|
|
PreparedStatement pstmt = conn.prepareStatement( |
|
|
|
|
"SELECT * FROM smart WHERE from_berth = ? AND to_berth = ? AND from_line = ? AND to_line = ?"); |
|
|
|
|
){ |
|
|
|
|
pstmt.setString(1, toBerth); |
|
|
|
|
pstmt.setString(2, toLine); |
|
|
|
|
try(ResultSet rs = pstmt.executeQuery()){ |
|
|
|
|
vector.add(parseResultSet(rs)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return vector; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Collection<Smart> searchSmartByStanox(String stanox) throws SQLException {Vector<Smart> vector = new Vector<>(); |
|
|
|
|
try( |
|
|
|
|
Connection conn = getConnection(); |
|
|
|
|
PreparedStatement pstmt = conn.prepareStatement( |
|
|
|
|
"SELECT * FROM smart WHERE stanox = ?"); |
|
|
|
|
){ |
|
|
|
|
pstmt.setString(1, stanox); |
|
|
|
|
try(ResultSet rs = pstmt.executeQuery()){ |
|
|
|
|
vector.add(parseResultSet(rs)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return vector; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Collection<Smart> executeQuery(Query query) throws SQLException { |
|
|
|
|
Vector<Smart> smarts = new Vector<>(); |
|
|
|
|
ParameterStore ps = new ParameterStore(); |
|
|
|
|
StringBuilder sql = new StringBuilder(); |
|
|
|
|
if(query.getSearchMode()== SearchMode.MATCH_ALL_GROUP || query.getSearchMode()==SearchMode.MATCH_ANY){ |
|
|
|
|
sql.append("SELECT * FROM smart WHERE "); |
|
|
|
|
String keyWord; |
|
|
|
|
if(query.getSearchMode() == SearchMode.MATCH_ALL_GROUP){ |
|
|
|
|
sql.append("1=1 "); |
|
|
|
|
keyWord = "AND "; |
|
|
|
|
}else{ |
|
|
|
|
sql.append("1=0 "); |
|
|
|
|
keyWord = "OR "; |
|
|
|
|
} |
|
|
|
|
if(query.getTd().size()>0){ |
|
|
|
|
sql.append(keyWord).append("td IN (").append(getQueryParams(query.getTd().size())).append(") "); |
|
|
|
|
ps.addAll(query.getTd()); |
|
|
|
|
} |
|
|
|
|
if(query.getFromBerth().size()>0){ |
|
|
|
|
sql.append(keyWord).append("from_berth IN(").append(getQueryParams(query.getFromBerth().size())).append(") "); |
|
|
|
|
ps.addAll(query.getFromBerth()); |
|
|
|
|
} |
|
|
|
|
if(query.getToBerth().size()>0){ |
|
|
|
|
sql.append(keyWord).append("to_berth IN(").append(getQueryParams(query.getToBerth().size())).append(") "); |
|
|
|
|
ps.addAll(query.getToBerth()); |
|
|
|
|
} |
|
|
|
|
if(query.getFromLine().size()>0){ |
|
|
|
|
sql.append(keyWord).append("from_line IN(").append(getQueryParams(query.getFromLine().size())).append(") "); |
|
|
|
|
ps.addAll(query.getFromLine()); |
|
|
|
|
} |
|
|
|
|
if (query.getToLine().size()>0){ |
|
|
|
|
sql.append(keyWord).append("to_line (").append(getQueryParams(query.getToLine().size())).append(") "); |
|
|
|
|
ps.addAll(query.getToLine()); |
|
|
|
|
} |
|
|
|
|
if (query.getBerthOffset().size()>0){ |
|
|
|
|
sql.append(keyWord).append("(1=0 "); |
|
|
|
|
for(Range<Integer> range: query.getBerthOffset()){ |
|
|
|
|
sql.append("OR (berth_offset BETWEEN ? AND ?) "); |
|
|
|
|
ps.addObject(range.getLowerBound()); |
|
|
|
|
ps.addObject(range.getUpperBound()); |
|
|
|
|
} |
|
|
|
|
sql.append(") "); |
|
|
|
|
} |
|
|
|
|
if(query.getPlatform().size()>0){ |
|
|
|
|
sql.append(keyWord).append("platform IN(").append(getQueryParams(query.getPlatform().size())).append(") "); |
|
|
|
|
ps.addAll(query.getPlatform()); |
|
|
|
|
} |
|
|
|
|
if(query.getEvent().size()>0){ |
|
|
|
|
sql.append(keyWord).append("event IN(").append(getQueryParams(query.getEvent().size())).append(") "); |
|
|
|
|
ps.addAllObject(query.getEvent()); |
|
|
|
|
} |
|
|
|
|
if(query.getRoute().size()>0){ |
|
|
|
|
sql.append(keyWord).append("route IN(").append(getQueryParams(query.getRoute().size())).append(") "); |
|
|
|
|
ps.addAll(query.getRoute()); |
|
|
|
|
} |
|
|
|
|
if(query.getStanox().size()>0){ |
|
|
|
|
sql.append(keyWord).append("stanox IN(").append(getQueryParams(query.getStanox().size())).append(") "); |
|
|
|
|
ps.addAll(query.getStanox()); |
|
|
|
|
} |
|
|
|
|
if(query.getStationName().size()>0){ |
|
|
|
|
sql.append(keyWord).append("(1=0 "); |
|
|
|
|
for(String stationName: query.getStationName()){ |
|
|
|
|
sql.append("OR station_name LIKE ? "); |
|
|
|
|
ps.add("%"+stationName+"%"); |
|
|
|
|
} |
|
|
|
|
sql.append(") "); |
|
|
|
|
} |
|
|
|
|
if(query.getStepType().size()>0){ |
|
|
|
|
sql.append(keyWord).append("step_type IN(").append(getQueryParams(query.getStepType().size())).append(") "); |
|
|
|
|
ps.addAllObject(query.getStepType()); |
|
|
|
|
} |
|
|
|
|
if(query.getComment().size()>0){ |
|
|
|
|
sql.append(keyWord).append("(1=0 "); |
|
|
|
|
for(String comment: query.getComment()){ |
|
|
|
|
sql.append("OR comment LIKE ? "); |
|
|
|
|
ps.add("%"+comment+"%"); |
|
|
|
|
} |
|
|
|
|
sql.append(") "); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
try( |
|
|
|
|
Connection conn = getConnection(); |
|
|
|
|
PreparedStatement pstmt = conn.prepareStatement(sql.toString()) |
|
|
|
|
){ |
|
|
|
|
for(int i=1;i<=ps.size();i++){ |
|
|
|
|
log.atDebug().log("Param {} = {}", i, ps.get(i)); |
|
|
|
|
setString(pstmt, i, ps.get(i)); |
|
|
|
|
} |
|
|
|
|
try(ResultSet rs = pstmt.executeQuery()){ |
|
|
|
|
while(rs.next()){ |
|
|
|
|
smarts.add(parseResultSet(rs)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return smarts; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|