import java.io.*;
import java.net.*;
import java.util.StringTokenizer;

public class Slike {
    public static void main(String[] args) {
	if (args.length<1) {
	    System.out.println("Upotreba: java Slike <url> [direktorij]");
	    System.exit(0);
	}

	URL webPage=null;
	InputStream webStream=null;
	File lokacija=null;
	PrintWriter dlPage=null;
	File dlPageFile=null;

	if (args.length==2)
	    lokacija=new File(args[1]);
	else
	    lokacija=new File(System.getProperty("user.dir"));

	if (!lokacija.isDirectory()) {
	    System.err.println("Niste unijeli ispravan direktorij!");
	    System.exit(0);
	}
	
	try {
	    webPage=new URL(args[0]);
	    webStream=webPage.openStream();
	    BufferedReader webBuffer=new BufferedReader(new InputStreamReader(webStream));

	    // Sad zelimo saznati ime datoteke u koju da spremamo stranicu
	    String dlPageName=webPage.getPath();
	    if (dlPageName.equals("") || dlPageName==null || dlPageName.endsWith("/")) dlPageName=dlPageName+"index.html";
	    if (dlPageName.startsWith("/")) dlPageName=dlPageName.substring(1);
	    dlPageName=webPage.getHost()+"/"+dlPageName;
	    dlPageName=dlPageName.replaceAll("/",File.separator);
	    
	    dlPageFile=new File(lokacija,dlPageName);
	    dlPageFile.getParentFile().mkdirs();
	    
	    // Koristimo ime da otvorimo Writer 
	    dlPage=new PrintWriter(new FileWriter(dlPageFile));
	    
	    int indeks;
	    String linija=null;
	    String lcLine=null;
	    boolean imgOpened=false;
	    StringTokenizer tokenizer=null;
	    String src=null;
	    URL slikaURL=null;
	    InputStream slikaStream=null;
	    FileOutputStream dlSlika=null;
	    String dlPath=null;
	    File dlPathFile=null;
	    int c;
	    
	    while ((linija=webBuffer.readLine())!=null) {
		dlPage.println(linija);
		
		// Parsiranje stranice

		lcLine=linija.toLowerCase();
		indeks=0;

		if (!imgOpened) {
		    indeks=lcLine.indexOf("<img");
		    if (indeks>=0) imgOpened=true;
		}
		
		if (imgOpened) {
		    indeks=lcLine.indexOf("src",indeks);

		    if (indeks>=0) {
			// pronasli smo src
			if (linija.charAt(indeks+4)=='\"' || linija.charAt(indeks+4)=='\'') indeks++;
			tokenizer=new StringTokenizer(linija.substring(indeks+4)," >\'\"\n\r\f\t");
			src=tokenizer.nextToken();
		    
			// e sad imamo src, sta s njim?
			slikaURL=null;
			slikaStream=null;

//			System.out.println("Pronadjen src=\""+src+"\"");

			try {
			    slikaURL=new URL(webPage,src);
			    slikaStream=slikaURL.openStream();

			    // moramo napraviti lokalni path gdje spremamo sliku
			    dlPath=slikaURL.getPath();
			    if (dlPath.charAt(0)=='/') dlPath=dlPath.substring(1);
			    dlPath=slikaURL.getHost()+"/"+dlPath;
			    dlPath=dlPath.replaceAll("/",File.separator);
			    
			    dlPathFile=new File(lokacija,dlPath);
//			    System.out.println("Spremit cemo u: "+dlPathFile.getPath());
			    dlPathFile.getParentFile().mkdirs();
			    
			    dlSlika=new FileOutputStream(dlPathFile);

			    while ((c=slikaStream.read())!=-1)
				dlSlika.write(c);
			}
			catch (MalformedURLException e) {
			    System.out.println("Nisam uspio napravit URL za src=\""+src+"\"");
			}
			catch (IOException e) {
			    e.printStackTrace();
			}
			catch (Exception e) {
			    e.printStackTrace();
			}
			finally {
			    if (slikaStream!=null) {
				try { slikaStream.close(); }
				catch (IOException e) {}
			    }
			    if (dlSlika!=null) {
				try { dlSlika.close(); }
				catch (IOException e) {}
			    }
			}

			imgOpened=false;
		    }
		}
	    }
	}
	catch (MalformedURLException e) {
	    System.err.println(e);
	}
	catch (IOException e) {
	    System.err.println(e);
	    e.printStackTrace();
	}
	catch (Exception e) {
	    System.err.println(e);
	    e.printStackTrace();
	}
	finally {
	    if (webStream!=null) {
		try { webStream.close(); }
		catch (IOException e) {}
	    }
	    if (dlPage!=null) dlPage.close();
	}
    }
}
