asad
package com.example.setupwizard;
import javafx.concurrent.Task;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TableRow;
import javafx.scene.control.TextArea;
import org.w3c.dom.Text;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
public class SetupController {
@FXML
private ComboBox<String> ipComboBox;
@FXML
public TextArea arayuzTerminal;
@FXML private Button btnAdim1;
@FXML private Button btnAdim2;
@FXML private Button btnAdim3;
@FXML private Button btnAdim4;
@FXML
public void initialize() {
if (!dosyadanIpleriYukle())
xmldenIpleriYukle();
}
private boolean dosyadanIpleriYukle() {
try {
Path dosyaYolu = Paths.get("src/main/resources/servers.txt");
List<String> okunanIpler = Files.readAllLines(dosyaYolu);
ipComboBox.getItems().addAll(okunanIpler);
btnAdim1.setDisable(false);
return true;
}
catch (Exception e) {
System.err.println("HATA: servers.txt dosyası okunamadı! " + e.getMessage());
ipComboBox.getItems().addAll("IP Listesi Bulunamadı!");
return false;
}
}
private void xmldenIpleriYukle() {
try {
Path dosyaYolu = Paths.get("src/main/resources/servers.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(dosyaYolu.toFile());
document.getDocumentElement().normalize();
NodeList ipListesi = document.getElementsByTagName("ip");
ipComboBox.getItems().clear();
for (int i = 0; i < ipListesi.getLength(); i++) {
String ip = ipListesi.item(i).getTextContent().trim();
ipComboBox.getItems().add(ip);
}
if (!ipComboBox.getItems().isEmpty()) {
ipComboBox.getSelectionModel().selectFirst();
btnAdim1.setDisable(false);
}
} catch (Exception e) {
System.err.println("HATA: servers.xml dosyası okunamadı! " + e.getMessage());
ipComboBox.getItems().clear();
ipComboBox.getItems().add("IP Listesi Bulunamadı!");
btnAdim1.setDisable(true);
}
}
private void kurulumAdimiCalistir(int adımIndeksi,String basariMesaji){
String secilenIp = ipComboBox.getValue();
if (secilenIp == null) {
arayuzTerminal.appendText(">> HATA: Lütfen önce bir IP seçin!\n");
return;
}
KurulumTask gorevyoneticisi = new KurulumTask(secilenIp,adımIndeksi);
gorevyoneticisi.messageProperty().addListener((gozlemci,eskiMesaj,yeniMesaj) -> {
if (yeniMesaj != null) {
arayuzTerminal.appendText(yeniMesaj + "\n");
arayuzTerminal.setScrollTop(Double.MAX_VALUE);
}
});
gorevyoneticisi.setOnSucceeded(event -> {
int sonuc = gorevyoneticisi.getValue();
if (sonuc == 0) {
arayuzTerminal.appendText(">> İŞLEM BAŞARILI. Sıradaki adıma geçebilirisiniz.\n"); // ikinci adımın butonu burda aktif edilebilir
if (adımIndeksi == 0) {
btnAdim2.setDisable(false);
}
else if (adımIndeksi == 1) {
btnAdim3.setDisable(false);
}
else if (adımIndeksi == 2) {
btnAdim4.setDisable(false);
}
}
else
arayuzTerminal.appendText(">> İŞLEM BAŞARISIZ OLDU! (Kod: " + sonuc + ")\n");
});
gorevyoneticisi.setOnFailed(event -> {
arayuzTerminal.appendText(">> KRİTİK HATA: Arka plan görevi çöktü!\n");
});
Thread arkaPlanTreni = new Thread(gorevyoneticisi);
arkaPlanTreni.setDaemon(true);
arkaPlanTreni.start();
}
@FXML
public void adimBirBaslat() {
kurulumAdimiCalistir(0,">> KOPYALAMA BAŞARILI. Sıradaki adıma geçebilirisiniz.. \n");
}
@FXML
public void adimIkiBaslat() {
kurulumAdimiCalistir(1,">> ADIM 1 BAŞARILI. Başlangıç kurulumu tamamlandı.. \n");
}
@FXML
public void adimUcBaslat() {
kurulumAdimiCalistir(2,">> ADIM 2 Başarılı. Servisler başlatıldı.. \n");
}
@FXML
public void adimDortBaslat() {
kurulumAdimiCalistir(3,">> ADIM 3 Başarılı. Uygulamaların İndirilmesi Tamamlandı.. \n");
}
}
class KurulumTask extends Task<Integer>{
private final String secilenIp;
private final int adimIndeksi;
public KurulumTask(String secilenIp, int adimIndeksi) {
this.secilenIp = secilenIp;
this.adimIndeksi = adimIndeksi;
}
private String getHedefMasaustuYolu(Path bulunanKlasor){
String masaustuYolu = System.getProperty("user.home") + "\\Desktop";
return masaustuYolu + "\\" + bulunanKlasor.getFileName().toString();
}
@Override
protected Integer call() throws Exception {
String sonHaneStr = secilenIp.substring(secilenIp.lastIndexOf('.') + 1);
int sonHane = Integer.parseInt(sonHaneStr);
String sunucuKodu = String.format("%03d", sonHane);
//Path sharedAnaDizin = Paths.get("\\\\ORTAK_IP\\Shared");
Path sharedAnaDizin = Paths.get("shared/");
Path bulunanKlasor = null;
try (Stream<Path> klasorler = Files.list(sharedAnaDizin)) {
Optional<Path> eslesenKlasor = klasorler.filter(Files::isDirectory)
.filter(p -> p.getFileName().toString().endsWith(sunucuKodu))
.findFirst();
if(eslesenKlasor.isPresent()){
bulunanKlasor = eslesenKlasor.get();
updateMessage(">> Hedef Klasör Bulundu: " + bulunanKlasor.toString());
} else {
updateMessage(">> HATA: Sonu '" + sunucuKodu + "' ile biten klasör bulunamadı! İşlem iptal ediliyor.");
return 1;
}
}
catch (Exception e) {
updateMessage(">> HATA: Ortak klasöre erişilemedi veya dizin yok!" + e.getMessage());
return 1;
}
ProcessBuilder pb = null;
String hedefKlasor = getHedefMasaustuYolu(bulunanKlasor);
if (adimIndeksi == 0) {
String kaynakTamYol = bulunanKlasor.toAbsolutePath().toString();
updateMessage(">> BİLGİ: Sistem ağdan lokal ortama (Masaüstü) aktarılıyor..\n");
updateMessage(">> Lütfen Bekleyiniz, dosyalar kopyalanıyor...\n");
updateMessage(">> KAYNAK YOL: " + kaynakTamYol + "\n");
String xcopyKomutu = String.format("xcopy \"%s\" \"%s\" /E /I /Y", kaynakTamYol, hedefKlasor);
pb = new ProcessBuilder("cmd","/c", xcopyKomutu);
}
else if (adimIndeksi == 1) {
String batDosyaYolu = hedefKlasor + "\\Local_install_initial.bat";
updateMessage(">> BİLGİ: 1. Aşama (Local Install Initial) başlatılıyor..\n");
updateMessage("\n>> ÇALIŞTIRILAN DOSYA: " + batDosyaYolu + "\n");
pb = new ProcessBuilder("cmd", "/c", batDosyaYolu);
pb.directory(new java.io.File(hedefKlasor));
}
else if (adimIndeksi == 2) {
//servisleri indir
}
else if (adimIndeksi == 3) {
String batDosyaYolu = hedefKlasor + "\\Local_install_applications.bat";
updateMessage(">> BİLGİ: 3. Aşama (Local Install Applications) başlatılıyor..\n");
updateMessage("\n>> ÇALIŞTIRILAN DOSYA: " + batDosyaYolu + "\n");
pb = new ProcessBuilder("cmd", "/c", batDosyaYolu);
pb.directory(new java.io.File(hedefKlasor));
}
if (pb != null) {
pb.redirectErrorStream(true);
Process process = pb.start();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
updateMessage(line);
}
}
return process.waitFor();
}
return 1;
}
}