Ukládání atributů (možnost změny stávajících).
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() {