From 2c0b705ab636deecd2fd87dad7b8a39368e335ba Mon Sep 17 00:00:00 2001 From: fbenoist68 Date: Thu, 16 Nov 2023 00:39:20 +0100 Subject: [PATCH] first commit --- .DS_Store | Bin 0 -> 8196 bytes .gitignore | 42 ++ pom.xml | 76 ++++ src/main/java/com/example/CorsFilters.java | 50 +++ .../example/services/DatabaseConnection.java | 26 ++ .../services/DatabaseConnectionDS.java | 28 ++ .../com/example/services/DatabaseService.java | 52 +++ .../com/example/services/HelloWebService.java | 13 + .../com/example/services/ItemService.java | 385 ++++++++++++++++++ .../com/example/services/StoreService.java | 179 ++++++++ src/main/webapp/WEB-INF/web.xml | 35 ++ 11 files changed, 886 insertions(+) create mode 100644 .DS_Store create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/com/example/CorsFilters.java create mode 100644 src/main/java/com/example/services/DatabaseConnection.java create mode 100644 src/main/java/com/example/services/DatabaseConnectionDS.java create mode 100644 src/main/java/com/example/services/DatabaseService.java create mode 100644 src/main/java/com/example/services/HelloWebService.java create mode 100644 src/main/java/com/example/services/ItemService.java create mode 100644 src/main/java/com/example/services/StoreService.java create mode 100644 src/main/webapp/WEB-INF/web.xml diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..61c0765f562d6d7c75bb2d5d0776462d70b43d2f GIT binary patch literal 8196 zcmeHMU2GLa6h3EL=#1rO3vDSbR~HKeXf37umfuT%<cNe;0yIbz=y%!~z z>We=J8sCg!;)^E65EG-;7oT|WCt{+6X!JpSG$y{F@kQ~>&fa1#@FYr$w*F086F+fged??kphH; zo+%FqF?uAEk(`t=gwmQad%y^aQHp^QPUE_mPBIzENhu{9P{IMDoiWN#Fx;JRdN>_0 zDP`Qo9*8|~qX$Iz%!U9A$icC){Cz4j;n;rA+Ij_*ipp8Dt5_AQW{;-EykaUag1p~h zM#Q_H?s;s=ckXSzo_yy#rJBOoO2yhT4gw&u}|df;BmE)F}a7PFXc>q@32V*?DtHuq8W~8 zn!cQ|Lqgw~v#6D7uB}>40Hfb0W1^qgvW9cj?>|njR6_Z>^^B|LfMaAVCsJ*0C)M7e zg0whNF5J%eaMl|iCu4l6)AU`8Jtnr@XZS(igyl~Epza>V)K5nJF(YU76^T$0qI(Zx z;VUA&0Ck&o;N?PZ?9(-EL@c(;G%b^iZm3_RY6r9wQ@lYiLUOR-v1?7zMUh&qh`Uv+PeE1S3cObaqG@$5=qXL zX!cL~hK!xT^N_LOdoJf&7)N|bVt^=ZoxC1MGO$YFq*jU0W0%G3`}xv@I*UjzyUX~B zggToDFT1M}O$k+@IFsF$L@QS-D2jN9U6*L$Dl*yG#M`-AN%17R+xQZ$0+*enScXyg z*DQSl-iCLHr5A~%SKvGN0e*!);4fsv%6e?T#kd3$#LShr3Y)MQH{d4Rj9ZAOUD$)Y zxEuFi3I~X#!#IK&G||GN=-~LfmePvaRpi|6n~dr z!9ptMI-Yxs^d;WTgv7nu;DHLcMuW)zyKnvd|2FItFA;kn_Q0L$0j%swb#>6MyVY4M za&4XJ5vrnyd6QCx5Ng77oMf1elbrs;ke+p#Dlo}NPD)7{D*yS10LzT;|M>n7xpy}= Fe*@LI5Sah~ literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0121050 --- /dev/null +++ b/.gitignore @@ -0,0 +1,42 @@ +# Dossiers générés par l'IDE +.idea/ + +# Fichiers de configuration spécifiques à l'IDE +*.iml +*.iws +*.ipr + +# Dossiers générés par Maven +target/ + +# Fichiers de configuration de Maven +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +release.properties +dependency-reduced-pom.xml +buildNumber.properties + +# Fichiers générés par Tomcat +*.log +*.tmp +work/ +temp/ +logs/ + +# Dossiers spécifiques à Eclipse +.settings/ + +# Fichiers spécifiques à Eclipse +.classpath +.project + +# Dossiers spécifiques à NetBeans +nb-configuration/ +nbproject/private/ + +# Fichiers spécifiques à NetBeans +nb-configuration.xml + +# Dossiers spécifiques à VS Code +.vscode/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..29ebc22 --- /dev/null +++ b/pom.xml @@ -0,0 +1,76 @@ + + 4.0.0 + com.example + hdpos + war + 1.0-SNAPSHOT + hdpos Maven Webapp + http://maven.apache.org + + + junit + junit + 3.8.1 + test + + + + + com.oracle.database.jdbc + ojdbc10 + 19.8.0.0 + + + + + org.glassfish.jersey.core + jersey-server + 2.41 + + + + org.glassfish.jersey.containers + jersey-container-servlet + 2.41 + + + + org.glassfish.jersey.inject + jersey-hk2 + 2.41 + + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + + + com.fasterxml.jackson.core + jackson-databind + 2.13.0 + + + + + + hdpos + + + org.codehaus.cargo + cargo-maven2-plugin + 1.8.3 + + + tomcat9x + embedded + + + + + + diff --git a/src/main/java/com/example/CorsFilters.java b/src/main/java/com/example/CorsFilters.java new file mode 100644 index 0000000..853eaa7 --- /dev/null +++ b/src/main/java/com/example/CorsFilters.java @@ -0,0 +1,50 @@ +package com.example; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletResponse; // Importez cette classe + +import java.io.IOException; + +public class CorsFilters implements Filter { + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + + // Utilisez HttpServletResponse au lieu de ServletResponse + HttpServletResponse httpResponse = (HttpServletResponse) response; + + // Autoriser l'accès depuis n'importe quelle origine + httpResponse.setHeader("Access-Control-Allow-Origin", "*"); + + // Autoriser les méthodes HTTP spécifiées (GET, POST, OPTIONS, PUT, DELETE) + httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, DELETE"); + + // Autoriser les en-têtes spécifiés dans la requête + httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type"); + + // Permettre l'envoi de cookies (si nécessaire) + httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); + + // Durée de validité des résultats préalables (pré-vérifications OPTIONS) + httpResponse.setHeader("Access-Control-Max-Age", "3600"); + + // Continuer la chaîne de filtres + chain.doFilter(request, httpResponse); + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + // Initialisation du filtre + } + + @Override + public void destroy() { + // Destruction du filtre + } +} diff --git a/src/main/java/com/example/services/DatabaseConnection.java b/src/main/java/com/example/services/DatabaseConnection.java new file mode 100644 index 0000000..39fc7c2 --- /dev/null +++ b/src/main/java/com/example/services/DatabaseConnection.java @@ -0,0 +1,26 @@ +package com.example.services; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class DatabaseConnection implements AutoCloseable { + + private Connection connection; + + public DatabaseConnection(String dbHost, String username, String password) throws SQLException { + // Initialiser votre connexion à la base de données ici + connection = DriverManager.getConnection("jdbc:oracle:thin:@" + dbHost + ":1521/XSTORE", username, password); + } + + public Connection getConnection() { + return connection; + } + + @Override + public void close() throws SQLException { + if (connection != null && !connection.isClosed()) { + connection.close(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/example/services/DatabaseConnectionDS.java b/src/main/java/com/example/services/DatabaseConnectionDS.java new file mode 100644 index 0000000..6148942 --- /dev/null +++ b/src/main/java/com/example/services/DatabaseConnectionDS.java @@ -0,0 +1,28 @@ +package com.example.services; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class DatabaseConnectionDS implements AutoCloseable { + + private Connection connection; + + public DatabaseConnectionDS(String username, String password) throws SQLException { + // Initialiser votre connexion à la base de données ici + // jdbc:oracle:thin:@v-aspd-b01-ii-d.adic.lan:1521/IASPDI + // jdbc:oracle:thin:@v-aspd-b01-irdc.adic.lan:1521/MASPDI + connection = DriverManager.getConnection("jdbc:oracle:thin:@v-aspd-b01-irdc.adic.lan:1521/MASPDI", username, password); + } + + public Connection getConnection() { + return connection; + } + + @Override + public void close() throws SQLException { + if (connection != null && !connection.isClosed()) { + connection.close(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/example/services/DatabaseService.java b/src/main/java/com/example/services/DatabaseService.java new file mode 100644 index 0000000..34803cc --- /dev/null +++ b/src/main/java/com/example/services/DatabaseService.java @@ -0,0 +1,52 @@ +package com.example.services; + +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +@Path("/database") +public class DatabaseService { + + @GET + @Path("/replication") + @Produces(MediaType.APPLICATION_JSON) + public Response getCount(@QueryParam("dbHost") String dbHost) { + + if (dbHost == null) { + return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build(); + } + + DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes + + try (DatabaseConnection databaseConnection = new DatabaseConnection(dbHost, "repqueue", "repqueue")) { + String query = "SELECT COUNT(*) FROM CTL_REPLICATION_QUEUE"; + + try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query); + ResultSet resultSet = statement.executeQuery()) { + + if (resultSet.next()) { + long count = resultSet.getLong(1); + // Construction manuelle de la réponse JSON + String jsonResponse = "{\"count\":" + count + "}"; + return Response.ok(jsonResponse).build(); + } + } + } catch (SQLException e) { + e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production + + // Construction de la réponse JSON en cas d'erreur + String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}"; + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build(); + } + + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/services/HelloWebService.java b/src/main/java/com/example/services/HelloWebService.java new file mode 100644 index 0000000..4426f82 --- /dev/null +++ b/src/main/java/com/example/services/HelloWebService.java @@ -0,0 +1,13 @@ +package com.example.services; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; + +@Path("/hello") +public class HelloWebService { + + @GET + public String sayHello() { + return "Hello, world!"; + } +} diff --git a/src/main/java/com/example/services/ItemService.java b/src/main/java/com/example/services/ItemService.java new file mode 100644 index 0000000..7146348 --- /dev/null +++ b/src/main/java/com/example/services/ItemService.java @@ -0,0 +1,385 @@ +package com.example.services; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; + +@Path("/items") +public class ItemService { + + @GET + @Path("/get") + @Produces(MediaType.APPLICATION_JSON) + public Response getItemById( + @QueryParam("dbHost") String dbHost, + @QueryParam("itemId") String itemId) { + + if (dbHost == null) { + return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build(); + } + + if (itemId == null) { + return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build(); + } + + DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes + + try (DatabaseConnection databaseConnection = new DatabaseConnection(dbHost, "dtv", "dtv")) { + String query = "SELECT * FROM ITM_ITEM WHERE ITEM_ID LIKE ?" ; + + try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) { + // Concaténer % au paramètre itemId + statement.setString(1, itemId + "%"); + + try (ResultSet resultSet = statement.executeQuery()) { + List itemList = new ArrayList<>(); + + while (resultSet.next()) { + Item item = mapResultSetToItem(resultSet); + itemList.add(item); + } + + if (!itemList.isEmpty()) { + ObjectMapper objectMapper = new ObjectMapper(); + String jsonResponse = objectMapper.writeValueAsString(itemList); + return Response.ok(jsonResponse).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).entity("{\"error\":\"No items found\"}").build(); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}"; + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build(); + } catch (JsonProcessingException e) { + e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build(); + } + } + + private Item mapResultSetToItem(ResultSet resultSet) throws SQLException { + Item item = new Item(); + item.setOrganizationId(resultSet.getLong("ORGANIZATION_ID")); + item.setItemId(resultSet.getString("ITEM_ID")); + item.setOrgCode(resultSet.getString("ORG_CODE")); + item.setOrgValue(resultSet.getString("ORG_VALUE")); + item.setName(resultSet.getString("NAME")); + item.setDescription(resultSet.getString("DESCRIPTION")); + item.setMerchLevel1(resultSet.getString("MERCH_LEVEL_1")); + item.setMerchLevel2(resultSet.getString("MERCH_LEVEL_2")); + item.setMerchLevel3(resultSet.getString("MERCH_LEVEL_3")); + item.setMerchLevel4(resultSet.getString("MERCH_LEVEL_4")); + item.setListPrice(resultSet.getInt("LIST_PRICE")); + item.setMeasureReqFlag(resultSet.getInt("MEASURE_REQ_FLAG")); + item.setItemLevelCode(resultSet.getString("ITEM_LVLCODE")); + item.setParentItemId(resultSet.getString("PARENT_ITEM_ID")); + item.setNotInventoriedFlag(resultSet.getInt("NOT_INVENTORIED_FLAG")); + item.setSerializedItemFlag(resultSet.getInt("SERIALIZED_ITEM_FLAG")); + item.setItemTypeCode(resultSet.getString("ITEM_TYPCODE")); + item.setDtvClassName(resultSet.getString("DTV_CLASS_NAME")); + item.setDimensionSystem(resultSet.getString("DIMENSION_SYSTEM")); + item.setDisallowMatrixDisplayFlag(resultSet.getInt("DISALLOW_MATRIX_DISPLAY_FLAG")); + item.setItemMatrixColor(resultSet.getString("ITEM_MATRIX_COLOR")); + item.setDimension1(resultSet.getString("DIMENSION1")); + item.setDimension2(resultSet.getString("DIMENSION2")); + item.setDimension3(resultSet.getString("DIMENSION3")); + item.setExternalSystem(resultSet.getString("EXTERNAL_SYSTEM")); + item.setCreateDate(resultSet.getTimestamp("CREATE_DATE")); + item.setCreateUserId(resultSet.getString("CREATE_USER_ID")); + item.setUpdateDate(resultSet.getTimestamp("UPDATE_DATE")); + item.setUpdateUserId(resultSet.getString("UPDATE_USER_ID")); + item.setRecordState(resultSet.getString("RECORD_STATE")); + + return item; + } + + public class Item { + private Long organizationId; + private String itemId; + private String orgCode; + private String orgValue; + private String name; + private String description; + private String merchLevel1; + private String merchLevel2; + private String merchLevel3; + private String merchLevel4; + private Integer listPrice; + private Integer measureReqFlag; + private String itemLevelCode; + private String parentItemId; + private Integer notInventoriedFlag; + private Integer serializedItemFlag; + private String itemTypeCode; + private String dtvClassName; + private String dimensionSystem; + private Integer disallowMatrixDisplayFlag; + private String itemMatrixColor; + private String dimension1; + private String dimension2; + private String dimension3; + private String externalSystem; + private Timestamp createDate; + private String createUserId; + private Timestamp updateDate; + private String updateUserId; + private String recordState; + + // Getters and Setters for all fields + + public Long getOrganizationId() { + return organizationId; + } + + public void setOrganizationId(Long organizationId) { + this.organizationId = organizationId; + } + + public String getItemId() { + return itemId; + } + + public void setItemId(String itemId) { + this.itemId = itemId; + } + + public String getOrgCode() { + return orgCode; + } + + public void setOrgCode(String orgCode) { + this.orgCode = orgCode; + } + + public String getOrgValue() { + return orgValue; + } + + public void setOrgValue(String orgValue) { + this.orgValue = orgValue; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getMerchLevel1() { + return merchLevel1; + } + + public void setMerchLevel1(String merchLevel1) { + this.merchLevel1 = merchLevel1; + } + + public String getMerchLevel2() { + return merchLevel2; + } + + public void setMerchLevel2(String merchLevel2) { + this.merchLevel2 = merchLevel2; + } + + public String getMerchLevel3() { + return merchLevel3; + } + + public void setMerchLevel3(String merchLevel3) { + this.merchLevel3 = merchLevel3; + } + + public String getMerchLevel4() { + return merchLevel4; + } + + public void setMerchLevel4(String merchLevel4) { + this.merchLevel4 = merchLevel4; + } + + public Integer getListPrice() { + return listPrice; + } + + public void setListPrice(Integer listPrice) { + this.listPrice = listPrice; + } + + public Integer getMeasureReqFlag() { + return measureReqFlag; + } + + public void setMeasureReqFlag(Integer measureReqFlag) { + this.measureReqFlag = measureReqFlag; + } + + public String getItemLevelCode() { + return itemLevelCode; + } + + public void setItemLevelCode(String itemLevelCode) { + this.itemLevelCode = itemLevelCode; + } + + public String getParentItemId() { + return parentItemId; + } + + public void setParentItemId(String parentItemId) { + this.parentItemId = parentItemId; + } + + public Integer getNotInventoriedFlag() { + return notInventoriedFlag; + } + + public void setNotInventoriedFlag(Integer notInventoriedFlag) { + this.notInventoriedFlag = notInventoriedFlag; + } + + public Integer getSerializedItemFlag() { + return serializedItemFlag; + } + + public void setSerializedItemFlag(Integer serializedItemFlag) { + this.serializedItemFlag = serializedItemFlag; + } + + public String getItemTypeCode() { + return itemTypeCode; + } + + public void setItemTypeCode(String itemTypeCode) { + this.itemTypeCode = itemTypeCode; + } + + public String getDtvClassName() { + return dtvClassName; + } + + public void setDtvClassName(String dtvClassName) { + this.dtvClassName = dtvClassName; + } + + public String getDimensionSystem() { + return dimensionSystem; + } + + public void setDimensionSystem(String dimensionSystem) { + this.dimensionSystem = dimensionSystem; + } + + public Integer getDisallowMatrixDisplayFlag() { + return disallowMatrixDisplayFlag; + } + + public void setDisallowMatrixDisplayFlag(Integer disallowMatrixDisplayFlag) { + this.disallowMatrixDisplayFlag = disallowMatrixDisplayFlag; + } + + public String getItemMatrixColor() { + return itemMatrixColor; + } + + public void setItemMatrixColor(String itemMatrixColor) { + this.itemMatrixColor = itemMatrixColor; + } + + public String getDimension1() { + return dimension1; + } + + public void setDimension1(String dimension1) { + this.dimension1 = dimension1; + } + + public String getDimension2() { + return dimension2; + } + + public void setDimension2(String dimension2) { + this.dimension2 = dimension2; + } + + public String getDimension3() { + return dimension3; + } + + public void setDimension3(String dimension3) { + this.dimension3 = dimension3; + } + + public String getExternalSystem() { + return externalSystem; + } + + public void setExternalSystem(String externalSystem) { + this.externalSystem = externalSystem; + } + + public Timestamp getCreateDate() { + return createDate; + } + + public void setCreateDate(Timestamp createDate) { + this.createDate = createDate; + } + + public String getCreateUserId() { + return createUserId; + } + + public void setCreateUserId(String createUserId) { + this.createUserId = createUserId; + } + + public Timestamp getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Timestamp updateDate) { + this.updateDate = updateDate; + } + + public String getUpdateUserId() { + return updateUserId; + } + + public void setUpdateUserId(String updateUserId) { + this.updateUserId = updateUserId; + } + + public String getRecordState() { + return recordState; + } + + public void setRecordState(String recordState) { + this.recordState = recordState; + } + } +} diff --git a/src/main/java/com/example/services/StoreService.java b/src/main/java/com/example/services/StoreService.java new file mode 100644 index 0000000..555e9d5 --- /dev/null +++ b/src/main/java/com/example/services/StoreService.java @@ -0,0 +1,179 @@ +package com.example.services; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +@Path("/stores") +public class StoreService { + private static List cachedStoreList; + private static final Lock cacheLock = new ReentrantLock(); + + @GET + @Path("/get") + @Produces(MediaType.APPLICATION_JSON) + public Response getStoreById(@QueryParam("storeId") String storeId) { + if (storeId == null) { + return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"storeId parameter is required\"}").build(); + } + + DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes + + // IASPDI com02 / B1Xto9pAbtBCOxuecG7W + // MASPDI com02 / + try (DatabaseConnectionDS databaseConnection = new DatabaseConnectionDS("com02", "B1Xto9pAbtBCOxuecG7W")) { + String query = "SELECT id_structure,nom,'10.100.0.18' AS ip, tel1 AS telephone FROM structure WHERE id_structure = ?" ; + + try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) { + statement.setString(1, storeId); + + try (ResultSet resultSet = statement.executeQuery()) { + if (resultSet.next()) { + store store = mapResultSetTostore(resultSet); + + ObjectMapper objectMapper = new ObjectMapper(); + String jsonResponse = objectMapper.writeValueAsString(store); + return Response.ok(jsonResponse).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).entity("{\"error\":\"No store found\"}").build(); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}"; + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build(); + } catch (JsonProcessingException e) { + e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build(); + } + } + + @GET + @Path("/getAll") + @Produces(MediaType.APPLICATION_JSON) + public Response getAllStores() { + if (cachedStoreList == null) { + // Utilisation d'un verrou pour éviter que plusieurs requêtes déclenchent la récupération simultanée + cacheLock.lock(); + try { + // Vérification à nouveau après avoir acquis le verrou + if (cachedStoreList == null) { + // Récupérer depuis la base de données seulement si la liste n'est pas en cache + cachedStoreList = retrieveStoresFromDatabase(); + } + } finally { + cacheLock.unlock(); + } + } + + if (!cachedStoreList.isEmpty()) { + ObjectMapper objectMapper = new ObjectMapper(); + String jsonResponse; + try { + jsonResponse = objectMapper.writeValueAsString(cachedStoreList); + return Response.ok(jsonResponse).build(); + } catch (JsonProcessingException e) { + e.printStackTrace(); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build(); + } + } else { + return Response.status(Response.Status.NOT_FOUND).entity("{\"error\":\"No stores found\"}").build(); + } + } + + private List retrieveStoresFromDatabase() { + DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes + + try (DatabaseConnectionDS databaseConnection = new DatabaseConnectionDS("com02", "B1Xto9pAbtBCOxuecG7W")) { + String query = "SELECT st.id_structure, TRIM(st.nom) as nom, '10.100.0.18' AS ip, " + + "st.tel1 AS telephone " + + "FROM COM02.STRUCTURE st " + + "LEFT OUTER JOIN omni.ASPD_XSTO_STRUCTURE axs ON st.ID_STRUCTURE = axs.ID_STRUCTURE " + + "WHERE st.id_structure < 50"; + + try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query); + ResultSet resultSet = statement.executeQuery()) { + + List storeList = new ArrayList<>(); + + while (resultSet.next()) { + store store = mapResultSetTostore(resultSet); + storeList.add(store); + } + + return storeList; + } + } catch (SQLException e) { + e.printStackTrace(); + return Collections.emptyList(); + } + } + + private store mapResultSetTostore(ResultSet resultSet) throws SQLException { + store store = new store(); + + store.setId_structure(resultSet.getInt("ID_STRUCTURE")); + store.setNom(resultSet.getString("NOM")); + store.setIp(resultSet.getString("IP")); + store.setTelephone(resultSet.getString("TELEPHONE")); + + return store; + } + + public class store { + private Integer id_structure; + private String nom; + private String ip; + private String telephone; + + public Integer getId_structure() { + return id_structure; + } + + public void setId_structure(Integer id_structure) { + this.id_structure = id_structure; + } + + public String getNom() { + return nom; + } + + public void setNom(String nom) { + this.nom = nom; + } + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public String getTelephone() { + return telephone; + } + + public void setTelephone(String telephone) { + this.telephone = telephone; + } + } + +} diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..7cc252d --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,35 @@ + + + + Archetype Created Web Application + + + index.html + + + + Jersey Web Application + org.glassfish.jersey.servlet.ServletContainer + + jersey.config.server.provider.packages + com.example.services + + 1 + + + + Jersey Web Application + /api/* + + + + CorsFilter + com.example.CorsFilters + + + + CorsFilter + /* + +