| 1 | package com.popx.persistenza; | |
| 2 | ||
| 3 | import com.popx.modello.RigaOrdineBean; | |
| 4 | ||
| 5 | import java.sql.Connection; | |
| 6 | import java.sql.PreparedStatement; | |
| 7 | import java.sql.ResultSet; | |
| 8 | import java.sql.SQLException; | |
| 9 | import java.util.ArrayList; | |
| 10 | import java.util.List; | |
| 11 | import javax.sql.DataSource; | |
| 12 | import java.util.logging.Level; | |
| 13 | import java.util.logging.Logger; | |
| 14 | ||
| 15 | public class RigaOrdineDAOImpl implements RigaOrdineDAO { | |
| 16 | ||
| 17 | private DataSource ds; | |
| 18 | private static final Logger LOGGER = Logger.getLogger(RigaOrdineDAOImpl.class.getName()); | |
| 19 | ||
| 20 | /*@ public model boolean available; | |
| 21 | @ public invariant ds != null && available; | |
| 22 | @ represents available <- ds != null; | |
| 23 | @*/ | |
| 24 | ||
| 25 | public RigaOrdineDAOImpl() { | |
| 26 | this.ds = DataSourceSingleton.getInstance(); | |
| 27 | } | |
| 28 | ||
| 29 | @Override | |
| 30 | /*@ public normal_behavior | |
| 31 | @ requires rigaOrdine != null | |
| 32 | @ && rigaOrdine.getOrdineId() > 0 | |
| 33 | @ && rigaOrdine.getProdottoId() != null && !rigaOrdine.getProdottoId().isEmpty() | |
| 34 | @ && rigaOrdine.getQuantity() >= 0 | |
| 35 | @ && rigaOrdine.getUnitaryCost() >= 0; | |
| 36 | @ assignable \everything; | |
| 37 | @ ensures available; | |
| 38 | @*/ | |
| 39 | public void addRigaOrdine(RigaOrdineBean rigaOrdine) { | |
| 40 | String query = "INSERT INTO RigaOrdine (ordine_id, prodotto_id, quantity, unitary_cost) VALUES (?, ?, ?, ?)"; | |
| 41 | ||
| 42 | try (Connection con = ds.getConnection(); | |
| 43 | PreparedStatement ps = con.prepareStatement(query)) { | |
| 44 | ||
| 45 |
1
1. addRigaOrdine : removed call to java/sql/PreparedStatement::setInt → KILLED |
ps.setInt(1, rigaOrdine.getOrdineId()); |
| 46 |
1
1. addRigaOrdine : removed call to java/sql/PreparedStatement::setString → KILLED |
ps.setString(2, rigaOrdine.getProdottoId()); |
| 47 |
1
1. addRigaOrdine : removed call to java/sql/PreparedStatement::setInt → KILLED |
ps.setInt(3, rigaOrdine.getQuantity()); |
| 48 |
1
1. addRigaOrdine : removed call to java/sql/PreparedStatement::setFloat → KILLED |
ps.setFloat(4, rigaOrdine.getUnitaryCost()); |
| 49 | ||
| 50 | ps.executeUpdate(); | |
| 51 | ||
| 52 | } catch (SQLException e) { | |
| 53 | LOGGER.log(Level.SEVERE, "SQL error in addRigaOrdine", e); | |
| 54 | } | |
| 55 | } | |
| 56 | ||
| 57 | @Override | |
| 58 | /*@ public normal_behavior | |
| 59 | @ requires ordineId > 0; | |
| 60 | @ assignable \everything; | |
| 61 | @ ensures \result != null | |
| 62 | @ && (\forall int i; 0 <= i && i < \result.size(); | |
| 63 | @ \result.get(i) != null | |
| 64 | @ && \result.get(i).getOrdineId() == ordineId | |
| 65 | @ && \result.get(i).getQuantity() >= 0 | |
| 66 | @ && \result.get(i).getUnitaryCost() >= 0 | |
| 67 | @ && \result.get(i).getProdottoId() != null | |
| 68 | @ && !\result.get(i).getProdottoId().isEmpty()); | |
| 69 | @*/ | |
| 70 | public List<RigaOrdineBean> getRigheOrdineByOrdineId(int ordineId) { | |
| 71 | String query = "SELECT * FROM RigaOrdine WHERE ordine_id = ?"; | |
| 72 | List<RigaOrdineBean> righeOrdine = new ArrayList<>(); | |
| 73 | ||
| 74 | try (Connection con = ds.getConnection(); | |
| 75 | PreparedStatement ps = con.prepareStatement(query)) { | |
| 76 | ||
| 77 |
1
1. getRigheOrdineByOrdineId : removed call to java/sql/PreparedStatement::setInt → KILLED |
ps.setInt(1, ordineId); |
| 78 | ResultSet rs = ps.executeQuery(); | |
| 79 | ||
| 80 |
1
1. getRigheOrdineByOrdineId : negated conditional → KILLED |
while (rs.next()) { |
| 81 | RigaOrdineBean rigaOrdine = new RigaOrdineBean(); | |
| 82 |
1
1. getRigheOrdineByOrdineId : removed call to com/popx/modello/RigaOrdineBean::setOrdineId → KILLED |
rigaOrdine.setOrdineId(rs.getInt("ordine_id")); |
| 83 |
1
1. getRigheOrdineByOrdineId : removed call to com/popx/modello/RigaOrdineBean::setProdottoId → KILLED |
rigaOrdine.setProdottoId(rs.getString("prodotto_id")); |
| 84 |
1
1. getRigheOrdineByOrdineId : removed call to com/popx/modello/RigaOrdineBean::setQuantity → KILLED |
rigaOrdine.setQuantity(rs.getInt("quantity")); |
| 85 |
1
1. getRigheOrdineByOrdineId : removed call to com/popx/modello/RigaOrdineBean::setUnitaryCost → KILLED |
rigaOrdine.setUnitaryCost(rs.getFloat("unitary_cost")); |
| 86 | righeOrdine.add(rigaOrdine); | |
| 87 | } | |
| 88 | ||
| 89 | } catch (SQLException e) { | |
| 90 | LOGGER.log(Level.SEVERE, "SQL error in getRigheOrdineByOrdineId", e); | |
| 91 | } | |
| 92 | ||
| 93 |
1
1. getRigheOrdineByOrdineId : replaced return value with Collections.emptyList for com/popx/persistenza/RigaOrdineDAOImpl::getRigheOrdineByOrdineId → KILLED |
return righeOrdine; |
| 94 | } | |
| 95 | ||
| 96 | @Override | |
| 97 | /*@ public normal_behavior | |
| 98 | @ requires rigaOrdine != null | |
| 99 | @ && rigaOrdine.getOrdineId() > 0 | |
| 100 | @ && rigaOrdine.getProdottoId() != null && !rigaOrdine.getProdottoId().isEmpty() | |
| 101 | @ && rigaOrdine.getQuantity() >= 0 | |
| 102 | @ && rigaOrdine.getUnitaryCost() >= 0; | |
| 103 | @ assignable \everything; | |
| 104 | @ ensures available; | |
| 105 | @*/ | |
| 106 | public void updateRigaOrdine(RigaOrdineBean rigaOrdine) { | |
| 107 | String query = "UPDATE RigaOrdine SET quantity = ?, unitary_cost = ? WHERE ordine_id = ? AND prodotto_id = ?"; | |
| 108 | ||
| 109 | try (Connection con = ds.getConnection(); | |
| 110 | PreparedStatement ps = con.prepareStatement(query)) { | |
| 111 | ||
| 112 |
1
1. updateRigaOrdine : removed call to java/sql/PreparedStatement::setInt → KILLED |
ps.setInt(1, rigaOrdine.getQuantity()); |
| 113 |
1
1. updateRigaOrdine : removed call to java/sql/PreparedStatement::setFloat → KILLED |
ps.setFloat(2, rigaOrdine.getUnitaryCost()); |
| 114 |
1
1. updateRigaOrdine : removed call to java/sql/PreparedStatement::setInt → KILLED |
ps.setInt(3, rigaOrdine.getOrdineId()); |
| 115 |
1
1. updateRigaOrdine : removed call to java/sql/PreparedStatement::setString → KILLED |
ps.setString(4, rigaOrdine.getProdottoId()); |
| 116 | ||
| 117 | ps.executeUpdate(); | |
| 118 | ||
| 119 | } catch (SQLException e) { | |
| 120 | LOGGER.log(Level.SEVERE, "SQL error in updateRigaOrdine", e); | |
| 121 | } | |
| 122 | } | |
| 123 | ||
| 124 | @Override | |
| 125 | /*@ public normal_behavior | |
| 126 | @ requires ordineId > 0 | |
| 127 | @ && prodottoId != null && !prodottoId.isEmpty(); | |
| 128 | @ assignable \everything; | |
| 129 | @ ensures available; | |
| 130 | @*/ | |
| 131 | public void deleteRigaOrdine(int ordineId, String prodottoId) { | |
| 132 | String query = "DELETE FROM RigaOrdine WHERE ordine_id = ? AND prodotto_id = ?"; | |
| 133 | ||
| 134 | try (Connection con = ds.getConnection(); | |
| 135 | PreparedStatement ps = con.prepareStatement(query)) { | |
| 136 | ||
| 137 |
1
1. deleteRigaOrdine : removed call to java/sql/PreparedStatement::setInt → KILLED |
ps.setInt(1, ordineId); |
| 138 |
1
1. deleteRigaOrdine : removed call to java/sql/PreparedStatement::setString → KILLED |
ps.setString(2, prodottoId); |
| 139 | ||
| 140 | ps.executeUpdate(); | |
| 141 | ||
| 142 | } catch (SQLException e) { | |
| 143 | LOGGER.log(Level.SEVERE, "SQL error in deleteRigaOrdine", e); | |
| 144 | } | |
| 145 | } | |
| 146 | } | |
Mutations | ||
| 45 |
1.1 |
|
| 46 |
1.1 |
|
| 47 |
1.1 |
|
| 48 |
1.1 |
|
| 77 |
1.1 |
|
| 80 |
1.1 |
|
| 82 |
1.1 |
|
| 83 |
1.1 |
|
| 84 |
1.1 |
|
| 85 |
1.1 |
|
| 93 |
1.1 |
|
| 112 |
1.1 |
|
| 113 |
1.1 |
|
| 114 |
1.1 |
|
| 115 |
1.1 |
|
| 137 |
1.1 |
|
| 138 |
1.1 |