private void propagar(int plataforma, int quantitat, int cost) { // System.out.println("Propaguem a " + plataforma + " quantitat " + quantitat + " i cost " + // cost); PlataformaConectada pcAux = (PlataformaConectada) connexions[plataforma].clone(); // Incrementem el petroli del que disposa la plataforma connexions[plataforma].setPetSortida(connexions[plataforma].getPetSortida() + quantitat); connexions[plataforma].setCost(pcAux.getCost() + cost); // Calculem el petroli que es bombejar� amb el nou canvi if (connexions[plataforma].getPetSortida() > connexions[plataforma].getBombeig()) connexions[plataforma].setPetBombejat(connexions[plataforma].getBombeig()); else connexions[plataforma].setPetBombejat(connexions[plataforma].getPetSortida()); if (connexions[plataforma].isConnected()) { // System.out.println("Propagarem les diferencies"); // System.out.println("LA tuberia abans costava " + pcAux.getCostTuberia()); connexions[plataforma].setCostTuberia( calculaCostTuberia( distancies[plataforma][(connexions[plataforma].getSortida())], connexions[plataforma].getPetBombejat())); // System.out.println("I ara, " connexions[plataforma].getCostTuberia()); cost += PetroliUtils.getCostBombeig(connexions[plataforma].getBombeig()) - PetroliUtils.getCostBombeig(pcAux.getBombeig()); cost += connexions[plataforma].getCostTuberia() - pcAux.getCostTuberia(); propagar( connexions[plataforma].getSortida(), connexions[plataforma].getPetBombejat() - pcAux.getPetBombejat(), cost); } if (plataformes[plataforma] .isPlataformaDistribuidora()) { // Si arriba m�s o menys petroli a una plataforma // Distribuidora SEMPRE surt a compte modificar el seu // bombeig this.costTotal += connexions[plataforma].getCost() - pcAux.getCost(); this.petroliTotal += connexions[plataforma].getPetBombejat() - pcAux.getPetBombejat(); if (connexions[plataforma].getPetSortida() <= PetroliUtils.CONST_TIPUS_BOMBEIG_NO) modificarBombeig(plataforma, PetroliUtils.CONST_TIPUS_BOMBEIG_NO); else if (connexions[plataforma].getPetSortida() <= PetroliUtils.CONST_TIPUS_BOMBEIG_NO) modificarBombeig(plataforma, PetroliUtils.CONST_TIPUS_BOMBEIG_NO); else if (connexions[plataforma].getPetSortida() <= PetroliUtils.CONST_TIPUS_BOMBEIG_A) modificarBombeig(plataforma, PetroliUtils.CONST_TIPUS_BOMBEIG_A); else if (connexions[plataforma].getPetSortida() <= PetroliUtils.CONST_TIPUS_BOMBEIG_B) modificarBombeig(plataforma, PetroliUtils.CONST_TIPUS_BOMBEIG_B); else if (connexions[plataforma].getPetSortida() <= PetroliUtils.CONST_TIPUS_BOMBEIG_C) modificarBombeig(plataforma, PetroliUtils.CONST_TIPUS_BOMBEIG_C); else modificarBombeig(plataforma, PetroliUtils.CONST_TIPUS_BOMBEIG_D); } return; }
public void modificarBombeig(int plataforma, int tipusBombeig) { // System.out.println("Modificar bombeig de plataforma"); if ((tipusBombeig != PetroliUtils.CONST_TIPUS_BOMBEIG_A) && (tipusBombeig != PetroliUtils.CONST_TIPUS_BOMBEIG_B) && (tipusBombeig != PetroliUtils.CONST_TIPUS_BOMBEIG_C) && (tipusBombeig != PetroliUtils.CONST_TIPUS_BOMBEIG_D) && (tipusBombeig != PetroliUtils.CONST_TIPUS_BOMBEIG_NO)) return; // System.out.println("Actualitzem el petroli bombejat"); PlataformaConectada aux = (PlataformaConectada) connexions[plataforma].clone(); if (aux.getBombeig() == tipusBombeig) return; connexions[plataforma].setBombeig(tipusBombeig); connexions[plataforma].setCost( connexions[plataforma].getCost() - PetroliUtils.getCostBombeig(aux.getBombeig()) + PetroliUtils.getCostBombeig(connexions[plataforma].getBombeig())); if (connexions[plataforma].getPetSortida() > connexions[plataforma].getBombeig()) connexions[plataforma].setPetBombejat(connexions[plataforma].getBombeig()); else connexions[plataforma].setPetBombejat(connexions[plataforma].getPetSortida()); // Si és plataforma distribuidora, vol dir que bombejem més petroli final si es que en tenim if (plataformes[plataforma].isPlataformaDistribuidora()) { this.petroliTotal = this.petroliTotal - aux.getPetBombejat() + connexions[plataforma].getPetBombejat(); this.costTotal = this.costTotal - aux.getCost() + connexions[plataforma].getCost(); } else { if (!connexions[plataforma].isConnected()) return; connexions[plataforma].setCostTuberia( calculaCostTuberia( distancies[plataforma][(connexions[plataforma].getSortida())], connexions[plataforma].getPetBombejat())); int costPropagat = PetroliUtils.getCostBombeig(connexions[plataforma].getBombeig()) - PetroliUtils.getCostBombeig(aux.getBombeig()); costPropagat = costPropagat - aux.getCostTuberia() + connexions[plataforma].getCostTuberia(); propagar( connexions[plataforma].getSortida(), connexions[plataforma].getPetBombejat() - aux.getPetBombejat(), costPropagat); } }