238 lines
15 KiB
HTML
238 lines
15 KiB
HTML
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="de"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ImportUser.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">backend</a> > <a href="index.source.html" class="el_package">com.workbenchclassic</a> > <span class="el_source">ImportUser.java</span></div><h1>ImportUser.java</h1><pre class="source lang-java linenums">package com.workbenchclassic;
|
|
|
|
import org.json.JSONArray;
|
|
import org.json.JSONObject;
|
|
|
|
import java.sql.Connection;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.SQLException;
|
|
import java.util.Map;
|
|
import java.util.stream.Collectors;
|
|
|
|
import javax.ws.rs.Consumes;
|
|
import javax.ws.rs.POST;
|
|
import javax.ws.rs.Path;
|
|
import javax.ws.rs.Produces;
|
|
import javax.ws.rs.core.MediaType;
|
|
import javax.ws.rs.core.Response;
|
|
|
|
@Path("/importUser")
|
|
<span class="nc" id="L20">public class ImportUser {</span>
|
|
|
|
private JSONObject normalizeCI(JSONObject src) {
|
|
<span class="nc" id="L23"> JSONObject dst = new JSONObject();</span>
|
|
<span class="nc" id="L24"> src.keySet().forEach(k -></span>
|
|
<span class="nc" id="L25"> dst.put(k.toLowerCase(), src.opt(k))</span>
|
|
);
|
|
<span class="nc" id="L27"> return dst;</span>
|
|
}
|
|
|
|
private String getString(JSONObject obj, UserField field) {
|
|
<span class="nc" id="L31"> Object v = obj.opt(field.key());</span>
|
|
<span class="nc bnc" id="L32" title="All 2 branches missed."> return v == null ? "" : String.valueOf(v);</span>
|
|
}
|
|
|
|
private int getInt(JSONObject obj, UserField field) {
|
|
<span class="nc" id="L36"> Object v = obj.opt(field.key());</span>
|
|
<span class="nc bnc" id="L37" title="All 2 branches missed."> if (v instanceof Number) {</span>
|
|
<span class="nc" id="L38"> return ((Number) v).intValue();</span>
|
|
}
|
|
try {
|
|
<span class="nc bnc" id="L41" title="All 2 branches missed."> return v == null ? 0 : Integer.parseInt(v.toString());</span>
|
|
<span class="nc" id="L42"> } catch (NumberFormatException e) {</span>
|
|
<span class="nc" id="L43"> return 0;</span>
|
|
}
|
|
}
|
|
|
|
|
|
<span class="nc" id="L48"> private final DBService dbService = new DBService("dsTranNJTA");</span>
|
|
|
|
@POST
|
|
@Consumes(MediaType.APPLICATION_JSON)
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
public Response doUpdate(String jsonBody) {
|
|
try {
|
|
<span class="nc" id="L55"> JSONObject json = new JSONObject(jsonBody);</span>
|
|
<span class="nc" id="L56"> String station = json.getString("station");</span>
|
|
<span class="nc" id="L57"> JSONArray dataArray = json.getJSONArray("data");</span>
|
|
|
|
<span class="nc" id="L59"> String vendor = dbService.getDatabaseProductName();</span>
|
|
<span class="nc" id="L60"> System.out.println("Aktueller DB-Vendor: " + vendor);</span>
|
|
|
|
<span class="nc" id="L62"> Connection conn = dbService.getConnection();</span>
|
|
|
|
<span class="nc" id="L64"> GetMetadata metadata = new GetMetadata();</span>
|
|
<span class="nc" id="L65"> String extPlantResponseString = metadata.getExtPlantJson(station);</span>
|
|
<span class="nc" id="L66"> JSONObject extPlantResponse = new JSONObject(extPlantResponseString);</span>
|
|
|
|
<span class="nc" id="L68"> String errorCode = extPlantResponse.optString("errorCode", "0");</span>
|
|
<span class="nc bnc" id="L69" title="All 2 branches missed."> if (!"0".equals(errorCode)) {</span>
|
|
// Return an HTTP 400 or 500 with that JSON
|
|
<span class="nc" id="L71"> return Response.status(Response.Status.BAD_REQUEST).entity(extPlantResponse.toString()).build();</span>
|
|
}
|
|
// 3) werknummer ermitteln
|
|
|
|
// werkResultJson könnte z.B. so aussehen:
|
|
|
|
<span class="nc" id="L77"> String werkData = extPlantResponse.optString("data", "[]");</span>
|
|
<span class="nc" id="L78"> JSONArray werkArr = new JSONArray(werkData);</span>
|
|
|
|
<span class="nc" id="L80"> String WERK_NR = null;</span>
|
|
<span class="nc" id="L81"> String COMPANY_NO = null;</span>
|
|
<span class="nc" id="L82"> String CLIENT_NO = null;</span>
|
|
<span class="nc bnc" id="L83" title="All 2 branches missed."> if (werkArr.length() > 0) {</span>
|
|
<span class="nc" id="L84"> JSONObject row = werkArr.getJSONObject(0);</span>
|
|
<span class="nc" id="L85"> WERK_NR = row.optString("ext_company_nr", null);</span>
|
|
<span class="nc" id="L86"> COMPANY_NO = row.optString("werk_nr", null);</span>
|
|
<span class="nc" id="L87"> CLIENT_NO = row.optString("client_nr", null);</span>
|
|
}
|
|
|
|
<span class="nc" id="L90"> System.out.println("Ermittelte werknummer: " + COMPANY_NO);</span>
|
|
|
|
<span class="nc" id="L92"> boolean isMSSQL = "Microsoft SQL Server".equals(vendor);</span>
|
|
<span class="nc" id="L93"> boolean isOracle = "Oracle".equals(vendor);</span>
|
|
|
|
<span class="nc" id="L95"> insertIdocStatus(conn, isMSSQL, isOracle);</span>
|
|
|
|
<span class="nc" id="L97"> conn.setAutoCommit(false);</span>
|
|
try {
|
|
<span class="nc bnc" id="L99" title="All 2 branches missed."> for (int i = 0; i < dataArray.length(); i++) {</span>
|
|
<span class="nc" id="L100"> JSONObject obj = dataArray.getJSONObject(i);</span>
|
|
<span class="nc" id="L101"> Map<String, String> keyMap = obj.keySet().stream()</span>
|
|
<span class="nc" id="L102"> .collect(Collectors.toMap(String::toLowerCase, key -> key,</span>
|
|
<span class="nc" id="L103"> (existing, replacement) -> existing));</span>
|
|
<span class="nc" id="L104"> insertUser(conn, obj, COMPANY_NO, WERK_NR, CLIENT_NO, isMSSQL, isOracle, keyMap);</span>
|
|
|
|
}
|
|
<span class="nc" id="L107"> conn.commit();</span>
|
|
<span class="nc" id="L108"> } catch (SQLException e) {</span>
|
|
<span class="nc" id="L109"> conn.rollback();</span>
|
|
<span class="nc" id="L110"> throw e;</span>
|
|
} finally {
|
|
<span class="nc" id="L112"> conn.setAutoCommit(true);</span>
|
|
<span class="nc" id="L113"> conn.close();</span>
|
|
}
|
|
|
|
<span class="nc" id="L116"> JSONObject response = new JSONObject();</span>
|
|
<span class="nc" id="L117"> response.put("status", "ok");</span>
|
|
<span class="nc" id="L118"> response.put("message", "Daten wurden erfolgreich verarbeitet.");</span>
|
|
<span class="nc" id="L119"> return Response.ok(response.toString()).build();</span>
|
|
|
|
<span class="nc" id="L121"> } catch (Exception e) {</span>
|
|
<span class="nc" id="L122"> e.printStackTrace();</span>
|
|
<span class="nc" id="L123"> JSONObject error = new JSONObject();</span>
|
|
<span class="nc" id="L124"> error.put("status", "error");</span>
|
|
<span class="nc" id="L125"> error.put("message", e.getMessage());</span>
|
|
<span class="nc" id="L126"> return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error.toString()).build();</span>
|
|
}
|
|
}
|
|
|
|
private void insertUser(Connection conn, JSONObject obj, String COMPANY_NO, String PLANT_NO, String CLIENT_NO,
|
|
boolean isMSSQL, boolean isOracle, Map<String, String> keyMap) throws SQLException {
|
|
String sql;
|
|
<span class="nc bnc" id="L133" title="All 2 branches missed."> if (isMSSQL) {</span>
|
|
<span class="nc" id="L134"> sql = "INSERT INTO xtran.tran_user (" +</span>
|
|
"IDOC_ID, USER_ID, USER_NAME, USER_FIRSTNAME, DESCRIPTION, COSTCENTER, COSTCENTERDESC, " +
|
|
"PASSWORD, TEAM, PLANT_NO, COMPANY_NO, CLIENT_NO, PERS_NO, USER_STATE, STAMP, CREATED, " +
|
|
"SOURCE, STATUS, SKILL, EXTERNAL_ID, ERROR_TEXT, ATTRIB_ID, SKILL_USAGE_ID, USER_TOKEN, " +
|
|
"PASSWORD_HASH, GENDER, APS_TRANSFER) " +
|
|
"VALUES ((SELECT MAX(id) FROM xtran.tran_idocstatus), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, GETDATE(), GETDATE(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
|
<span class="nc bnc" id="L140" title="All 2 branches missed."> } else if (isOracle) {</span>
|
|
<span class="nc" id="L141"> sql = "INSERT INTO tran.tran_user (" +</span>
|
|
"IDOC_ID, USER_ID, USER_NAME, USER_FIRSTNAME, DESCRIPTION, COSTCENTER, COSTCENTERDESC, " +
|
|
"PASSWORD, TEAM, PLANT_NO, COMPANY_NO, CLIENT_NO, PERS_NO, USER_STATE, STAMP, CREATED, " +
|
|
"SOURCE, STATUS, SKILL, EXTERNAL_ID, ERROR_TEXT, ATTRIB_ID, SKILL_USAGE_ID, USER_TOKEN, " +
|
|
"PASSWORD_HASH, GENDER, APS_TRANSFER) " +
|
|
"VALUES ((SELECT MAX(id) FROM tran.tran_idocstatus), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, SYSDATE, SYSDATE, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
|
} else {
|
|
<span class="nc" id="L148"> throw new SQLException("DB-Vendor nicht implementiert");</span>
|
|
}
|
|
|
|
<span class="nc" id="L151"> try (PreparedStatement ps = conn.prepareStatement(sql)) {</span>
|
|
<span class="nc" id="L152"> ps.setString(1, getString(obj, UserField.USER_ID));</span>
|
|
<span class="nc" id="L153"> ps.setString(2, getString(obj, UserField.USER_NAME));</span>
|
|
<span class="nc" id="L154"> ps.setString(3, getString(obj, UserField.USER_FIRSTNAME));</span>
|
|
<span class="nc" id="L155"> ps.setString(4, getString(obj, UserField.DESCRIPTION));</span>
|
|
<span class="nc" id="L156"> ps.setString(5, getString(obj, UserField.COSTCENTER));</span>
|
|
<span class="nc" id="L157"> ps.setString(6, getString(obj, UserField.COSTCENTERDESC));</span>
|
|
<span class="nc" id="L158"> ps.setString(7, getString(obj, UserField.PASSWORD));</span>
|
|
<span class="nc" id="L159"> ps.setString(8, getString(obj, UserField.TEAM));</span>
|
|
|
|
<span class="nc" id="L161"> ps.setString(9, PLANT_NO);</span>
|
|
<span class="nc" id="L162"> ps.setString(10, COMPANY_NO);</span>
|
|
<span class="nc" id="L163"> ps.setString(11, CLIENT_NO);</span>
|
|
|
|
<span class="nc" id="L165"> ps.setString(12, getString(obj, UserField.PERS_NO));</span>
|
|
<span class="nc" id="L166"> ps.setInt(13, getInt(obj, UserField.USER_STATE));</span>
|
|
|
|
<span class="nc" id="L168"> ps.setInt(14, getInt(obj, UserField.SOURCE));</span>
|
|
<span class="nc" id="L169"> ps.setInt(15, getInt(obj, UserField.STATUS));</span>
|
|
|
|
<span class="nc" id="L171"> ps.setString(16, getString(obj, UserField.SKILL));</span>
|
|
<span class="nc" id="L172"> ps.setString(17, getString(obj, UserField.EXTERNAL_ID));</span>
|
|
<span class="nc" id="L173"> ps.setString(18, getString(obj, UserField.ERROR_TEXT));</span>
|
|
|
|
<span class="nc" id="L175"> ps.setInt(19, getInt(obj, UserField.ATTRIB_ID));</span>
|
|
<span class="nc" id="L176"> ps.setInt(20, getInt(obj, UserField.SKILL_USAGE_ID));</span>
|
|
|
|
<span class="nc" id="L178"> ps.setString(21, getString(obj, UserField.USER_TOKEN));</span>
|
|
<span class="nc" id="L179"> ps.setString(22, getString(obj, UserField.PASSWORD_HASH));</span>
|
|
<span class="nc" id="L180"> ps.setString(23, getString(obj, UserField.GENDER));</span>
|
|
|
|
<span class="nc" id="L182"> ps.setInt(24, getInt(obj, UserField.APS_TRANSFER));</span>
|
|
|
|
|
|
<span class="nc" id="L185"> ps.executeUpdate();</span>
|
|
}
|
|
<span class="nc" id="L187"> }</span>
|
|
|
|
private void insertIdocStatus(Connection conn, boolean isMSSQL, boolean isOracle) throws SQLException {
|
|
String sql;
|
|
<span class="nc bnc" id="L191" title="All 2 branches missed."> if (isMSSQL) {</span>
|
|
<span class="nc" id="L192"> sql = "INSERT INTO xtran.tran_idocstatus (ID, DATE_CREATION, ewstatus, errorcode, content_type, source) VALUES (NEXT VALUE FOR xtran.seq_tranidocstatus, GETDATE(), 1, 0, 22, 0)";</span>
|
|
<span class="nc bnc" id="L193" title="All 2 branches missed."> } else if (isOracle) {</span>
|
|
<span class="nc" id="L194"> sql = "INSERT INTO tran.tran_idocstatus (ID, DATE_CREATION, ewstatus, errorcode, content_type, source) VALUES (tran.seq_tranidocstatus.nextval, SYSDATE, 1, 0, 22, 0)";</span>
|
|
} else {
|
|
<span class="nc" id="L196"> throw new SQLException("DB-Vendor nicht implementiert");</span>
|
|
}
|
|
<span class="nc" id="L198"> try (PreparedStatement ps = conn.prepareStatement(sql)) {</span>
|
|
<span class="nc" id="L199"> ps.executeUpdate();</span>
|
|
}
|
|
<span class="nc" id="L201"> }</span>
|
|
|
|
}
|
|
<span class="nc" id="L204"> enum UserField {</span>
|
|
|
|
<span class="nc" id="L206"> USER_ID,</span>
|
|
<span class="nc" id="L207"> USER_NAME,</span>
|
|
<span class="nc" id="L208"> USER_FIRSTNAME,</span>
|
|
<span class="nc" id="L209"> DESCRIPTION,</span>
|
|
<span class="nc" id="L210"> COSTCENTER,</span>
|
|
<span class="nc" id="L211"> COSTCENTERDESC,</span>
|
|
<span class="nc" id="L212"> PASSWORD,</span>
|
|
<span class="nc" id="L213"> TEAM,</span>
|
|
<span class="nc" id="L214"> PERS_NO,</span>
|
|
<span class="nc" id="L215"> USER_STATE,</span>
|
|
<span class="nc" id="L216"> SOURCE,</span>
|
|
<span class="nc" id="L217"> STATUS,</span>
|
|
<span class="nc" id="L218"> SKILL,</span>
|
|
<span class="nc" id="L219"> EXTERNAL_ID,</span>
|
|
<span class="nc" id="L220"> ERROR_TEXT,</span>
|
|
<span class="nc" id="L221"> ATTRIB_ID,</span>
|
|
<span class="nc" id="L222"> SKILL_USAGE_ID,</span>
|
|
<span class="nc" id="L223"> USER_TOKEN,</span>
|
|
<span class="nc" id="L224"> PASSWORD_HASH,</span>
|
|
<span class="nc" id="L225"> GENDER,</span>
|
|
<span class="nc" id="L226"> APS_TRANSFER;</span>
|
|
|
|
private final String jsonKey;
|
|
|
|
<span class="nc" id="L230"> UserField() {</span>
|
|
<span class="nc" id="L231"> this.jsonKey = name().toLowerCase();</span>
|
|
<span class="nc" id="L232"> }</span>
|
|
|
|
public String key() {
|
|
<span class="nc" id="L235"> return jsonKey;</span>
|
|
}
|
|
}
|
|
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.4.201905082037</span></div></body></html> |