//tale classe ha il compito di eliminare le ridondanze di dati rilevate durante la ricerca di info da parte degli slave
//e di formare un unico file-risultato




import java.io.*;

public class fondiFile {
	private int numFile;
	private int index;
	private String risultatoFile;
	
	
public fondiFile(int arg1, int arg2){
	super();
	numFile=arg1;
	index=arg2;
}




private String eliminaRidondanze(String filez){
			File f = null;
			PrintWriter dest;
			File filezRisultato;
			
			
			
			
			try{
				filezRisultato = new File(index+"temp.dat");
				dest = new PrintWriter(new BufferedWriter(new FileWriter(filezRisultato)));
			}
			catch(Exception e){
				return "errore";
			}

			int numLine=0;
			boolean finito=false;
			while (finito==false){

				BufferedReader input;
				try{
					f = new File(filez);
					input = new BufferedReader(new FileReader(f));
				}
				catch(Exception e){
					return "errore";
				}

				
				String line;
				try{
					for (int i=0;i<numLine;i++){
						String temp=input.readLine();
					}
					line=input.readLine();
					
				}
				catch (Exception e){
					return "errore";
				}
				
				if(line==null){
					try{
						input.close();
						finito=true;
					}
					catch (Exception e){
						return "errore";
					}
				}
				else{		
					String confr;
					boolean scriviLinea = true;
					try{
						while (       (confr = input.readLine())     != null){
							if (line.equals(confr)){
								scriviLinea=false;
								break;
							}	
						}
					}
					catch (Exception e){
						return "errore";
					}
					numLine++;
					if (scriviLinea){
						dest.println(line);
					}
					try{
						input.close();
					}
					catch (Exception e){
						return "errore";
					}
					
				}
				
			}//end while
			
			
			
			dest.close();
			f.delete();
			filezRisultato.renameTo(f);
			return filez;
}











private String concatenaFile(){
		// i nomi dei file in input sono "index-0.dat" fino a "index-numFile.dat"
		PrintWriter output;
		try{
			output = new PrintWriter(new BufferedWriter(new FileWriter(index + "-finito.dat")));
		}
		catch(Exception e){
			System.out.println(e.toString());
			return "errore";
		}
		
		for (int numFileScritti=0; numFileScritti<numFile;numFileScritti++){
			File f = new File(""+index+"-"+numFileScritti+".dat");
			if (!f.exists()){
				System.out.println("file di input " + f.toString() + " non esiste");				
				continue;//se il file non esiste allora c'è stato un errore e quindi si continua col prossimo file
			}
			BufferedReader input;
			try{
				input = new BufferedReader(new FileReader(f));
			}
			catch(Exception e){
				continue;
			}
				
			try{
				String line;
				while (       (line = input.readLine())     != null){
						if (line!="")
							output.println(line);
				}
				output.flush();
				input.close();
			}
			catch(Exception e){
				continue;
			}
			boolean ris = f.delete();
		}//end for
		
		output.close();		
		return index+"-finito.dat";
		//il file in uscita è "index-finito.dat"
}
public String esegui(){
	String ris = this.concatenaFile();
	System.out.println("RISULTATO CONCATENAFILE: " + ris);
	if (ris!="errore"){
		String ris2 = this.eliminaRidondanze(ris);
		System.out.println("RISULTATO ELIMINARIDONDANZE: " + ris);
		return ris2;
	}
	return ris;
}
}//fine class