Ukládání atributů (možnost změny stávajících).
authorFrantišek Kučera <franta-hg@frantovo.cz>
Wed Dec 15 22:38:03 2010 +0100 (2010-12-15)
changeset 9a2e91b20198b
parent 8 971755766006
child 10 ed2b6ebf138d
Ukládání atributů (možnost změny stávajících).
java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java
java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java
     1.1 --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java	Wed Dec 15 20:41:38 2010 +0100
     1.2 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java	Wed Dec 15 22:38:03 2010 +0100
     1.3 @@ -1,5 +1,8 @@
     1.4  package cz.frantovo.rozsireneAtributy;
     1.5  
     1.6 +import java.nio.ByteBuffer;
     1.7 +import java.nio.charset.Charset;
     1.8 +
     1.9  public class Atribut {
    1.10  
    1.11  	private String klic;
    1.12 @@ -10,6 +13,11 @@
    1.13  		this.hodnota = hodnota;
    1.14  	}
    1.15  
    1.16 +	public Atribut(String klic, ByteBuffer hodnota) {
    1.17 +		this.klic = klic;
    1.18 +		setHodnota(hodnota);
    1.19 +	}
    1.20 +
    1.21  	public String getKlic() {
    1.22  		return klic;
    1.23  	}
    1.24 @@ -22,7 +30,24 @@
    1.25  		return hodnota;
    1.26  	}
    1.27  
    1.28 +	public final ByteBuffer getHodnotaBajty() {
    1.29 +		return zakóduj(getHodnota());
    1.30 +	}
    1.31 +
    1.32  	public void setHodnota(String hodnota) {
    1.33  		this.hodnota = hodnota;
    1.34  	}
    1.35 +
    1.36 +	public final void setHodnota(ByteBuffer hodnota) {
    1.37 +		setHodnota(dekóduj(hodnota));
    1.38 +	}
    1.39 +
    1.40 +	private static String dekóduj(ByteBuffer bajty) {
    1.41 +		bajty.flip();
    1.42 +		return Charset.defaultCharset().decode(bajty).toString();
    1.43 +	}
    1.44 +
    1.45 +	private static ByteBuffer zakóduj(String text) {
    1.46 +		return Charset.defaultCharset().encode(text);
    1.47 +	}
    1.48  }
     2.1 --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java	Wed Dec 15 20:41:38 2010 +0100
     2.2 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java	Wed Dec 15 22:38:03 2010 +0100
     2.3 @@ -3,12 +3,12 @@
     2.4  import java.io.File;
     2.5  import java.io.IOException;
     2.6  import java.nio.ByteBuffer;
     2.7 -import java.nio.charset.Charset;
     2.8  import java.nio.file.Path;
     2.9  import java.nio.file.attribute.UserDefinedFileAttributeView;
    2.10  import java.util.ArrayList;
    2.11  import java.util.HashSet;
    2.12  import java.util.List;
    2.13 +import java.util.logging.Level;
    2.14  import java.util.logging.Logger;
    2.15  import javax.swing.event.TableModelEvent;
    2.16  import javax.swing.event.TableModelListener;
    2.17 @@ -23,12 +23,12 @@
    2.18  	private static final Logger log = Logger.getLogger(Model.class.getSimpleName());
    2.19  	private String[] sloupečky = {"Název", "Hodnota"};
    2.20  	private HashSet<TableModelListener> posluchače = new HashSet<TableModelListener>();
    2.21 -	private UserDefinedFileAttributeView pohled;
    2.22 +	private UserDefinedFileAttributeView souborovySystem;
    2.23  	private ArrayList<Atribut> atributy = new ArrayList<Atribut>();
    2.24  
    2.25  	public Model(File soubor) throws IOException {
    2.26  		Path cesta = soubor.toPath();
    2.27 -		pohled = cesta.getFileAttributeView(UserDefinedFileAttributeView.class);
    2.28 +		souborovySystem = cesta.getFileAttributeView(UserDefinedFileAttributeView.class);
    2.29  		načtiAtributy();
    2.30  	}
    2.31  
    2.32 @@ -63,12 +63,23 @@
    2.33  	}
    2.34  
    2.35  	public void setValueAt(Object value, int m, int n) {
    2.36 -		if (n == 0) {
    2.37 -			atributy.get(m).setKlic(String.valueOf(value.toString()));
    2.38 -			/** TODO: uložit na souborový systém */
    2.39 -		} else if (n == 1) {
    2.40 -			atributy.get(m).setHodnota(String.valueOf(value.toString()));
    2.41 -			/** TODO: uložit na souborový systém */
    2.42 +		Atribut a = atributy.get(m);
    2.43 +		try {
    2.44 +			if (n == 0) {
    2.45 +				/** Měníme klíč – název atributu */
    2.46 +				String novýKlíč = String.valueOf(value.toString());
    2.47 +				if (!novýKlíč.equals(a.getKlic())) {
    2.48 +					souborovySystem.delete(a.getKlic());
    2.49 +					a.setKlic(novýKlíč);
    2.50 +					souborovySystem.write(a.getKlic(), a.getHodnotaBajty());
    2.51 +				}
    2.52 +			} else if (n == 1) {
    2.53 +				/** Měníme hodnotu atributu */
    2.54 +				a.setHodnota(String.valueOf(value.toString()));
    2.55 +				souborovySystem.write(a.getKlic(), a.getHodnotaBajty());
    2.56 +			}
    2.57 +		} catch (IOException e) {
    2.58 +			log.log(Level.SEVERE, "Selhalo ukládání atributu na souborový systém", e);
    2.59  		}
    2.60  	}
    2.61  
    2.62 @@ -80,29 +91,24 @@
    2.63  		posluchače.remove(l);
    2.64  	}
    2.65  
    2.66 -	public void přidejŘádek() {
    2.67 -		//atributy.add(new Atribut());
    2.68 -		//upozorniPosluchače();
    2.69 +	public void přidejAtribut(Atribut a) {
    2.70 +		atributy.add(a);
    2.71 +		upozorniPosluchače();
    2.72  	}
    2.73  
    2.74 -	public void odeberŘádek(int m) {
    2.75 -		//atributy.remove(m);
    2.76 -		//upozorniPosluchače();
    2.77 +	public void odeberAtribut(Atribut a) {
    2.78 +		atributy.remove(a);
    2.79 +		upozorniPosluchače();
    2.80  	}
    2.81  
    2.82  	private void načtiAtributy() throws IOException {
    2.83 -		List<String> jménaAtributů = pohled.list();
    2.84 +		List<String> jménaAtributů = souborovySystem.list();
    2.85  		for (String jménoAtributu : jménaAtributů) {
    2.86 -			ByteBuffer bajty = ByteBuffer.allocate(pohled.size(jménoAtributu));
    2.87 -			pohled.read(jménoAtributu, bajty);
    2.88 -			String hodnotaAtributu = dekóduj(bajty);
    2.89 +			ByteBuffer hodnotaAtributu = ByteBuffer.allocate(souborovySystem.size(jménoAtributu));
    2.90 +			souborovySystem.read(jménoAtributu, hodnotaAtributu);
    2.91  			atributy.add(new Atribut(jménoAtributu, hodnotaAtributu));
    2.92  		}
    2.93 -	}
    2.94 -
    2.95 -	private static String dekóduj(ByteBuffer bajty) {
    2.96 -		bajty.flip();
    2.97 -		return Charset.defaultCharset().decode(bajty).toString();
    2.98 +		upozorniPosluchače();
    2.99  	}
   2.100  
   2.101  	private void upozorniPosluchače() {