1 package cz.frantovo.rozsireneAtributy;
4 import java.io.IOException;
5 import java.nio.ByteBuffer;
6 import java.nio.file.Path;
7 import java.nio.file.attribute.UserDefinedFileAttributeView;
8 import java.util.ArrayList;
9 import java.util.HashSet;
10 import java.util.List;
11 import java.util.logging.Level;
12 import java.util.logging.Logger;
13 import javax.swing.event.TableModelEvent;
14 import javax.swing.event.TableModelListener;
15 import javax.swing.table.TableModel;
21 public class Model implements TableModel {
23 private static final Logger log = Logger.getLogger(Model.class.getSimpleName());
24 private String[] sloupečky = {"Název", "Hodnota"};
25 private HashSet<TableModelListener> posluchače = new HashSet<TableModelListener>();
26 private UserDefinedFileAttributeView souborovýSystém;
27 private ArrayList<Atribut> atributy = new ArrayList<Atribut>();
29 public Model(File soubor) throws IOException {
30 Path cesta = soubor.toPath();
31 souborovýSystém = cesta.getFileAttributeView(UserDefinedFileAttributeView.class);
35 public int getRowCount() {
36 return atributy.size();
39 public int getColumnCount() {
40 return sloupečky.length;
43 public String getColumnName(int n) {
47 public Class<?> getColumnClass(int n) {
51 public boolean isCellEditable(int m, int n) {
55 public Object getValueAt(int m, int n) {
57 return atributy.get(m).getKlíč();
59 return atributy.get(m).getHodnota();
65 public void setValueAt(Object value, int m, int n) {
66 Atribut a = atributy.get(m);
69 /** Měníme klíč – název atributu */
70 String novýKlíč = String.valueOf(value.toString());
71 if (!novýKlíč.equals(a.getKlíč())) {
72 if (a.isPlatnýKlíč()) {
73 souborovýSystém.delete(a.getKlíč());
76 if (a.isPlatnáHodnota()) {
77 souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty());
81 /** Měníme hodnotu atributu */
82 a.setHodnota(String.valueOf(value.toString()));
83 if (a.isPlatnýKlíč() && a.isPlatnáHodnota()) {
84 souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty());
87 } catch (IOException e) {
88 log.log(Level.SEVERE, "Selhalo ukládání atributu na souborový systém", e);
92 public void addTableModelListener(TableModelListener l) {
96 public void removeTableModelListener(TableModelListener l) {
101 * @param m číslo řádku
102 * @return atribut, který se na něm nachází
104 public Atribut getAtribut(int m) {
105 return atributy.get(m);
108 public void přidejAtribut(Atribut a) {
110 upozorniPosluchače();
113 public void odeberAtribut(Atribut a) throws IOException {
115 if (a.isPlatnýKlíč()) {
116 souborovýSystém.delete(a.getKlíč());
118 upozorniPosluchače();
121 public final void načtiAtributy() throws IOException {
122 List<String> jménaAtributů = souborovýSystém.list();
124 for (String jménoAtributu : jménaAtributů) {
125 ByteBuffer hodnotaAtributu = ByteBuffer.allocate(souborovýSystém.size(jménoAtributu));
126 souborovýSystém.read(jménoAtributu, hodnotaAtributu);
127 atributy.add(new Atribut(jménoAtributu, hodnotaAtributu));
129 upozorniPosluchače();
132 private void upozorniPosluchače() {
133 for (TableModelListener p : posluchače) {
134 p.tableChanged(new TableModelEvent(this));