diff -r 734f104f2869 -r a2e91b20198b java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java Wed Dec 15 20:07:14 2010 +0100 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java Wed Dec 15 22:38:03 2010 +0100 @@ -3,12 +3,12 @@ import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; -import java.nio.charset.Charset; import java.nio.file.Path; import java.nio.file.attribute.UserDefinedFileAttributeView; import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; @@ -23,12 +23,12 @@ private static final Logger log = Logger.getLogger(Model.class.getSimpleName()); private String[] sloupečky = {"Název", "Hodnota"}; private HashSet posluchače = new HashSet(); - private UserDefinedFileAttributeView pohled; + private UserDefinedFileAttributeView souborovySystem; private ArrayList atributy = new ArrayList(); public Model(File soubor) throws IOException { Path cesta = soubor.toPath(); - pohled = cesta.getFileAttributeView(UserDefinedFileAttributeView.class); + souborovySystem = cesta.getFileAttributeView(UserDefinedFileAttributeView.class); načtiAtributy(); } @@ -63,12 +63,23 @@ } public void setValueAt(Object value, int m, int n) { - if (n == 0) { - atributy.get(m).setKlic(String.valueOf(value.toString())); - /** TODO: uložit na souborový systém */ - } else if (n == 1) { - atributy.get(m).setHodnota(String.valueOf(value.toString())); - /** TODO: uložit na souborový systém */ + Atribut a = atributy.get(m); + try { + if (n == 0) { + /** Měníme klíč – název atributu */ + String novýKlíč = String.valueOf(value.toString()); + if (!novýKlíč.equals(a.getKlic())) { + souborovySystem.delete(a.getKlic()); + a.setKlic(novýKlíč); + souborovySystem.write(a.getKlic(), a.getHodnotaBajty()); + } + } else if (n == 1) { + /** Měníme hodnotu atributu */ + a.setHodnota(String.valueOf(value.toString())); + souborovySystem.write(a.getKlic(), a.getHodnotaBajty()); + } + } catch (IOException e) { + log.log(Level.SEVERE, "Selhalo ukládání atributu na souborový systém", e); } } @@ -80,29 +91,24 @@ posluchače.remove(l); } - public void přidejŘádek() { - //atributy.add(new Atribut()); - //upozorniPosluchače(); + public void přidejAtribut(Atribut a) { + atributy.add(a); + upozorniPosluchače(); } - public void odeberŘádek(int m) { - //atributy.remove(m); - //upozorniPosluchače(); + public void odeberAtribut(Atribut a) { + atributy.remove(a); + upozorniPosluchače(); } private void načtiAtributy() throws IOException { - List jménaAtributů = pohled.list(); + List jménaAtributů = souborovySystem.list(); for (String jménoAtributu : jménaAtributů) { - ByteBuffer bajty = ByteBuffer.allocate(pohled.size(jménoAtributu)); - pohled.read(jménoAtributu, bajty); - String hodnotaAtributu = dekóduj(bajty); + ByteBuffer hodnotaAtributu = ByteBuffer.allocate(souborovySystem.size(jménoAtributu)); + souborovySystem.read(jménoAtributu, hodnotaAtributu); atributy.add(new Atribut(jménoAtributu, hodnotaAtributu)); } - } - - private static String dekóduj(ByteBuffer bajty) { - bajty.flip(); - return Charset.defaultCharset().decode(bajty).toString(); + upozorniPosluchače(); } private void upozorniPosluchače() {