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