GetStationExport.java

package com.workbenchclassic;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

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;

import org.json.JSONObject;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;

@Path("/getStationExport")
public class GetStationExport {

    private static final DBService DB_SERVICE = new DBService("dsMesMiiNJTA");
    private static final ObjectMapper MAPPER = new ObjectMapper();

    /**
     * Fetches station data via dbConnectAndGetRows and returns as a flat JSON
     * structure for Excel import.
     *
     * @return JAX-RS Response with JSON array
     */
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response getStationsFlat(String jsonBody) {
        JSONObject json = new JSONObject(jsonBody);
        String station = json.getString("station");
        String query = "SELECT mk.kap_nr, kap_bez, "
                + "mg.ma_grp_nr, mg.ma_grp_bez, "
                + "li.line_nr, li.line_bez "
                + "FROM bde.kast mk "
                + "JOIN bde.ma_grp mg ON (mg.ma_grp_id = mk.ma_grp_id) "
                + "JOIN bde.line_ma_grp lm ON (lm.ma_grp_id = mk.ma_grp_id) "
                + "JOIN bde.line li ON (li.line_id = lm.line_id) "
                + "JOIN bde.werk we ON (li.werk_id = we.werk_id) "
                + "WHERE Line_typ ='T' "
                + "and mk.werk_id IN (SELECT werk_id FROM bde.kast WHERE kap_nr = ? )";

        List<Map<String, Object>> rows;

        try (Connection conn = DB_SERVICE.getConnection();
                PreparedStatement ps = conn.prepareStatement(query)) {
            ps.setString(1, station);

            rows = DB_SERVICE.preparedDbConnectAndGetRows(ps);
            return Response.ok(MAPPER.writeValueAsString(rows)).build();
        } catch (SQLException e) {
            String errJson = String.format("{\"error\":\"DB error: %s\"}", e.getMessage());
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
                    .entity(errJson)
                    .build();
        } catch (JsonProcessingException e) {
            String errJson = String.format("{\"error\":\"JSON processing error: %s\"}", e.getMessage());
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
                    .entity(errJson)
                    .build();
        }
    }
}