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() {