DatabaseConnectionController.java

package com.dbanalyzer.controller;

import com.dbanalyzer.model.DatabaseConnection;
import com.dbanalyzer.model.DatabaseType;
import com.dbanalyzer.service.DatabaseConnectionService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@Controller
@RequestMapping("/connections")
public class DatabaseConnectionController {

    private static final Logger logger = LoggerFactory.getLogger(DatabaseConnectionController.class);

    @Autowired
    private DatabaseConnectionService connectionService;

    @GetMapping("/new")
    public String newConnection(Model model) {
        model.addAttribute("connection", new DatabaseConnection());
        model.addAttribute("databaseTypes", DatabaseType.values());
        return "connections/new";
    }

    @GetMapping("/edit")
    public String listConnections(Model model) {
        model.addAttribute("connections", connectionService.findAll());
        return "connections/list";
    }

    @GetMapping("/edit/{id}")
    public String editConnection(@PathVariable Long id, Model model) {
        DatabaseConnection connection = connectionService.findById(id);
        if (connection == null) {
            return "redirect:/connections/edit";
        }
        model.addAttribute("connection", connection);
        model.addAttribute("databaseTypes", DatabaseType.values());
        return "connections/edit";
    }

    @PostMapping("/save")
    public String saveConnection(@ModelAttribute DatabaseConnection connection) {
        connectionService.save(connection);
        return "redirect:/";
    }

    @PostMapping("/update/{id}")
    public String updateConnection(@PathVariable Long id, @ModelAttribute DatabaseConnection connection) {
        connection.setId(id);
        connectionService.save(connection);
        return "redirect:/connections/edit";
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteConnection(@PathVariable Long id) {
        connectionService.deleteById(id);
        return ResponseEntity.ok().build();
    }

    @PostMapping("/test")
    @ResponseBody
    public ResponseEntity<Map<String, Object>> testConnection(@RequestBody DatabaseConnection connection) {
        Map<String, Object> response = new HashMap<>();
        boolean isValid = connectionService.testConnection(connection);
        response.put("success", isValid);
        response.put("message", isValid ? "Connection successful!" : "Connection failed!");
        return ResponseEntity.ok(response);
    }

    @GetMapping("/default-port/{databaseType}")
    @ResponseBody
    public ResponseEntity<Integer> getDefaultPort(@PathVariable DatabaseType databaseType) {
        return ResponseEntity.ok(databaseType.getDefaultPort());
    }
}