Přesun TableModelu do GUI balíčku.
1 package cz.frantovo.rozsireneAtributy.gui;
3 import cz.frantovo.rozsireneAtributy.Atribut;
5 import java.io.IOException;
6 import java.nio.ByteBuffer;
7 import java.nio.file.Path;
8 import java.nio.file.attribute.UserDefinedFileAttributeView;
9 import java.util.ArrayList;
10 import java.util.HashSet;
11 import java.util.List;
12 import java.util.logging.Level;
13 import java.util.logging.Logger;
14 import javax.swing.event.TableModelEvent;
15 import javax.swing.event.TableModelListener;
16 import javax.swing.table.TableModel;
22 public class Model implements TableModel {
24 private static final Logger log = Logger.getLogger(Model.class.getSimpleName());
25 private String[] sloupečky = {"Název", "Hodnota"};
26 private HashSet<TableModelListener> posluchače = new HashSet<TableModelListener>();
27 private UserDefinedFileAttributeView souborovýSystém;
28 private ArrayList<Atribut> atributy = new ArrayList<Atribut>();
30 public Model(File soubor) throws IOException {
31 Path cesta = soubor.toPath();
32 souborovýSystém = cesta.getFileAttributeView(UserDefinedFileAttributeView.class);
36 public int getRowCount() {
37 return atributy.size();
40 public int getColumnCount() {
41 return sloupečky.length;
44 public String getColumnName(int n) {
48 public Class<?> getColumnClass(int n) {
52 public boolean isCellEditable(int m, int n) {
56 public Object getValueAt(int m, int n) {
58 return atributy.get(m).getKlíč();
60 return atributy.get(m).getHodnota();
66 public void setValueAt(Object value, int m, int n) {
67 Atribut a = atributy.get(m);
70 /** Měníme klíč – název atributu */
71 String novýKlíč = String.valueOf(value.toString());
72 if (!novýKlíč.equals(a.getKlíč())) {
73 if (a.isPlatnýKlíč()) {
74 souborovýSystém.delete(a.getKlíč());
77 if (a.isPlatnáHodnota()) {
78 souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty());
82 /** Měníme hodnotu atributu */
83 a.setHodnota(String.valueOf(value.toString()));
84 if (a.isPlatnýKlíč() && a.isPlatnáHodnota()) {
85 souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty());
88 } catch (IOException e) {
89 log.log(Level.SEVERE, "Selhalo ukládání atributu na souborový systém", e);
93 public void addTableModelListener(TableModelListener l) {
97 public void removeTableModelListener(TableModelListener l) {
102 * @param m číslo řádku
103 * @return atribut, který se na něm nachází
105 public Atribut getAtribut(int m) {
106 return atributy.get(m);
109 public void přidejAtribut(Atribut a) {
111 upozorniPosluchače();
114 public void odeberAtribut(Atribut a) throws IOException {
116 if (a.isPlatnýKlíč()) {
117 souborovýSystém.delete(a.getKlíč());
119 upozorniPosluchače();
122 public final void načtiAtributy() throws IOException {
123 List<String> jménaAtributů = souborovýSystém.list();
125 for (String jménoAtributu : jménaAtributů) {
126 ByteBuffer hodnotaAtributu = ByteBuffer.allocate(souborovýSystém.size(jménoAtributu));
127 souborovýSystém.read(jménoAtributu, hodnotaAtributu);
128 atributy.add(new Atribut(jménoAtributu, hodnotaAtributu));
130 upozorniPosluchače();
133 private void upozorniPosluchače() {
134 for (TableModelListener p : posluchače) {
135 p.tableChanged(new TableModelEvent(this));