java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java
changeset 9 a2e91b20198b
parent 6 734f104f2869
child 10 ed2b6ebf138d
     1.1 --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java	Wed Dec 15 20:07:14 2010 +0100
     1.2 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java	Wed Dec 15 22:38:03 2010 +0100
     1.3 @@ -3,12 +3,12 @@
     1.4  import java.io.File;
     1.5  import java.io.IOException;
     1.6  import java.nio.ByteBuffer;
     1.7 -import java.nio.charset.Charset;
     1.8  import java.nio.file.Path;
     1.9  import java.nio.file.attribute.UserDefinedFileAttributeView;
    1.10  import java.util.ArrayList;
    1.11  import java.util.HashSet;
    1.12  import java.util.List;
    1.13 +import java.util.logging.Level;
    1.14  import java.util.logging.Logger;
    1.15  import javax.swing.event.TableModelEvent;
    1.16  import javax.swing.event.TableModelListener;
    1.17 @@ -23,12 +23,12 @@
    1.18  	private static final Logger log = Logger.getLogger(Model.class.getSimpleName());
    1.19  	private String[] sloupečky = {"Název", "Hodnota"};
    1.20  	private HashSet<TableModelListener> posluchače = new HashSet<TableModelListener>();
    1.21 -	private UserDefinedFileAttributeView pohled;
    1.22 +	private UserDefinedFileAttributeView souborovySystem;
    1.23  	private ArrayList<Atribut> atributy = new ArrayList<Atribut>();
    1.24  
    1.25  	public Model(File soubor) throws IOException {
    1.26  		Path cesta = soubor.toPath();
    1.27 -		pohled = cesta.getFileAttributeView(UserDefinedFileAttributeView.class);
    1.28 +		souborovySystem = cesta.getFileAttributeView(UserDefinedFileAttributeView.class);
    1.29  		načtiAtributy();
    1.30  	}
    1.31  
    1.32 @@ -63,12 +63,23 @@
    1.33  	}
    1.34  
    1.35  	public void setValueAt(Object value, int m, int n) {
    1.36 -		if (n == 0) {
    1.37 -			atributy.get(m).setKlic(String.valueOf(value.toString()));
    1.38 -			/** TODO: uložit na souborový systém */
    1.39 -		} else if (n == 1) {
    1.40 -			atributy.get(m).setHodnota(String.valueOf(value.toString()));
    1.41 -			/** TODO: uložit na souborový systém */
    1.42 +		Atribut a = atributy.get(m);
    1.43 +		try {
    1.44 +			if (n == 0) {
    1.45 +				/** Měníme klíč – název atributu */
    1.46 +				String novýKlíč = String.valueOf(value.toString());
    1.47 +				if (!novýKlíč.equals(a.getKlic())) {
    1.48 +					souborovySystem.delete(a.getKlic());
    1.49 +					a.setKlic(novýKlíč);
    1.50 +					souborovySystem.write(a.getKlic(), a.getHodnotaBajty());
    1.51 +				}
    1.52 +			} else if (n == 1) {
    1.53 +				/** Měníme hodnotu atributu */
    1.54 +				a.setHodnota(String.valueOf(value.toString()));
    1.55 +				souborovySystem.write(a.getKlic(), a.getHodnotaBajty());
    1.56 +			}
    1.57 +		} catch (IOException e) {
    1.58 +			log.log(Level.SEVERE, "Selhalo ukládání atributu na souborový systém", e);
    1.59  		}
    1.60  	}
    1.61  
    1.62 @@ -80,29 +91,24 @@
    1.63  		posluchače.remove(l);
    1.64  	}
    1.65  
    1.66 -	public void přidejŘádek() {
    1.67 -		//atributy.add(new Atribut());
    1.68 -		//upozorniPosluchače();
    1.69 +	public void přidejAtribut(Atribut a) {
    1.70 +		atributy.add(a);
    1.71 +		upozorniPosluchače();
    1.72  	}
    1.73  
    1.74 -	public void odeberŘádek(int m) {
    1.75 -		//atributy.remove(m);
    1.76 -		//upozorniPosluchače();
    1.77 +	public void odeberAtribut(Atribut a) {
    1.78 +		atributy.remove(a);
    1.79 +		upozorniPosluchače();
    1.80  	}
    1.81  
    1.82  	private void načtiAtributy() throws IOException {
    1.83 -		List<String> jménaAtributů = pohled.list();
    1.84 +		List<String> jménaAtributů = souborovySystem.list();
    1.85  		for (String jménoAtributu : jménaAtributů) {
    1.86 -			ByteBuffer bajty = ByteBuffer.allocate(pohled.size(jménoAtributu));
    1.87 -			pohled.read(jménoAtributu, bajty);
    1.88 -			String hodnotaAtributu = dekóduj(bajty);
    1.89 +			ByteBuffer hodnotaAtributu = ByteBuffer.allocate(souborovySystem.size(jménoAtributu));
    1.90 +			souborovySystem.read(jménoAtributu, hodnotaAtributu);
    1.91  			atributy.add(new Atribut(jménoAtributu, hodnotaAtributu));
    1.92  		}
    1.93 -	}
    1.94 -
    1.95 -	private static String dekóduj(ByteBuffer bajty) {
    1.96 -		bajty.flip();
    1.97 -		return Charset.defaultCharset().decode(bajty).toString();
    1.98 +		upozorniPosluchače();
    1.99  	}
   1.100  
   1.101  	private void upozorniPosluchače() {