sadas
package com.example.setupwizard;
import javafx.concurrent.Task;
import javafx.fxml.FXML;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextArea;
import org.w3c.dom.Text;
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
public void initialize() {
dosyadanipleriyukle();
}
private void dosyadanipleriyukle() {
try {
Path dosyaYolu = Paths.get("src/main/resources/servers.txt");
List<String> okunanIpler = Files.readAllLines(dosyaYolu);
ipComboBox.getItems().addAll(okunanIpler);
}
catch (Exception e) {
System.err.println("HATA: servers.txt dosyası okunamadı! " + e.getMessage());
ipComboBox.getItems().addAll("IP Listesi Bulunamadı!");
}
}
@FXML
public void adimBirBaslat() {
String secilenIp = ipComboBox.getValue();
if (secilenIp == null) {
arayuzTerminal.appendText(">> HATA: Lütfen önce bir IP seçin!\n");
return;
}
KurulumTask gorevyoneticisi = new KurulumTask(secilenIp,0);
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."); // ikinci adımın butonu burda aktif edilebilir
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();
}
}
public class KurulumTask extends Task<Integer>{
private final String secilenIp;
private final int adimIdeksi;
public KurulumTask(String secilenIp, int adimIdeksi) {
this.secilenIp = secilenIp;
this.adimIdeksi = adimIdeksi;
}
@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 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;
}
}