# HG changeset patch # User František Kučera # Date 1292449083 -3600 # Node ID a2e91b20198b4cbc4763264bfb03c3dde4f79a97 # Parent 97175576600644aef02f77b74cef53fc1d4769ca Ukládání atributů (možnost změny stávajících). diff -r 971755766006 -r a2e91b20198b java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java Wed Dec 15 20:41:38 2010 +0100 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java Wed Dec 15 22:38:03 2010 +0100 @@ -1,5 +1,8 @@ package cz.frantovo.rozsireneAtributy; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; + public class Atribut { private String klic; @@ -10,6 +13,11 @@ this.hodnota = hodnota; } + public Atribut(String klic, ByteBuffer hodnota) { + this.klic = klic; + setHodnota(hodnota); + } + public String getKlic() { return klic; } @@ -22,7 +30,24 @@ return hodnota; } + public final ByteBuffer getHodnotaBajty() { + return zakóduj(getHodnota()); + } + public void setHodnota(String hodnota) { this.hodnota = hodnota; } + + public final void setHodnota(ByteBuffer hodnota) { + setHodnota(dekóduj(hodnota)); + } + + private static String dekóduj(ByteBuffer bajty) { + bajty.flip(); + return Charset.defaultCharset().decode(bajty).toString(); + } + + private static ByteBuffer zakóduj(String text) { + return Charset.defaultCharset().encode(text); + } } diff -r 971755766006 -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:41:38 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() {