Upraveno pro OpenJDK verze: 1.7.0_147-icedtea / 21.0-b17.
$ java -version
java version "1.7.0_147-icedtea"
OpenJDK Runtime Environment (IcedTea7 2.0) (7~b147-2.0-0ubuntu0.11.10.1)
OpenJDK 64-Bit Server VM (build 21.0-b17, mixed mode)
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.nio.file.spi.FileSystemProvider;
10 import java.util.ArrayList;
11 import java.util.HashSet;
12 import java.util.List;
13 import java.util.ResourceBundle;
14 import java.util.logging.Level;
15 import java.util.logging.Logger;
16 import javax.swing.event.TableModelEvent;
17 import javax.swing.event.TableModelListener;
18 import javax.swing.table.TableModel;
24 public class Model implements TableModel {
26 private static final Logger log = Logger.getLogger(Model.class.getSimpleName());
27 private static final ResourceBundle překlady = ResourceBundle.getBundle("cz.frantovo.rozsireneAtributy.Překlady");
28 private String[] sloupečky = {překlady.getString("tabulka.název"), překlady.getString("tabulka.hodnota")};
29 private HashSet<TableModelListener> posluchače = new HashSet<TableModelListener>();
30 private UserDefinedFileAttributeView souborovýSystém;
31 private ArrayList<Atribut> atributy = new ArrayList<Atribut>();
33 public Model(File soubor) throws IOException {
34 Path cesta = soubor.toPath();
35 FileSystemProvider posyktovatelFS = cesta.getFileSystem().provider();
36 souborovýSystém = posyktovatelFS.getFileAttributeView(cesta, UserDefinedFileAttributeView.class);
40 public int getRowCount() {
41 return atributy.size();
44 public int getColumnCount() {
45 return sloupečky.length;
48 public String getColumnName(int n) {
52 public Class<?> getColumnClass(int n) {
56 public boolean isCellEditable(int m, int n) {
60 public Object getValueAt(int m, int n) {
62 return atributy.get(m).getKlíč();
64 return atributy.get(m).getHodnota();
70 public void setValueAt(Object hodnota, int m, int n) {
71 Atribut a = atributy.get(m);
74 /** Měníme klíč – název atributu */
75 String novýKlíč = String.valueOf(hodnota);
76 if (!novýKlíč.equals(a.getKlíč())) {
77 if (a.isPlatnýKlíč()) {
78 souborovýSystém.delete(a.getKlíč());
81 if (a.isPlatnýKlíč() && a.isPlatnáHodnota()) {
82 souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty());
86 /** Měníme hodnotu atributu */
87 a.setHodnota(String.valueOf(hodnota));
88 if (a.isPlatnýKlíč() && a.isPlatnáHodnota()) {
89 souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty());
92 } catch (IOException e) {
93 log.log(Level.SEVERE, "Selhalo ukládání atributu na souborový systém", e);
97 public void addTableModelListener(TableModelListener l) {
101 public void removeTableModelListener(TableModelListener l) {
102 posluchače.remove(l);
106 * @param m číslo řádku
107 * @return atribut, který se na něm nachází
109 public Atribut getAtribut(int m) {
110 return atributy.get(m);
113 public void přidejAtribut(Atribut a) {
115 upozorniPosluchače();
118 public void odeberAtribut(Atribut a) throws IOException {
120 if (a.isPlatnýKlíč()) {
121 souborovýSystém.delete(a.getKlíč());
123 upozorniPosluchače();
126 public final void načtiAtributy() throws IOException {
127 List<String> jménaAtributů = souborovýSystém.list();
129 for (String jménoAtributu : jménaAtributů) {
130 ByteBuffer hodnotaAtributu = ByteBuffer.allocate(souborovýSystém.size(jménoAtributu));
131 souborovýSystém.read(jménoAtributu, hodnotaAtributu);
132 atributy.add(new Atribut(jménoAtributu, hodnotaAtributu));
134 upozorniPosluchače();
137 private void upozorniPosluchače() {
138 for (TableModelListener p : posluchače) {
139 p.tableChanged(new TableModelEvent(this));