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