java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Model.java
author František Kučera <franta-hg@frantovo.cz>
Fri Dec 30 12:37:30 2011 +0100 (2011-12-30)
changeset 17 75b7d41b7428
parent 15 8854e172a18f
child 19 c20edbed09c3
permissions -rw-r--r--
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)
franta-hg@13
     1
package cz.frantovo.rozsireneAtributy.gui;
franta-hg@6
     2
franta-hg@13
     3
import cz.frantovo.rozsireneAtributy.Atribut;
franta-hg@6
     4
import java.io.File;
franta-hg@6
     5
import java.io.IOException;
franta-hg@6
     6
import java.nio.ByteBuffer;
franta-hg@6
     7
import java.nio.file.Path;
franta-hg@6
     8
import java.nio.file.attribute.UserDefinedFileAttributeView;
franta-hg@17
     9
import java.nio.file.spi.FileSystemProvider;
franta-hg@6
    10
import java.util.ArrayList;
franta-hg@6
    11
import java.util.HashSet;
franta-hg@6
    12
import java.util.List;
franta-hg@15
    13
import java.util.ResourceBundle;
franta-hg@9
    14
import java.util.logging.Level;
franta-hg@6
    15
import java.util.logging.Logger;
franta-hg@6
    16
import javax.swing.event.TableModelEvent;
franta-hg@6
    17
import javax.swing.event.TableModelListener;
franta-hg@6
    18
import javax.swing.table.TableModel;
franta-hg@6
    19
franta-hg@6
    20
/**
franta-hg@6
    21
 *
franta-hg@6
    22
 * @author fiki
franta-hg@6
    23
 */
franta-hg@6
    24
public class Model implements TableModel {
franta-hg@6
    25
franta-hg@6
    26
	private static final Logger log = Logger.getLogger(Model.class.getSimpleName());
franta-hg@15
    27
	private static final ResourceBundle překlady = ResourceBundle.getBundle("cz.frantovo.rozsireneAtributy.Překlady");
franta-hg@15
    28
	private String[] sloupečky = {překlady.getString("tabulka.název"), překlady.getString("tabulka.hodnota")};
franta-hg@6
    29
	private HashSet<TableModelListener> posluchače = new HashSet<TableModelListener>();
franta-hg@11
    30
	private UserDefinedFileAttributeView souborovýSystém;
franta-hg@6
    31
	private ArrayList<Atribut> atributy = new ArrayList<Atribut>();
franta-hg@6
    32
franta-hg@6
    33
	public Model(File soubor) throws IOException {
franta-hg@6
    34
		Path cesta = soubor.toPath();
franta-hg@17
    35
		FileSystemProvider posyktovatelFS = cesta.getFileSystem().provider();
franta-hg@17
    36
		souborovýSystém = posyktovatelFS.getFileAttributeView(cesta, UserDefinedFileAttributeView.class);
franta-hg@6
    37
		načtiAtributy();
franta-hg@6
    38
	}
franta-hg@6
    39
franta-hg@6
    40
	public int getRowCount() {
franta-hg@6
    41
		return atributy.size();
franta-hg@6
    42
	}
franta-hg@6
    43
franta-hg@6
    44
	public int getColumnCount() {
franta-hg@6
    45
		return sloupečky.length;
franta-hg@6
    46
	}
franta-hg@6
    47
franta-hg@6
    48
	public String getColumnName(int n) {
franta-hg@6
    49
		return sloupečky[n];
franta-hg@6
    50
	}
franta-hg@6
    51
franta-hg@6
    52
	public Class<?> getColumnClass(int n) {
franta-hg@6
    53
		return String.class;
franta-hg@6
    54
	}
franta-hg@6
    55
franta-hg@6
    56
	public boolean isCellEditable(int m, int n) {
franta-hg@6
    57
		return true;
franta-hg@6
    58
	}
franta-hg@6
    59
franta-hg@6
    60
	public Object getValueAt(int m, int n) {
franta-hg@6
    61
		if (n == 0) {
franta-hg@11
    62
			return atributy.get(m).getKlíč();
franta-hg@6
    63
		} else if (n == 1) {
franta-hg@6
    64
			return atributy.get(m).getHodnota();
franta-hg@6
    65
		} else {
franta-hg@6
    66
			return null;
franta-hg@6
    67
		}
franta-hg@6
    68
	}
franta-hg@6
    69
franta-hg@14
    70
	public void setValueAt(Object hodnota, int m, int n) {
franta-hg@9
    71
		Atribut a = atributy.get(m);
franta-hg@9
    72
		try {
franta-hg@9
    73
			if (n == 0) {
franta-hg@9
    74
				/** Měníme klíč – název atributu */
franta-hg@14
    75
				String novýKlíč = String.valueOf(hodnota);
franta-hg@11
    76
				if (!novýKlíč.equals(a.getKlíč())) {
franta-hg@11
    77
					if (a.isPlatnýKlíč()) {
franta-hg@11
    78
						souborovýSystém.delete(a.getKlíč());
franta-hg@10
    79
					}
franta-hg@11
    80
					a.setKlíč(novýKlíč);
franta-hg@14
    81
					if (a.isPlatnýKlíč() && a.isPlatnáHodnota()) {
franta-hg@11
    82
						souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty());
franta-hg@10
    83
					}
franta-hg@9
    84
				}
franta-hg@9
    85
			} else if (n == 1) {
franta-hg@9
    86
				/** Měníme hodnotu atributu */
franta-hg@14
    87
				a.setHodnota(String.valueOf(hodnota));
franta-hg@12
    88
				if (a.isPlatnýKlíč() && a.isPlatnáHodnota()) {
franta-hg@12
    89
					souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty());
franta-hg@12
    90
				}
franta-hg@9
    91
			}
franta-hg@9
    92
		} catch (IOException e) {
franta-hg@9
    93
			log.log(Level.SEVERE, "Selhalo ukládání atributu na souborový systém", e);
franta-hg@6
    94
		}
