Lokalizace + anglický překlad.
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.ResourceBundle;
13 import java.util.logging.Level;
14 import java.util.logging.Logger;
15 import javax.swing.event.TableModelEvent;
16 import javax.swing.event.TableModelListener;
17 import javax.swing.table.TableModel;
23 public class Model implements TableModel {
25 private static final Logger log = Logger.getLogger(Model.class.getSimpleName());
26 private static final ResourceBundle překlady = ResourceBundle.getBundle("cz.frantovo.rozsireneAtributy.Překlady");
27 private String[] sloupečky = {překlady.getString("tabulka.název"), překlady.getString("tabulka.hodnota")};
28 private HashSet<TableModelListener> posluchače = new HashSet<TableModelListener>();
29 private UserDefinedFileAttributeView souborovýSystém;
30 private ArrayList<Atribut> atributy = new ArrayList<Atribut>();
32 public Model(File soubor) throws IOException {
33 Path cesta = soubor.toPath();
34 souborovýSystém = cesta.getFileAttributeView(UserDefinedFileAttributeView.class);
38 public int getRowCount() {
39 return atributy.size();
42 public int getColumnCount() {
43 return sloupečky.length;
46 public String getColumnName(int n) {
50 public Class<?> getColumnClass(int n) {
54 public boolean isCellEditable(int m, int n) {
58 public Object getValueAt(int m, int n) {
60 return atributy.get(m).getKlíč();
62 return atributy.get(m).getHodnota();
68 public void setValueAt(Object hodnota, int m, int n) {
69 Atribut a = atributy.get(m);
72 /** Měníme klíč – název atributu */
73 String novýKlíč = String.valueOf(hodnota);
74 if (!novýKlíč.equals(a.getKlíč())) {
75 if (a.isPlatnýKlíč()) {
76 souborovýSystém.delete(a.getKlíč());
79 if (a.isPlatnýKlíč() && a.isPlatnáHodnota()) {
80 souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty());
84 /** Měníme hodnotu atributu */
85 a.setHodnota(String.valueOf(hodnota));
86 if (a.isPlatnýKlíč() && a.isPlatnáHodnota()) {
87 souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty());
90 } catch (IOException e) {
91 log.log(Level.SEVERE, "Selhalo ukládání atributu na souborový systém", e);
95 public void addTableModelListener(TableModelListener l) {
99 public void removeTableModelListener(TableModelListener l) {
100 posluchače.remove(l);
104 * @param m číslo řádku
105 * @return atribut, který se na něm nachází
107 public Atribut getAtribut(int m) {
108 return atributy.get(m);
111 public void přidejAtribut(Atribut a) {
113 upozorniPosluchače();
116 public void odeberAtribut(Atribut a) throws IOException {
118 if (a.isPlatnýKlíč()) {
119 souborovýSystém.delete(a.getKlíč());
121 upozorniPosluchače();
124 public final void načtiAtributy() throws IOException {
125 List<String> jménaAtributů = souborovýSystém.list();
127 for (String jménoAtributu : jménaAtributů) {
128 ByteBuffer hodnotaAtributu = ByteBuffer.allocate(souborovýSystém.size(jménoAtributu));
129 souborovýSystém.read(jménoAtributu, hodnotaAtributu);
130 atributy.add(new Atribut(jménoAtributu, hodnotaAtributu));
132 upozorniPosluchače();
135 private void upozorniPosluchače() {
136 for (TableModelListener p : posluchače) {
137 p.tableChanged(new TableModelEvent(this));