java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java
author František Kučera <franta-hg@frantovo.cz>
Wed Dec 15 20:07:14 2010 +0100 (2010-12-15)
changeset 6 734f104f2869
child 9 a2e91b20198b
permissions -rw-r--r--
První GUI.
franta-hg@6
     1
package cz.frantovo.rozsireneAtributy;
franta-hg@6
     2
franta-hg@6
     3
import java.io.File;
franta-hg@6
     4
import java.io.IOException;
franta-hg@6
     5
import java.nio.ByteBuffer;
franta-hg@6
     6
import java.nio.charset.Charset;
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@6
    12
import java.util.logging.Logger;
franta-hg@6
    13
import javax.swing.event.TableModelEvent;
franta-hg@6
    14
import javax.swing.event.TableModelListener;
franta-hg@6
    15
import javax.swing.table.TableModel;
franta-hg@6
    16
franta-hg@6
    17
/**
franta-hg@6
    18
 *
franta-hg@6
    19
 * @author fiki
franta-hg@6
    20
 */
franta-hg@6
    21
public class Model implements TableModel {
franta-hg@6
    22
franta-hg@6
    23
	private static final Logger log = Logger.getLogger(Model.class.getSimpleName());
franta-hg@6
    24
	private String[] sloupečky = {"Název", "Hodnota"};
franta-hg@6
    25
	private HashSet<TableModelListener> posluchače = new HashSet<TableModelListener>();
franta-hg@6
    26
	private UserDefinedFileAttributeView pohled;
franta-hg@6
    27
	private ArrayList<Atribut> atributy = new ArrayList<Atribut>();
franta-hg@6
    28
franta-hg@6
    29
	public Model(File soubor) throws IOException {
franta-hg@6
    30
		Path cesta = soubor.toPath();
franta-hg@6
    31
		pohled = cesta.getFileAttributeView(UserDefinedFileAttributeView.class);
franta-hg@6
    32
		načtiAtributy();
franta-hg@6
    33
	}
franta-hg@6
    34
franta-hg@6
    35
	public int getRowCount() {
franta-hg@6
    36
		return atributy.size();
franta-hg@6
    37
	}
franta-hg@6
    38
franta-hg@6
    39
	public int getColumnCount() {
franta-hg@6
    40
		return sloupečky.length;
franta-hg@6
    41
	}
franta-hg@6
    42
franta-hg@6
    43
	public String getColumnName(int n) {
franta-hg@6
    44
		return sloupečky[n];
franta-hg@6
    45
	}
franta-hg@6
    46
franta-hg@6
    47
	public Class<?> getColumnClass(int n) {
franta-hg@6
    48
		return String.class;
franta-hg@6
    49
	}
franta-hg@6
    50
franta-hg@6
    51
	public boolean isCellEditable(int m, int n) {
franta-hg@6
    52
		return true;
franta-hg@6
    53
	}
franta-hg@6
    54
franta-hg@6
    55
	public Object getValueAt(int m, int n) {
franta-hg@6
    56
		if (n == 0) {
franta-hg@6
    57
			return atributy.get(m).getKlic();
franta-hg@6
    58
		} else if (n == 1) {
franta-hg@6
    59
			return atributy.get(m).getHodnota();
franta-hg@6
    60
		} else {
franta-hg@6
    61
			return null;
franta-hg@6
    62
		}
franta-hg@6
    63
	}
franta-hg@6
    64
franta-hg@6
    65
	public void setValueAt(Object value, int m, int n) {
franta-hg@6
    66
		if (n == 0) {
franta-hg@6
    67
			atributy.get(m).setKlic(String.valueOf(value.toString()));
franta-hg@6
    68
			/** TODO: uložit na souborový systém */
franta-hg@6
    69
		} else if (n == 1) {
franta-hg@6
    70
			atributy.get(m).setHodnota(String.valueOf(value.toString()));
franta-hg@6
    71
			/** TODO: uložit na souborový systém */
franta-hg@6
    72
		}
franta-hg@6
    73
	}
franta-hg@6
    74
franta-hg@6
    75
	public void addTableModelListener(TableModelListener l) {
franta-hg@6
    76
		posluchače.add(l);
franta-hg@6
    77
	}
franta-hg@6
    78
franta-hg@6
    79
	public void removeTableModelListener(TableModelListener l) {
franta-hg@6
    80
		posluchače.remove(l);
franta-hg@6
    81
	}
franta-hg@6
    82
franta-hg@6
    83
	public void přidejŘádek() {
franta-hg@6
    84
		//atributy.add(new Atribut());
franta-hg@6
    85
		//upozorniPosluchače();
franta-hg@6
    86
	}
franta-hg@6
    87
franta-hg@6
    88
	public void odeberŘádek(int m) {
franta-hg@6
    89
		//atributy.remove(m);
franta-hg@6
    90
		//upozorniPosluchače();
franta-hg@6
    91
	}
franta-hg@6
    92
franta-hg@6
    93
	private void načtiAtributy() throws IOException {
franta-hg@6
    94
		List<String> jménaAtributů = pohled.list();
franta-hg@6
    95
		for (String jménoAtributu : jménaAtributů) {
franta-hg@6
    96
			ByteBuffer bajty = ByteBuffer.allocate(pohled.size(jménoAtributu));
franta-hg@6
    97
			pohled.read(jménoAtributu, bajty);
franta-hg@6
    98
			String hodnotaAtributu = dekóduj(bajty);
franta-hg@6
    99
			atributy.add(new Atribut(jménoAtributu, hodnotaAtributu));
franta-hg@6
   100
		}
franta-hg@6
   101
	}
franta-hg@6
   102
franta-hg@6
   103
	private static String dekóduj(ByteBuffer bajty) {
franta-hg@6
   104
		bajty.flip();
franta-hg@6
   105
		return Charset.defaultCharset().decode(bajty).toString();
franta-hg@6
   106
	}
franta-hg@6
   107
franta-hg@6
   108
	private void upozorniPosluchače() {
franta-hg@6
   109
		for (TableModelListener p : posluchače) {
franta-hg@6
   110
			p.tableChanged(new TableModelEvent(this));
franta-hg@6
   111
		}
franta-hg@6
   112
	}
franta-hg@6
   113
}