
/**
 * Transporte = Carga(s) transportadas por um camião de matrícula definida 
 * numa dada data
 * 
 * @author FMM
 * @version 7/2009
 */
import java.util.*;
import java.io.Serializable;
public class Transporte implements Serializable {
    
   private String matric;
   private GregorianCalendar data;
   private ArrayList<Carga> cargas; // cargas transportadas
   
   public Transporte(Transporte trans) {
       matric = trans.getMatric();
       data = trans.getData();
       cargas = trans.getCargas();
   }
   
   public Transporte(String mat, GregorianCalendar dt) {
       matric = mat; data = (GregorianCalendar) dt.clone();
       cargas = new ArrayList<Carga>();
   }
   
   public String getMatric() { return matric; }
   public GregorianCalendar getData() { 
       return (GregorianCalendar) data.clone();
   }
   
   public ArrayList<Carga> getCargas() {
       ArrayList<Carga> lstC = new ArrayList<Carga>();
       for(Carga c : cargas) lstC.add(c.clone());
       return lstC;
   }
   
   public void addCarga(Carga c) { cargas.add(c.clone()); }
   
   public void addCargas(Collection<? extends Carga> listaC) {
       for(Carga c : listaC) cargas.add(c.clone());
   }
   
   public Set<String> destinos() {
       Set<String> destinos = new TreeSet<String>();
       for(Carga c : cargas) destinos.add(c.getDestino());
       return destinos;
   }
   
   // valor total facturado com o transporte
   public double totalTransporte() {
       double total = 0.0;
       for(Carga c : cargas) total += c.getPreco();
       return total;
   } 
   
   public Transporte clone() { return new Transporte(this); }
   
}