franta-hg@6
    95
	}
franta-hg@6
    96
franta-hg@6
    97
	public void addTableModelListener(TableModelListener l) {
franta-hg@6
    98
		posluchače.add(l);
franta-hg@6
    99
	}
franta-hg@6
   100
franta-hg@6
   101
	public void removeTableModelListener(TableModelListener l) {
franta-hg@6
   102
		posluchače.remove(l);
franta-hg@6
   103
	}
franta-hg@6
   104
franta-hg@10
   105
	/**
franta-hg@10
   106
	 * @param m číslo řádku
franta-hg@10
   107
	 * @return atribut, který se na něm nachází
franta-hg@10
   108
	 */
franta-hg@10
   109
	public Atribut getAtribut(int m) {
franta-hg@10
   110
		return atributy.get(m);
franta-hg@10
   111
	}
franta-hg@10
   112
franta-hg@9
   113
	public void přidejAtribut(Atribut a) {
franta-hg@9
   114
		atributy.add(a);
franta-hg@9
   115
		upozorniPosluchače();
franta-hg@6
   116
	}
franta-hg@6
   117
franta-hg@10
   118
	public void odeberAtribut(Atribut a) throws IOException {
franta-hg@9
   119
		atributy.remove(a);
franta-hg@11
   120
		if (a.isPlatnýKlíč()) {
franta-hg@11
   121
			souborovýSystém.delete(a.getKlíč());
franta-hg@11
   122
		}
franta-hg@9
   123
		upozorniPosluchače();
franta-hg@6
   124
	}
franta-hg@6
   125
franta-hg@10
   126
	public final void načtiAtributy() throws IOException {
franta-hg@11
   127
		List<String> jménaAtributů = souborovýSystém.list();
franta-hg@10
   128
		atributy.clear();
franta-hg@6
   129
		for (String jménoAtributu : jménaAtributů) {
franta-hg@11
   130
			ByteBuffer hodnotaAtributu = ByteBuffer.allocate(souborovýSystém.size(jménoAtributu));
franta-hg@11
   131
			souborovýSystém.read(jménoAtributu, hodnotaAtributu);
franta-hg@6
   132
			atributy.add(new Atribut(jménoAtributu, hodnotaAtributu));
franta-hg@6
   133
		}
franta-hg@9
   134
		upozorniPosluchače();
franta-hg@6
   135
	}
franta-hg@6
   136
franta-hg@6
   137
	private void upozorniPosluchače() {
franta-hg@6
   138
		for (TableModelListener p : posluchače) {
franta-hg@6
   139
			p.tableChanged(new TableModelEvent(this));
franta-hg@6
   140
		}
franta-hg@6
   141
	}
franta-hg@6
   142
}