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-- |
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 |
} |