Vous êtes sur la page 1sur 22

public static class ProvuciVozila1 extends AbstractAction {

//ovo su nova vozila njima nikakve smene manualci ne trebaju


private static final long serialVersionUID = 1L;

public static AbstractAction newAction() {


return new ProvuciVozila1();
}

private ProvuciVozila1() {
super(Messages.getString("provuciVozila"));
}

@Override
public void actionPerformed(ActionEvent evt) {
try {
showPomeriDialog();
} catch (Exception exc) {

}
}

/*
private boolean prePonoci(Time newTime) {
return newTime.compareTo(TimeUtils.ponoc()) <= 0;
}
*/

private PolasciVozila polIzmedju(VoziloNaLiniji staroVozilo, Time


staroPocetak) {
//PolasciVozila polasciStarog =
staroVozilo.getPolasci().polasciPosleSaGranicom(staroPocetak);
Time prvoIsklj;
if (staroVozilo.getIskljucenja().imaIskljucenja()) {
PolasciVozila iskljucenjaStarog =
(PolasciVozila.saVremenima(staroVozilo.getIskljucenja().getVremenaIskljucenja1(),
staroVozilo
.getIskljucenja().getVremenaIskljucenja2())).po
lasciPosleSaGranicom(staroPocetak);
prvoIsklj = iskljucenjaStarog.prviPolazak();
} else {
prvoIsklj =
staroVozilo.getPolasci().polasciPosleSaGranicom(staroPocetak).poslednjiDolazak();
}
PolasciVozila polStarogIzmedju =
staroVozilo.getPolasci().polasciUIntervaluIncludeBoth(staroPocetak, prvoIsklj);
return polStarogIzmedju;
}

private void fillNovoVoziloPlus(VoziloNaLiniji staroVozilo,


PolasciVozila polasciStarog, VoziloNaLiniji novoVozilo, int gornjaGranica,
List<Time> polNaLiniji1, List<Time> polNaLiniji2) {

List<Time> term1TimesStarog =
polasciStarog.getVremenaPolazaka1().subList(0, gornjaGranica);
List<Time> term2TimesStarog =
polasciStarog.getVremenaPolazaka2().subList(0, (gornjaGranica - 1));
System.out.println("Fill staro Plus " +
staroVozilo.getOznakaVozilaOdJedan());
for (Time time : term1TimesStarog) {
// a da ti za + snak reba indexOf od + 1
// a inace indxOf pa -1 razdvoj to na dva metoda
int indexStarog = polNaLiniji1.indexOf(time);
Time sledeceNaLiniji = polNaLiniji1.get(indexStarog + 1);
//ako index Sledeceg veci od size tj poslednji polazak na
liniji
int timeDiff = Math.round((float)
(TimeUtils.diffTimesInMinutes(sledeceNaLiniji, time)) / (float) 2);
Time newTime = TimeUtils.addMinutes(time, timeDiff);
novoVozilo.getPolasci().dodajVremePolaska1(newTime);
if
(staroVozilo.getIskljucenja().getVremenaIskljucenja1().contains(time)) {

novoVozilo.getIskljucenja().dodajVremeIskljucenja1(newTime);
novoVozilo.setNacinRada(NacinRadaVozila.SHIHTA);
}
}

for (Time time : term2TimesStarog) {


int indexStarog = polNaLiniji2.indexOf(time);
Time sledeceNaLiniji = polNaLiniji2.get(indexStarog + 1);
int timeDiff = Math.round((float)
(TimeUtils.diffTimesInMinutes(sledeceNaLiniji, time)) / (float) 2);
Time newTime = TimeUtils.addMinutes(time, timeDiff);
novoVozilo.getPolasci().dodajVremePolaska2(newTime);
if
(staroVozilo.getIskljucenja().getVremenaIskljucenja2().contains(time)) {

novoVozilo.getIskljucenja().dodajVremeIskljucenja2(newTime);
novoVozilo.setNacinRada(NacinRadaVozila.SHIHTA);
}
}
}

private void fillNovoVoziloMinus(VoziloNaLiniji staroVozilo,


PolasciVozila polasciStarog, VoziloNaLiniji novoVozilo, int gornjaGranica,
List<Time> polNaLiniji1, List<Time> polNaLiniji2) {
List<Time> term1TimesStarog =
polasciStarog.getVremenaPolazaka1().subList(0, gornjaGranica);
List<Time> term2TimesStarog =
polasciStarog.getVremenaPolazaka2().subList(0, (gornjaGranica - 1));
System.out.println("Fill staro Minus " +
staroVozilo.getOznakaVozilaOdJedan());

for (Time time : term1TimesStarog) {


// a da ti za + snak reba indexOf od + 1
// a inace indxOf pa -1 razdvoj to na dva metoda
int indexStarog = polNaLiniji1.indexOf(time);
//prethodno a ne sledece
Time sledeceNaLiniji = polNaLiniji1.get(indexStarog - 1);
//ako index Sledeceg veci od size tj poslednji polazak na
liniji
int timeDiff = Math.round((float)
(TimeUtils.diffTimesInMinutes(time, sledeceNaLiniji)) / (float) 2);
Time newTime = TimeUtils.addMinutes(time, -timeDiff);
novoVozilo.getPolasci().dodajVremePolaska1(newTime);
if
(staroVozilo.getIskljucenja().getVremenaIskljucenja1().contains(time)) {
novoVozilo.getIskljucenja().dodajVremeIskljucenja1(newTime);
novoVozilo.setNacinRada(NacinRadaVozila.SHIHTA);
}
}

for (Time time : term2TimesStarog) {


int indexStarog = polNaLiniji2.indexOf(time);
Time sledeceNaLiniji = polNaLiniji2.get(indexStarog - 1);
int timeDiff = Math.round((float)
(TimeUtils.diffTimesInMinutes(time, sledeceNaLiniji)) / (float) 2);
Time newTime = TimeUtils.addMinutes(time, -timeDiff);
novoVozilo.getPolasci().dodajVremePolaska2(newTime);
if
(staroVozilo.getIskljucenja().getVremenaIskljucenja2().contains(time)) {

novoVozilo.getIskljucenja().dodajVremeIskljucenja2(newTime);
novoVozilo.setNacinRada(NacinRadaVozila.SHIHTA);
}
}
}

//todo ovde dodaj popuniNovo a zbo moguci iskljucenja oba izabrana


vozila

private void showPomeriDialog() {


try {
List<VoziloNaLiniji> samoVozilaPreSihti = null;
Map<VoziloNaLiniji, List<VoziloNaLiniji>>
staraIskljucenaVozila = null;
List<VoziloNaLiniji> staraPoslednjaIskljVozila = null;

if (RedVoznje3.inst()!=null) {

samoVozilaPreSihti=Alg3VozilaUtils.kopirajVozila(RedVoznje3.inst().getVozila());
staraIskljucenaVozila =
Alg3CollectionUtils.kopirajMapuVozila(RedVoznje3.inst().getIskljucenaVozila());

staraPoslednjaIskljVozila=Alg3VozilaUtils.kopirajVozila(RedVoznje3.inst().getPosled
njaIskljucenaVozila());
}

Map<VoziloNaLiniji, Time> izbori =


FrameCont.inst().getGrafikonFrameGr().grafikonPanel().izbori1Map();
//List<VremeIVozilo> izbori11 =
FrameCont.inst().getGrafikonFrameGr().grafikonPanel().izbori11();

if ((!izbori.keySet().isEmpty()) && (izbori.keySet().size()


>= 1)) {

final Object userChoice =


JOptionPane.showInputDialog(Htmls.HTML.txt() + Htmls.FONT_BLUE_START.txt()
+ Messages.getString("provuciVozila") + "
" + Messages.getString("provuciVozila2") + Htmls.FONT_BOLD_END.txt());

if (userChoice != null) {
try {
Linija linija =
FrameCont.inst().getGrafikonFrameGr().getPodaci().getLinija();
int brojObrta =
Integer.parseInt(userChoice.toString());
List<Time> polasci = new
ArrayList<>(izbori.values());
List<VoziloNaLiniji> novaVozila = new
ArrayList<>();
Collections.sort(polasci);
Map<Time, VoziloNaLiniji> sortedIzbori =
new TreeMap<>();
for (VoziloNaLiniji vozilo :
izbori.keySet()) {

sortedIzbori.put(izbori.get(vozilo), vozilo);
}// ti uzmi jedno vozilo pa na njega
stalno istu diff/2 dok ima toliko polazaka
int brojIzbora = izbori.keySet().size();
List<Time> keyset = new
ArrayList<>(sortedIzbori.keySet());

if (izbori.keySet().size() > 1) {

for (int i = 0; i < (brojIzbora -


1); i++) {
VoziloNaLiniji staroVozilo =
sortedIzbori.get(keyset.get(i));

VoziloNaLiniji
staroSledeceVozilo;
//if( izbori.keySet().size()
== 1){
// staroSledeceVozilo =
VoziloNaLiniji.praznoVozilo(linija);
//}else{
staroSledeceVozilo =
sortedIzbori.get(keyset.get(i + 1));
//}
//System.out.println("Provuci
staroSledece Polasci " + staroSledeceVozilo.getPolasci());
// a da probas za slucaj smo
jednog vozila da kopiras vozilo i da u njemu obrises polaske posle selekcije
vremena i iskljucenja tako da bude soze 1 () ili taj jedan polazak i jos na jedan
na sledecem ili da polaske ()klasu polaci vozila napravis od polazaka na liniji pa
sub liste
// ili samo taj jeden i da
taj bude iskljucenje
LinijaInfo info =
LinijaInfo.infoZaLiniju(linija);
Set<Time> vr1 = new
TreeSet<>(info.vremenaPolazakaNaLinijiTerm1());
Set<Time> vr2 = new
TreeSet<>(info.vremenaPolazakaNaLinijiTerm2());
List<Time> pol1NaLiniji = new
ArrayList<>(vr1 /* info.vremenaPolazakaNaLinijiTerm1()*/);
List<Time> pol2NaLiniji = new
ArrayList<>(vr2 /* info.vremenaPolazakaNaLinijiTerm2()*/);

// a da probas polasci do
prvog iskljucenja (a od granice tj da obrises polaske posle prvog iskljucenja ali
posle granice a ne pre)
Time staroPocetak =
keyset.get(i);
int size =
VozilaNaLinijama.inst().vozilaNaLiniji(linija).size();
//int oznakaNovog =
VozilaNaLinijama.inst().vozilaNaLiniji(linija ).size();
int oznakaNovog =
VozilaNaLinijama.inst().voziloNaLiniji(linija, size - 1).getOznakaVozilaOdNule() +
1;
//int oznakaNovog =
VozilaNaLinijama.inst().vozilaNaLiniji(linija ).size();

System.out.println("Oznaka
novog " + oznakaNovog);
VoziloNaLiniji novoVozilo =
VoziloNaLiniji.saTipomVozila(linija, staroVozilo.getPrevoznik(), oznakaNovog,

staroVozilo.getTipVozila());

PolasciVozila polasciStarog =
polIzmedju(staroVozilo, staroPocetak);
PolasciVozila polasciSledeceg
= polIzmedju(staroSledeceVozilo, staroPocetak);
int size1Starog =
polasciStarog.getVremenaPolazaka1().size();
int size2Starog =
polasciStarog.getVremenaPolazaka2().size();
int size1Sledeceg =
polasciSledeceg.getVremenaPolazaka1().size();
int size2Sledeceg =
polasciSledeceg.getVremenaPolazaka2().size();

if ((size1Starog >=
(brojObrta + 1)) && (size2Starog >= brojObrta)) {
int gornjaGranica =
brojObrta + 1;

fillNovoVoziloPlus(staroVozilo, polasciStarog, novoVozilo, gornjaGranica,


pol1NaLiniji, pol2NaLiniji);
} else if ((size1Sledeceg >=
(brojObrta + 1)) && (size2Sledeceg >= brojObrta)) {
int gornjaGranica =
brojObrta + 1;

fillNovoVoziloMinus(staroSledeceVozilo, polasciSledeceg, novoVozilo,


gornjaGranica, pol1NaLiniji,

pol2NaLiniji);
} else {
if (size1Starog >=
size1Sledeceg) {

fillNovoVoziloPlus(staroVozilo, polasciStarog, novoVozilo, size1Starog,


pol1NaLiniji, pol2NaLiniji);
} else {

fillNovoVoziloMinus(staroSledeceVozilo, polasciSledeceg, novoVozilo,


size1Sledeceg, pol1NaLiniji,
pol2NaLiniji);
}
}

//Prevozniku iz starog
incrementiraj broj vozila

staroVozilo.getPrevoznik().setBrojVozilaNaLiniji(staroVozilo.getPrevoznik().getBroj
VozilaNaLiniji() + 1);
//TODO ovo pomeri izvan
petlje da bi jedna ista vremena polazaka korisio za provlacenja

VozilaNaLinijama.inst().vozilaNaLiniji(linija).add(novoVozilo);
//VozilaNaLinijama.inst().isk
ljucenaVozila(linija);
//dodaj i u iskljucena i
sortiraj
novaVozila.add(novoVozilo);

if (!novaVozila.isEmpty()) {
if(RedVoznje3.inst()!=null) {
SihteEditValues
sihteEditValues = new SihteEditValues();

sihteEditValues.setStaraVozila(samoVozilaPreSihti);

sihteEditValues.setNovaVozila(RedVoznje3.inst().getVozila());

sihteEditValues.setStaraIskljucenaVozila(staraIskljucenaVozila);

sihteEditValues.setNovaIskljucenaVozila(RedVoznje3.inst().getIskljucenaVozila());

sihteEditValues.setStaraPoslIskljucenaVozila(staraPoslednjaIskljVozila);

sihteEditValues.setNovaPoslIskljucenaVozila(RedVoznje3.inst().getPoslednjaIskljucen
aVozila());

sihteEditValues.setStaroVremePoluobrtaKaOptTerm(RedVoznje3.inst().getVremePoluobrta
KaOptTerm());

sihteEditValues.setStaroVremePoluobrtaKaNeOptTerm(RedVoznje3.inst().getVremePoluobr
taKaNeOptTerm());

sihteEditValues.setNovoVremePoluobrtaKaOptTerm(RedVoznje3.inst().getVremePoluobrtaK
aOptTerm());

sihteEditValues.setNovoVremePoluobrtaKaNeOptTerm(RedVoznje3.inst().getVremePoluobrt
aKaNeOptTerm());
FrameCont.inst().getGrafikonFrameGr().grafikonPanel().postProvuciEditNRV3(sihteEdit
Values);

Actions.refreshGrafikon();
} else {

FrameCont.inst().getGrafikonFrameGr().grafikonPanel().postProvuciEdit(novaVozila);

Actions.refreshGrafikon();
}
}
} else if (izbori.keySet().size() == 1) {
VoziloNaLiniji staroVozilo =
sortedIzbori.get(keyset.get(0));

LinijaInfo info =
LinijaInfo.infoZaLiniju(linija);
Set<Time> vr1 = new
TreeSet<>(info.vremenaPolazakaNaLinijiTerm1());
Set<Time> vr2 = new
TreeSet<>(info.vremenaPolazakaNaLinijiTerm2());
List<Time> pol1NaLiniji = new
ArrayList<>(vr1 /* info.vremenaPolazakaNaLinijiTerm1()*/);
List<Time> pol2NaLiniji = new
ArrayList<>(vr2 /* info.vremenaPolazakaNaLinijiTerm2()*/);

// a da probas polasci do prvog


iskljucenja (a od granice tj da obrises polaske posle prvog iskljucenja ali posle
granice a ne pre)
Time staroPocetak = keyset.get(0);
int size =
VozilaNaLinijama.inst().vozilaNaLiniji(linija).size();
//int oznakaNovog =
VozilaNaLinijama.inst().vozilaNaLiniji(linija ).size();
int oznakaNovog =
VozilaNaLinijama.inst().voziloNaLiniji(linija, size - 1).getOznakaVozilaOdNule() +
1;
//int oznakaNovog =
VozilaNaLinijama.inst().vozilaNaLiniji(linija ).size();

System.out.println("Oznaka novog "


+ oznakaNovog);
VoziloNaLiniji novoVozilo =
VoziloNaLiniji.saTipomVozila(linija, staroVozilo.getPrevoznik(), oznakaNovog,

staroVozilo.getTipVozila());
System.out.println("Novo vozilo " +
novoVozilo.getOznakaVozilaOdJedan());
PolasciVozila polasciStarog =
polIzmedju(staroVozilo, staroPocetak);
int size1Starog =
polasciStarog.getVremenaPolazaka1().size();
int size2Starog =
polasciStarog.getVremenaPolazaka2().size();
if ((size1Starog >= (brojObrta +
1)) && (size2Starog >= brojObrta)) {
int gornjaGranica = brojObrta
+ 1;

fillNovoVoziloPlus(staroVozilo, polasciStarog, novoVozilo, gornjaGranica,


pol1NaLiniji, pol2NaLiniji);
System.out.println("Novo
vozilo " + novoVozilo.getOznakaVozilaOdJedan() + " " + novoVozilo.getPolasci());

}
if
(novoVozilo.getPolasci().imaPolazaka()) {

staroVozilo.getPrevoznik().setBrojVozilaNaLiniji(staroVozilo.getPrevoznik().getBroj
VozilaNaLiniji() + 1);
//TODO ovo pomeri izvan
petlje da bi jedna ista vremena polazaka korisio za provlacenja

VozilaNaLinijama.inst().vozilaNaLiniji(linija).add(novoVozilo);

VozilaNaLinijama.inst().iskljucenaVozila(linija);
//dodaj i u iskljucena i
sortiraj
Time poslednjiDolazak =
novoVozilo.getPolasci().poslednjiDolazak();

if
(novoVozilo.getPolasci().poslednjiDolazakJeNaTerminusu1()) {

novoVozilo.getIskljucenja().dodajVremeIskljucenja1(poslednjiDolazak);
} else {

novoVozilo.getIskljucenja().dodajVremeIskljucenja2(poslednjiDolazak);
}

novoVozilo.setPoslednjeIskljucenje(novoVozilo.getPolasci().poslednjiDolazak());
novaVozila.add(novoVozilo);
if (!novaVozila.isEmpty()) {
if(RedVoznje3.inst()!
=null) {
SihteEditValues
sihteEditValues = new SihteEditValues();

sihteEditValues.setStaraVozila(samoVozilaPreSihti);

sihteEditValues.setNovaVozila(RedVoznje3.inst().getVozila());

sihteEditValues.setStaraIskljucenaVozila(staraIskljucenaVozila);

sihteEditValues.setNovaIskljucenaVozila(RedVoznje3.inst().getIskljucenaVozila());

sihteEditValues.setStaraPoslIskljucenaVozila(staraPoslednjaIskljVozila);
sihteEditValues.setNovaPoslIskljucenaVozila(RedVoznje3.inst().getPoslednjaIskljucen
aVozila());

sihteEditValues.setStaroVremePoluobrtaKaOptTerm(RedVoznje3.inst().getVremePoluobrta
KaOptTerm());

sihteEditValues.setStaroVremePoluobrtaKaNeOptTerm(RedVoznje3.inst().getVremePoluobr
taKaNeOptTerm());

sihteEditValues.setNovoVremePoluobrtaKaOptTerm(RedVoznje3.inst().getVremePoluobrtaK
aOptTerm());

sihteEditValues.setNovoVremePoluobrtaKaNeOptTerm(RedVoznje3.inst().getVremePoluobrt
aKaNeOptTerm());

FrameCont.inst().getGrafikonFrameGr().grafikonPanel().postProvuciEditNRV3(sihteEdit
Values);

Actions.refreshGrafikon();
} else {

FrameCont.inst().getGrafikonFrameGr().grafikonPanel().postProvuciEdit(novaVozila);

Actions.refreshGrafikon();

}
//

FrameCont.inst().getGrafikonFrameGr().grafikonPanel().postProvuciEdit(novaVozila);
//
Actions.refreshGrafikon();
}
// a da probas za slucaj smo
jednog vozila da kopiras vozilo i da u njemu obrises polaske posle selekcije
vremena i iskljucenja tako da bude soze 1 () ili taj jedan polazak i jos na jedan
na sledecem ili da polaske ()klasu polaci vozila napravis od polazaka na liniji pa
sub liste
}
}

if (!novaVozila.isEmpty() &&
RedVoznje3.inst() != null) {

RedVoznje3.inst().getVozila().addAll(novaVozila);
}

} catch (NumberFormatException nme) {


System.out.println(nme.getMessage());
}
}
}
} catch (Exception exc) {
System.out.println("Provuci 1 exception " +
exc.getMessage());
}
}
}

public static class ProvuciVozila2 extends AbstractAction {

//ovo su nova vozila njima nikakve smene manualci ne trebaju

private static final long serialVersionUID = 1L;

public static AbstractAction newAction() {


return new ProvuciVozila2();
}

private ProvuciVozila2() {
super(Messages.getString("provuciVozila"));
}

@Override
public void actionPerformed(ActionEvent evt) {
try {
showPomeriDialog();
} catch (Exception exc) {
System.out.println("Provuci 1 exception " +
exc.getMessage());
}
}

/*
private boolean prePonoci(Time newTime) {
return newTime.compareTo(TimeUtils.ponoc()) <= 0;
}
*/
private PolasciVozila polIzmedju(VoziloNaLiniji staroVozilo, Time
staroPocetak) {
//PolasciVozila polasciStarog =
staroVozilo.getPolasci().polasciPosleSaGranicom(staroPocetak);
Time prvoIsklj;
if (staroVozilo.getIskljucenja().imaIskljucenja()) {
PolasciVozila iskljucenjaStarog =
(PolasciVozila.saVremenima(staroVozilo.getIskljucenja().getVremenaIskljucenja1(),
staroVozilo
.getIskljucenja().getVremenaIskljucenja2())).po
lasciPosleSaGranicom(staroPocetak);
prvoIsklj = iskljucenjaStarog.prviPolazak();
} else {
prvoIsklj =
staroVozilo.getPolasci().polasciPosleSaGranicom(staroPocetak).poslednjiDolazak();
}
PolasciVozila polStarogIzmedju =
staroVozilo.getPolasci().polasciUIntervaluIncludeBoth(staroPocetak, prvoIsklj);
return polStarogIzmedju;
}

private void fillNovoVoziloPlus(VoziloNaLiniji staroVozilo,


PolasciVozila polasciStarog, VoziloNaLiniji novoVozilo, int gornjaGranica,
List<Time> polNaLiniji1, List<Time> polNaLiniji2) {
List<Time> term1TimesStarog =
polasciStarog.getVremenaPolazaka1().subList(0, (gornjaGranica - 1));
List<Time> term2TimesStarog =
polasciStarog.getVremenaPolazaka2().subList(0, gornjaGranica);
System.out.println("Fill staro Plus " +
staroVozilo.getOznakaVozilaOdJedan());
for (Time time : term1TimesStarog) {
// a da ti za + snak reba indexOf od + 1
// a inace indxOf pa -1 razdvoj to na dva metoda
int indexStarog = polNaLiniji1.indexOf(time);
Time sledeceNaLiniji = polNaLiniji1.get(indexStarog + 1);
//ako index Sledeceg veci od size tj poslednji polazak na
liniji
int timeDiff = Math.round((float)
(TimeUtils.diffTimesInMinutes(sledeceNaLiniji, time)) / (float) 2);
Time newTime = TimeUtils.addMinutes(time, timeDiff);
novoVozilo.getPolasci().dodajVremePolaska1(newTime);
if
(staroVozilo.getIskljucenja().getVremenaIskljucenja1().contains(time)) {

novoVozilo.getIskljucenja().dodajVremeIskljucenja1(newTime);
novoVozilo.setNacinRada(NacinRadaVozila.SHIHTA);
}
}

for (Time time : term2TimesStarog) {


int indexStarog = polNaLiniji2.indexOf(time);
Time sledeceNaLiniji = polNaLiniji2.get(indexStarog + 1);
int timeDiff = Math.round((float)
(TimeUtils.diffTimesInMinutes(sledeceNaLiniji, time)) / (float) 2);
Time newTime = TimeUtils.addMinutes(time, timeDiff);
novoVozilo.getPolasci().dodajVremePolaska2(newTime);
if
(staroVozilo.getIskljucenja().getVremenaIskljucenja2().contains(time)) {

novoVozilo.getIskljucenja().dodajVremeIskljucenja2(newTime);
novoVozilo.setNacinRada(NacinRadaVozila.SHIHTA);
}
}
}

private void fillNovoVoziloMinus(VoziloNaLiniji staroVozilo,


PolasciVozila polasciStarog, VoziloNaLiniji novoVozilo, int gornjaGranica,
List<Time> polNaLiniji1, List<Time> polNaLiniji2) {
List<Time> term1TimesStarog =
polasciStarog.getVremenaPolazaka1().subList(0, (gornjaGranica - 1));
List<Time> term2TimesStarog =
polasciStarog.getVremenaPolazaka2().subList(0, gornjaGranica);
System.out.println("Fill staro Minus " +
staroVozilo.getOznakaVozilaOdJedan());

for (Time time : term1TimesStarog) {


// a da ti za + snak reba indexOf od + 1
// a inace indxOf pa -1 razdvoj to na dva metoda
int indexStarog = polNaLiniji1.indexOf(time);
//prethodno a ne sledece
Time sledeceNaLiniji = polNaLiniji1.get(indexStarog - 1);
//ako index Sledeceg veci od size tj poslednji polazak na
liniji
int timeDiff = Math.round((float)
(TimeUtils.diffTimesInMinutes(time, sledeceNaLiniji)) / (float) 2);
Time newTime = TimeUtils.addMinutes(time, -timeDiff);
novoVozilo.getPolasci().dodajVremePolaska1(newTime);
if
(staroVozilo.getIskljucenja().getVremenaIskljucenja1().contains(time)) {

novoVozilo.getIskljucenja().dodajVremeIskljucenja1(newTime);
novoVozilo.setNacinRada(NacinRadaVozila.SHIHTA);
}
}

for (Time time : term2TimesStarog) {


int indexStarog = polNaLiniji2.indexOf(time);
Time sledeceNaLiniji = polNaLiniji2.get(indexStarog - 1);
int timeDiff = Math.round((float)
(TimeUtils.diffTimesInMinutes(time, sledeceNaLiniji)) / (float) 2);
Time newTime = TimeUtils.addMinutes(time, -timeDiff);
novoVozilo.getPolasci().dodajVremePolaska2(newTime);
if
(staroVozilo.getIskljucenja().getVremenaIskljucenja2().contains(time)) {

novoVozilo.getIskljucenja().dodajVremeIskljucenja2(newTime);
novoVozilo.setNacinRada(NacinRadaVozila.SHIHTA);
}
}
}

private void showPomeriDialog() {


try {
List<VoziloNaLiniji> samoVozilaPreSihti = null;
Map<VoziloNaLiniji, List<VoziloNaLiniji>>
staraIskljucenaVozila = null;
List<VoziloNaLiniji> staraPoslednjaIskljVozila = null;

if (RedVoznje3.inst()!=null) {

samoVozilaPreSihti=Alg3VozilaUtils.kopirajVozila(RedVoznje3.inst().getVozila());
staraIskljucenaVozila =
Alg3CollectionUtils.kopirajMapuVozila(RedVoznje3.inst().getIskljucenaVozila());

staraPoslednjaIskljVozila=Alg3VozilaUtils.kopirajVozila(RedVoznje3.inst().getPosled
njaIskljucenaVozila());
}

Map<VoziloNaLiniji, Time> izbori =


FrameCont.inst().getGrafikonFrameGr().grafikonPanel().izbori2Map();
//if( ! izbori.keySet().isEmpty() ) {
if ((!izbori.keySet().isEmpty()) && (izbori.keySet().size()
>= 1)) {
final Object userChoice =
JOptionPane.showInputDialog(Htmls.HTML.txt() + Htmls.FONT_BLUE_START.txt()
+ Messages.getString("provuciVozila") + "
" + Messages.getString("provuciVozila2") + Htmls.FONT_BOLD_END.txt());

if (userChoice != null) {
try {
Linija linija =
FrameCont.inst().getGrafikonFrameGr().getPodaci().getLinija();
int brojObrta =
Integer.parseInt(userChoice.toString());
List<Time> polasci = new
ArrayList<>(izbori.values());
Collections.sort(polasci);
List<VoziloNaLiniji> novaVozila = new
ArrayList<>();

Map<Time, VoziloNaLiniji> sortedIzbori =


new TreeMap<>();
for (VoziloNaLiniji vozilo :
izbori.keySet()) {

sortedIzbori.put(izbori.get(vozilo), vozilo);
}// ti uzmi jedno vozilo pa na njega
stalno istu diff/2 dok ima toliko polazaka
int brojIzbora = izbori.keySet().size();
List<Time> keyset = new
ArrayList<>(sortedIzbori.keySet());

if (izbori.keySet().size() > 1) {
for (int i = 0; i < (brojIzbora -
1); i++) {
//int timeDiff =
Math.round((float)( TimeUtils.diffTimesInMinutes( keyset.get(i + 1) ,
keyset.get(i)))/(float)2);
Time staroPocetak =
keyset.get(i);

LinijaInfo info =
LinijaInfo.infoZaLiniju(linija);
Set<Time> vr1 = new
TreeSet<>(info.vremenaPolazakaNaLinijiTerm1());
Set<Time> vr2 = new
TreeSet<>(info.vremenaPolazakaNaLinijiTerm2());

List<Time> pol1NaLiniji = new


ArrayList<>(vr1);
List<Time> pol2NaLiniji = new
ArrayList<>(vr2);

VoziloNaLiniji staroVozilo =
sortedIzbori.get(keyset.get(i));
VoziloNaLiniji
staroSledeceVozilo = sortedIzbori.get(keyset.get(i + 1));
// a da probas polasci do
prvog iskljucenja (a od granice tj da obrises polaske posle prvog iskljucenja ali
posle granice a ne pre)

PolasciVozila polasciStarog =
polIzmedju(staroVozilo, staroPocetak);
PolasciVozila polasciSledeceg
= polIzmedju(staroSledeceVozilo, staroPocetak);

int size1Starog =
polasciStarog.getVremenaPolazaka1().size();
int size2Starog =
polasciStarog.getVremenaPolazaka2().size();
int size1Sledeceg =
polasciSledeceg.getVremenaPolazaka1().size();
int size2Sledeceg =
polasciSledeceg.getVremenaPolazaka2().size();

int size =
VozilaNaLinijama.inst().vozilaNaLiniji(linija).size();
//int oznakaNovog =
VozilaNaLinijama.inst().vozilaNaLiniji(linija ).size();
int oznakaNovog =
VozilaNaLinijama.inst().voziloNaLiniji(linija, size - 1).getOznakaVozilaOdNule() +
1;
//nesto novo smisli nego neku
listu sortiranu pa njen max vidi ima li u collections min i max
//int oznakaNovog =
VozilaNaLinijama.inst().vozilaNaLiniji(linija ).size();
VoziloNaLiniji novoVozilo =
VoziloNaLiniji.saTipomVozila(linija, staroVozilo.getPrevoznik(), oznakaNovog,

staroVozilo.getTipVozila());

if ((size2Starog >=
(brojObrta + 1)) && (size1Starog >= brojObrta)) {
int gornjaGranica =
brojObrta + 1;

fillNovoVoziloPlus(staroVozilo, polasciStarog, novoVozilo, gornjaGranica,


pol1NaLiniji, pol2NaLiniji);
} else if ((size2Sledeceg >=
(brojObrta + 1)) && (size1Sledeceg >= brojObrta)) {
int gornjaGranica =
brojObrta + 1;

fillNovoVoziloMinus(staroSledeceVozilo, polasciSledeceg, novoVozilo,


gornjaGranica, pol1NaLiniji,

pol2NaLiniji);
} else {
if (size2Starog >=
size2Sledeceg) {

fillNovoVoziloPlus(staroVozilo, polasciStarog, novoVozilo, size2Starog,


pol1NaLiniji, pol2NaLiniji);
} else {

fillNovoVoziloMinus(staroSledeceVozilo, polasciSledeceg, novoVozilo,


size2Sledeceg, pol1NaLiniji,

pol2NaLiniji);
}
}

novaVozila.add(novoVozilo);
//Prevozniku starom
incrementiraj broj vozila
staroVozilo.getPrevoznik().setBrojVozilaNaLiniji(staroVozilo.getPrevoznik().getBroj
VozilaNaLiniji() + 1);

VozilaNaLinijama.inst().vozilaNaLiniji(linija).add(novoVozilo);
//Actions.refreshGrafikon();
//VozilaNaLinijama.inst().isk
ljucenaVozila(linija);

}
if (!novaVozila.isEmpty()) {
if(RedVoznje3.inst()!=null) {
SihteEditValues
sihteEditValues = new SihteEditValues();

sihteEditValues.setStaraVozila(samoVozilaPreSihti);

sihteEditValues.setNovaVozila(RedVoznje3.inst().getVozila());

sihteEditValues.setStaraIskljucenaVozila(staraIskljucenaVozila);

sihteEditValues.setNovaIskljucenaVozila(RedVoznje3.inst().getIskljucenaVozila());

sihteEditValues.setStaraPoslIskljucenaVozila(staraPoslednjaIskljVozila);

sihteEditValues.setNovaPoslIskljucenaVozila(RedVoznje3.inst().getPoslednjaIskljucen
aVozila());

sihteEditValues.setStaroVremePoluobrtaKaOptTerm(RedVoznje3.inst().getVremePoluobrta
KaOptTerm());

sihteEditValues.setStaroVremePoluobrtaKaNeOptTerm(RedVoznje3.inst().getVremePoluobr
taKaNeOptTerm());

sihteEditValues.setNovoVremePoluobrtaKaOptTerm(RedVoznje3.inst().getVremePoluobrtaK
aOptTerm());

sihteEditValues.setNovoVremePoluobrtaKaNeOptTerm(RedVoznje3.inst().getVremePoluobrt
aKaNeOptTerm());

FrameCont.inst().getGrafikonFrameGr().grafikonPanel().postProvuciEditNRV3(sihteEdit
Values);

Actions.refreshGrafikon();
}else {

FrameCont.inst().getGrafikonFrameGr().grafikonPanel().postProvuciEdit(novaVozila);

Actions.refreshGrafikon();
}
}
} else if (izbori.keySet().size() == 1) {
Time staroPocetak = keyset.get(0);
LinijaInfo info =
LinijaInfo.infoZaLiniju(linija);
Set<Time> vr1 = new
TreeSet<>(info.vremenaPolazakaNaLinijiTerm1());
Set<Time> vr2 = new
TreeSet<>(info.vremenaPolazakaNaLinijiTerm2());

List<Time> pol1NaLiniji = new


ArrayList<>(vr1);
List<Time> pol2NaLiniji = new
ArrayList<>(vr2);

VoziloNaLiniji staroVozilo =
sortedIzbori.get(keyset.get(0));
PolasciVozila polasciStarog =
polIzmedju(staroVozilo, staroPocetak);
int size1Starog =
polasciStarog.getVremenaPolazaka1().size();
int size2Starog =
polasciStarog.getVremenaPolazaka2().size();

int size =
VozilaNaLinijama.inst().vozilaNaLiniji(linija).size();
//int oznakaNovog =
VozilaNaLinijama.inst().vozilaNaLiniji(linija ).size();
int oznakaNovog =
VozilaNaLinijama.inst().voziloNaLiniji(linija, size - 1).getOznakaVozilaOdNule() +
1;
//nesto novo smisli nego neku listu
sortiranu pa njen max vidi ima li u collections min i max
//int oznakaNovog =
VozilaNaLinijama.inst().vozilaNaLiniji(linija ).size();
VoziloNaLiniji novoVozilo =
VoziloNaLiniji.saTipomVozila(linija, staroVozilo.getPrevoznik(), oznakaNovog,

staroVozilo.getTipVozila());
if ((size2Starog >= (brojObrta +
1)) && (size1Starog >= brojObrta)) {
int gornjaGranica = brojObrta
+ 1;

fillNovoVoziloPlus(staroVozilo, polasciStarog, novoVozilo, gornjaGranica,


pol1NaLiniji, pol2NaLiniji);
}
if
(novoVozilo.getPolasci().imaPolazaka()) {

staroVozilo.getPrevoznik().setBrojVozilaNaLiniji(staroVozilo.getPrevoznik().getBroj
VozilaNaLiniji() + 1);
//TODO ovo pomeri izvan
petlje da bi jedna ista vremena polazaka korisio za provlacenja

VozilaNaLinijama.inst().vozilaNaLiniji(linija).add(novoVozilo);
VozilaNaLinijama.inst().iskljucenaVozila(linija);

Time poslednjiDolazak =
novoVozilo.getPolasci().poslednjiDolazak();

if
(novoVozilo.getPolasci().poslednjiDolazakJeNaTerminusu1()) {

novoVozilo.getIskljucenja().dodajVremeIskljucenja1(poslednjiDolazak);
} else {

novoVozilo.getIskljucenja().dodajVremeIskljucenja2(poslednjiDolazak);
}

novoVozilo.setPoslednjeIskljucenje(novoVozilo.getPolasci().poslednjiDolazak());

//dodaj i u iskljucena i
sortiraj
novaVozila.add(novoVozilo);
if (!novaVozila.isEmpty()) {
if(RedVoznje3.inst()!
=null) {
SihteEditValues
sihteEditValues = new SihteEditValues();

sihteEditValues.setStaraVozila(samoVozilaPreSihti);

sihteEditValues.setNovaVozila(RedVoznje3.inst().getVozila());

sihteEditValues.setStaraIskljucenaVozila(staraIskljucenaVozila);

sihteEditValues.setNovaIskljucenaVozila(RedVoznje3.inst().getIskljucenaVozila());

sihteEditValues.setStaraPoslIskljucenaVozila(staraPoslednjaIskljVozila);

sihteEditValues.setNovaPoslIskljucenaVozila(RedVoznje3.inst().getPoslednjaIskljucen
aVozila());

sihteEditValues.setStaroVremePoluobrtaKaOptTerm(RedVoznje3.inst().getVremePoluobrta
KaOptTerm());

sihteEditValues.setStaroVremePoluobrtaKaNeOptTerm(RedVoznje3.inst().getVremePoluobr
taKaNeOptTerm());

sihteEditValues.setNovoVremePoluobrtaKaOptTerm(RedVoznje3.inst().getVremePoluobrtaK
aOptTerm());

sihteEditValues.setNovoVremePoluobrtaKaNeOptTerm(RedVoznje3.inst().getVremePoluobrt
aKaNeOptTerm());
FrameCont.inst().getGrafikonFrameGr().grafikonPanel().postProvuciEditNRV3(sihteEdit
Values);

Actions.refreshGrafikon();
//

FrameCont.inst().getGrafikonFrameGr().grafikonPanel().postProvuciEdit(novaVozila);
//
Actions.refreshGrafikon();
}else {

FrameCont.inst().getGrafikonFrameGr().grafikonPanel().postProvuciEdit(novaVozila);

Actions.refreshGrafikon();
}
}
// a da probas za slucaj smo
jednog vozila da kopiras vozilo i da u njemu obrises polaske posle selekcije
vremena i iskljucenja tako da bude soze 1 () ili taj jedan polazak i jos na jedan
na sledecem ili da polaske ()klasu polaci vozila napravis od polazaka na liniji pa
sub liste
}
}

if (!novaVozila.isEmpty() &&
RedVoznje3.inst() != null) {

RedVoznje3.inst().getVozila().addAll(novaVozila);
}

} catch (NumberFormatException nme) {


System.out.println(nme.getMessage());
}
}
}
} catch (Exception exc) {
exc.printStackTrace();
}
}
}

public static class ProvuciPopodnevnuSihtu1 extends AbstractAction {


//ovo su nova vozila njima nikakve smene manualci ne trebaju
private static final long serialVersionUID = 1L;

public static AbstractAction newAction() {


return new ProvuciPopodnevnuSihtu1();
}

private ProvuciPopodnevnuSihtu1() {
super(Messages.getString("provuciPopodnevnuSihtu"));
}

@Override
public void actionPerformed(ActionEvent evt) {
try {
if
(FrameCont.inst().getGrafikonFrameGr().grafikonPanel().izbori1Map().size() == 2) {
if(RedVoznje3.inst()!=null){
if
(RedVoznje3.inst().getIskljucenaVozila().size() > 0) {
ProvuciPopodnevnuShihtuDialog dlg =
ProvuciPopodnevnuShihtuDialog.zaPodatke(

FrameCont.inst().getGrafikonFrameGr().getPodaci(),null, true);

dlg.setPodaci(RedVoznje3.inst().getRedVoznjePodaci());
dlg.setVisible(true);
} else

JOptionPane.showMessageDialog(FrameCont.inst().getGrafikonFrame(),
Messages.getString("nemaSlobodnihVozila"),

Messages.getString("PopodnevneShihte"), JOptionPane.INFORMATION_MESSAGE);
}else {
List<VoziloNaLiniji>
vozila=VozilaNaLinijama.inst().vozilaNaLiniji(FrameCont.inst().getGrafikonFrameGr()
.getPodaci().getLinija());
ArrayList<String> dostupnaVozila = new
ArrayList<String>();
for(int i=0;i<vozila.size();i++){
Map<VoziloNaLiniji, Time> izbori =
FrameCont.inst().getGrafikonFrameGr().grafikonPanel().izbori1Map();
List<Time> vremenaNaTerminusu =
Alg3TimeUtils.vratiVremenaNaTerminusu(vozila, true);

Map<Time, VoziloNaLiniji> sortedIzbori =


new TreeMap<>();

for (VoziloNaLiniji vozilo :


izbori.keySet()) {

sortedIzbori.put(izbori.get(vozilo), vozilo);
}

//System.out.println("podaci.getNajkasnij
eVremeUkljucenja()"+podaci.getNajkasnijeVremeUkljucenja());
//if(TimeUtils.vremenaPosleSaGranicom(sor
tedIzbori.keySet().iterator().next(),vozila.get(i).getPolasci().getVremenaPolazaka1
()).size() ==0
//)
//dostupnaVozila.add(vozila.g
et(i).getImeVozila());

if(TimeUtils.vremeManje(vozila.get(i).getIskljucenja().svaIskljucenja().get(vozila.
get(i).getIskljucenja().svaIskljucenja().size()-
1),sortedIzbori.keySet().iterator().next() ))

dostupnaVozila.add(vozila.get(i).getImeVozila());

if(dostupnaVozila.size()>0){
System.out.println("Kombo slobodnih
vozila pre"+dostupnaVozila.size());
ProvuciPopodnevnuShihtuDialog dlg =
ProvuciPopodnevnuShihtuDialog.zaPodatke(

FrameCont.inst().getGrafikonFrameGr().getPodaci(),dostupnaVozila,true);
//dlg.setPodaci(RedVoznje3.inst().getRedV
oznjePodaci());
dlg.setVisible(true);
}else

JOptionPane.showMessageDialog(FrameCont.inst().getGrafikonFrame(),
Messages.getString("nemaSlobodnihVozila"),

Messages.getString("PopodnevneShihte"), JOptionPane.INFORMATION_MESSAGE);
}
} else if
(FrameCont.inst().getGrafikonFrameGr().grafikonPanel().izbori1Map().size() < 2)

JOptionPane.showMessageDialog(FrameCont.inst().getGlavniFrame(),
Messages.getString("nisuSelektovanaDvaPolaska"),
Messages.getString("errorTitle"),
JOptionPane.ERROR_MESSAGE);
else

JOptionPane.showMessageDialog(FrameCont.inst().getGlavniFrame(),
Messages.getString("selektovanoViseOdDvaPolaska"),
Messages.getString("errorTitle"),
JOptionPane.ERROR_MESSAGE);
//showPomeriDialog();
} catch (Exception exc) {
}
}

public static class ProvuciPopodnevnuSihtu2 extends AbstractAction {


//ovo su nova vozila njima nikakve smene manualci ne trebaju
private static final long serialVersionUID = 1L;

public static AbstractAction newAction() {


return new ProvuciPopodnevnuSihtu2();
}

private ProvuciPopodnevnuSihtu2() {
super(Messages.getString("provuciPopodnevnuSihtu"));
}

@Override
public void actionPerformed(ActionEvent evt) {
try {
if
(FrameCont.inst().getGrafikonFrameGr().grafikonPanel().izbori2Map().size() == 2) {
if(RedVoznje3.inst()!=null){
if
(RedVoznje3.inst().getIskljucenaVozila().size() > 0) {
ProvuciPopodnevnuShihtuDialog dlg =
ProvuciPopodnevnuShihtuDialog.zaPodatke(
FrameCont.inst().getGrafikonFrameGr().getPodaci(),null, false);

dlg.setPodaci(RedVoznje3.inst().getRedVoznjePodaci());
dlg.setVisible(true);
} else

JOptionPane.showMessageDialog(FrameCont.inst().getGrafikonFrame(),
Messages.getString("nemaSlobodnihVozila"),

Messages.getString("PopodnevneShihte"), JOptionPane.INFORMATION_MESSAGE);
}else {
List<VoziloNaLiniji>
vozila=VozilaNaLinijama.inst().vozilaNaLiniji(FrameCont.inst().getGrafikonFrameGr()
.getPodaci().getLinija());
ArrayList<String> dostupnaVozila = new
ArrayList<String>();
for(int i=0;i<vozila.size();i++){
Map<VoziloNaLiniji, Time> izbori =
FrameCont.inst().getGrafikonFrameGr().grafikonPanel().izbori2Map();
//List<Time> vremenaNaTerminusu =
Alg3TimeUtils.vratiVremenaNaTerminusu(vozila, false);

Map<Time, VoziloNaLiniji> sortedIzbori =


new TreeMap<>();

for (VoziloNaLiniji vozilo :


izbori.keySet()) {

sortedIzbori.put(izbori.get(vozilo), vozilo);
}

//System.out.println("podaci.getNajkasnij
eVremeUkljucenja()"+podaci.getNajkasnijeVremeUkljucenja());
//if(TimeUtils.vremenaPosleSaGranicom(sor
tedIzbori.keySet().iterator().next(),vozila.get(i).getPolasci().getVremenaPolazaka1
()).size() ==0
//)
//dostupnaVozila.add(vozila.g
et(i).getImeVozila());

if(TimeUtils.vremeManje(vozila.get(i).getIskljucenja().svaIskljucenja().get(vozila.
get(i).getIskljucenja().svaIskljucenja().size()-
1),sortedIzbori.keySet().iterator().next() ))

dostupnaVozila.add(vozila.get(i).getImeVozila());

if(dostupnaVozila.size()>0){
System.out.println("Kombo slobodnih
vozila pre"+dostupnaVozila.size());
ProvuciPopodnevnuShihtuDialog dlg =
ProvuciPopodnevnuShihtuDialog.zaPodatke(

FrameCont.inst().getGrafikonFrameGr().getPodaci(),dostupnaVozila,false);
//dlg.setPodaci(RedVoznje3.inst().getRedV
oznjePodaci());
dlg.setVisible(true);
}else

JOptionPane.showMessageDialog(FrameCont.inst().getGrafikonFrame(),
Messages.getString("nemaSlobodnihVozila"),

Messages.getString("PopodnevneShihte"), JOptionPane.INFORMATION_MESSAGE);
}
} else if
(FrameCont.inst().getGrafikonFrameGr().grafikonPanel().izbori2Map().size() < 2)

JOptionPane.showMessageDialog(FrameCont.inst().getGlavniFrame(),
Messages.getString("nisuSelektovanaDvaPolaska"),
Messages.getString("errorTitle"),
JOptionPane.ERROR_MESSAGE);
else

JOptionPane.showMessageDialog(FrameCont.inst().getGlavniFrame(),
Messages.getString("selektovanoViseOdDvaPolaska"),
Messages.getString("errorTitle"),
JOptionPane.ERROR_MESSAGE);
} catch (Exception exc) {
}
}

Vous aimerez peut-être aussi