franta-hg@6: package cz.frantovo.rozsireneAtributy; franta-hg@6: franta-hg@6: import java.io.File; franta-hg@6: import java.io.IOException; franta-hg@6: import java.nio.ByteBuffer; franta-hg@6: import java.nio.charset.Charset; franta-hg@6: import java.nio.file.Path; franta-hg@6: import java.nio.file.attribute.UserDefinedFileAttributeView; franta-hg@6: import java.util.ArrayList; franta-hg@6: import java.util.HashSet; franta-hg@6: import java.util.List; franta-hg@6: import java.util.logging.Logger; franta-hg@6: import javax.swing.event.TableModelEvent; franta-hg@6: import javax.swing.event.TableModelListener; franta-hg@6: import javax.swing.table.TableModel; franta-hg@6: franta-hg@6: /** franta-hg@6: * franta-hg@6: * @author fiki franta-hg@6: */ franta-hg@6: public class Model implements TableModel { franta-hg@6: franta-hg@6: private static final Logger log = Logger.getLogger(Model.class.getSimpleName()); franta-hg@6: private String[] sloupečky = {"Název", "Hodnota"}; franta-hg@6: private HashSet posluchače = new HashSet(); franta-hg@6: private UserDefinedFileAttributeView pohled; franta-hg@6: private ArrayList atributy = new ArrayList(); franta-hg@6: franta-hg@6: public Model(File soubor) throws IOException { franta-hg@6: Path cesta = soubor.toPath(); franta-hg@6: pohled = cesta.getFileAttributeView(UserDefinedFileAttributeView.class); franta-hg@6: načtiAtributy(); franta-hg@6: } franta-hg@6: franta-hg@6: public int getRowCount() { franta-hg@6: return atributy.size(); franta-hg@6: } franta-hg@6: franta-hg@6: public int getColumnCount() { franta-hg@6: return sloupečky.length; franta-hg@6: } franta-hg@6: franta-hg@6: public String getColumnName(int n) { franta-hg@6: return sloupečky[n]; franta-hg@6: } franta-hg@6: franta-hg@6: public Class getColumnClass(int n) { franta-hg@6: return String.class; franta-hg@6: } franta-hg@6: franta-hg@6: public boolean isCellEditable(int m, int n) { franta-hg@6: return true; franta-hg@6: } franta-hg@6: franta-hg@6: public Object getValueAt(int m, int n) { franta-hg@6: if (n == 0) { franta-hg@6: return atributy.get(m).getKlic(); franta-hg@6: } else if (n == 1) { franta-hg@6: return atributy.get(m).getHodnota(); franta-hg@6: } else { franta-hg@6: return null; franta-hg@6: } franta-hg@6: } franta-hg@6: franta-hg@6: public void setValueAt(Object value, int m, int n) { franta-hg@6: if (n == 0) { franta-hg@6: atributy.get(m).setKlic(String.valueOf(value.toString())); franta-hg@6: /** TODO: uložit na souborový systém */ franta-hg@6: } else if (n == 1) { franta-hg@6: atributy.get(m).setHodnota(String.valueOf(value.toString())); franta-hg@6: /** TODO: uložit na souborový systém */ franta-hg@6: } franta-hg@6: } franta-hg@6: franta-hg@6: public void addTableModelListener(TableModelListener l) { franta-hg@6: posluchače.add(l); franta-hg@6: } franta-hg@6: franta-hg@6: public void removeTableModelListener(TableModelListener l) { franta-hg@6: posluchače.remove(l); franta-hg@6: } franta-hg@6: franta-hg@6: public void přidejŘádek() { franta-hg@6: //atributy.add(new Atribut()); franta-hg@6: //upozorniPosluchače(); franta-hg@6: } franta-hg@6: franta-hg@6: public void odeberŘádek(int m) { franta-hg@6: //atributy.remove(m); franta-hg@6: //upozorniPosluchače(); franta-hg@6: } franta-hg@6: franta-hg@6: private void načtiAtributy() throws IOException { franta-hg@6: List jménaAtributů = pohled.list(); franta-hg@6: for (String jménoAtributu : jménaAtributů) { franta-hg@6: ByteBuffer bajty = ByteBuffer.allocate(pohled.size(jménoAtributu)); franta-hg@6: pohled.read(jménoAtributu, bajty); franta-hg@6: String hodnotaAtributu = dekóduj(bajty); franta-hg@6: atributy.add(new Atribut(jménoAtributu, hodnotaAtributu)); franta-hg@6: } franta-hg@6: } franta-hg@6: franta-hg@6: private static String dekóduj(ByteBuffer bajty) { franta-hg@6: bajty.flip(); franta-hg@6: return Charset.defaultCharset().decode(bajty).toString(); franta-hg@6: } franta-hg@6: franta-hg@6: private void upozorniPosluchače() { franta-hg@6: for (TableModelListener p : posluchače) { franta-hg@6: p.tableChanged(new TableModelEvent(this)); franta-hg@6: } franta-hg@6: } franta-hg@6: }