# HG changeset patch # User František Kučera # Date 1292440034 -3600 # Node ID 2b91eda684c9a219cfb98cb86c47b51cd43816ee # Parent fc93dae7a366c1e84a43e9097ce3f5a741bfac69 První GUI. diff -r fc93dae7a366 -r 2b91eda684c9 java/rozsirene-atributy/nbproject/project.properties --- a/java/rozsirene-atributy/nbproject/project.properties Wed Dec 15 19:18:08 2010 +0100 +++ b/java/rozsirene-atributy/nbproject/project.properties Wed Dec 15 20:07:14 2010 +0100 @@ -63,7 +63,7 @@ jnlp.mixed.code=defaut jnlp.offline-allowed=false jnlp.signed=false -main.class=cz.frantovo.rozsireneAtributy.Pokusn\u00fdV\u00fdpis +main.class=cz.frantovo.rozsireneAtributy.Start\u00e9r manifest.file=manifest.mf meta.inf.dir=${src.dir}/META-INF platform.active=default_platform diff -r fc93dae7a366 -r 2b91eda684c9 java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java Wed Dec 15 20:07:14 2010 +0100 @@ -0,0 +1,28 @@ +package cz.frantovo.rozsireneAtributy; + +public class Atribut { + + private String klic; + private String hodnota; + + public Atribut(String klic, String hodnota) { + this.klic = klic; + this.hodnota = hodnota; + } + + public String getKlic() { + return klic; + } + + public void setKlic(String klic) { + this.klic = klic; + } + + public String getHodnota() { + return hodnota; + } + + public void setHodnota(String hodnota) { + this.hodnota = hodnota; + } +} diff -r fc93dae7a366 -r 2b91eda684c9 java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java Wed Dec 15 20:07:14 2010 +0100 @@ -0,0 +1,113 @@ +package cz.frantovo.rozsireneAtributy; + +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.nio.file.Path; +import java.nio.file.attribute.UserDefinedFileAttributeView; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.logging.Logger; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.table.TableModel; + +/** + * + * @author fiki + */ +public class Model implements TableModel { + + private static final Logger log = Logger.getLogger(Model.class.getSimpleName()); + private String[] sloupečky = {"Název", "Hodnota"}; + private HashSet posluchače = new HashSet(); + private UserDefinedFileAttributeView pohled; + private ArrayList atributy = new ArrayList(); + + public Model(File soubor) throws IOException { + Path cesta = soubor.toPath(); + pohled = cesta.getFileAttributeView(UserDefinedFileAttributeView.class); + načtiAtributy(); + } + + public int getRowCount() { + return atributy.size(); + } + + public int getColumnCount() { + return sloupečky.length; + } + + public String getColumnName(int n) { + return sloupečky[n]; + } + + public Class getColumnClass(int n) { + return String.class; + } + + public boolean isCellEditable(int m, int n) { + return true; + } + + public Object getValueAt(int m, int n) { + if (n == 0) { + return atributy.get(m).getKlic(); + } else if (n == 1) { + return atributy.get(m).getHodnota(); + } else { + return null; + } + } + + public void setValueAt(Object value, int m, int n) { + if (n == 0) { + atributy.get(m).setKlic(String.valueOf(value.toString())); + /** TODO: uložit na souborový systém */ + } else if (n == 1) { + atributy.get(m).setHodnota(String.valueOf(value.toString())); + /** TODO: uložit na souborový systém */ + } + } + + public void addTableModelListener(TableModelListener l) { + posluchače.add(l); + } + + public void removeTableModelListener(TableModelListener l) { + posluchače.remove(l); + } + + public void přidejŘádek() { + //atributy.add(new Atribut()); + //upozorniPosluchače(); + } + + public void odeberŘádek(int m) { + //atributy.remove(m); + //upozorniPosluchače(); + } + + private void načtiAtributy() throws IOException { + List jménaAtributů = pohled.list(); + for (String jménoAtributu : jménaAtributů) { + ByteBuffer bajty = ByteBuffer.allocate(pohled.size(jménoAtributu)); + pohled.read(jménoAtributu, bajty); + String hodnotaAtributu = dekóduj(bajty); + atributy.add(new Atribut(jménoAtributu, hodnotaAtributu)); + } + } + + private static String dekóduj(ByteBuffer bajty) { + bajty.flip(); + return Charset.defaultCharset().decode(bajty).toString(); + } + + private void upozorniPosluchače() { + for (TableModelListener p : posluchače) { + p.tableChanged(new TableModelEvent(this)); + } + } +} diff -r fc93dae7a366 -r 2b91eda684c9 java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/PokusnýVýpis.java --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/PokusnýVýpis.java Wed Dec 15 19:18:08 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -package cz.frantovo.rozsireneAtributy; - -import java.io.File; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.charset.Charset; -import java.nio.file.Path; -import java.nio.file.attribute.UserDefinedFileAttributeView; -import java.util.List; - -/** - * http://freedesktop.org/wiki/CommonExtendedAttributes - * http://download.oracle.com/javase/tutorial/essential/io/fileAttr.html#user - * http://today.java.net/pub/a/today/2008/07/03/jsr-203-new-file-apis.html#so-what-is-a-path-really - * - * $ setfattr -n user.fiki.pozdrav -v 'Dobrý den!' pokus.txt - * - * @author fiki - */ -public class PokusnýVýpis { - - /** - * Vypíše rozšířené atributy souboru. - * @param args pole s jedním prvkem – názvem souboru - * @throws IOException - */ - public static void main(String[] args) throws IOException { - File soubor = new File(args[0]); - Path cesta = soubor.toPath(); - UserDefinedFileAttributeView pohled = cesta.getFileAttributeView(UserDefinedFileAttributeView.class); - List jménaAtributů = pohled.list(); - for (String jménoAtributu : jménaAtributů) { - ByteBuffer bajty = ByteBuffer.allocate(pohled.size(jménoAtributu)); - pohled.read(jménoAtributu, bajty); - String hodnotaAtributu = dekóduj(bajty); - System.out.println(jménoAtributu + " = " + hodnotaAtributu); - } - } - - private static String dekóduj(ByteBuffer bajty) { - bajty.flip(); - return Charset.defaultCharset().decode(bajty).toString(); - } -} diff -r fc93dae7a366 -r 2b91eda684c9 java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Startér.java --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Startér.java Wed Dec 15 19:18:08 2010 +0100 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Startér.java Wed Dec 15 20:07:14 2010 +0100 @@ -1,13 +1,52 @@ package cz.frantovo.rozsireneAtributy; +import cz.frantovo.rozsireneAtributy.gui.Panel; +import java.awt.BorderLayout; +import java.io.File; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JFrame; + /** * Spouštěč programu + * + * http://freedesktop.org/wiki/CommonExtendedAttributes + * http://download.oracle.com/javase/tutorial/essential/io/fileAttr.html#user + * http://today.java.net/pub/a/today/2008/07/03/jsr-203-new-file-apis.html#so-what-is-a-path-really + * + * $ setfattr -n "user.fiki.pozdrav" -v 'Dobrý den!' pokus.txt + * (v javě pak pracujeme s klíči bez předpony „user.“) + * * @author fiki */ public class Startér { - public static void main(String[] args) { - System.err.println("ještě není implementované…"); - System.exit(1); + private static final Logger log = Logger.getLogger(Startér.class.getSimpleName()); + + public static void main(String[] args) throws IOException { + + if (args.length == 1) { + File soubor = new File(args[0]); + + log.log(Level.INFO, "Pracuji se souborem: {0}", soubor); + + Model model = new Model(soubor); + + JFrame f = new JFrame(); + Panel p = new Panel(model); + + f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + f.setTitle("Rozšířené stributy souboru: " + soubor); + f.setLayout(new BorderLayout()); + f.add(p, BorderLayout.CENTER); + + f.setSize(640, 240); + f.setLocationRelativeTo(null); + f.setVisible(true); + } else { + log.log(Level.SEVERE, "Chyba: Očekávám právě jeden parametr – název souboru."); + System.exit(1); + } } } diff -r fc93dae7a366 -r 2b91eda684c9 java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.form --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.form Wed Dec 15 20:07:14 2010 +0100 @@ -0,0 +1,48 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
diff -r fc93dae7a366 -r 2b91eda684c9 java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.java Wed Dec 15 20:07:14 2010 +0100 @@ -0,0 +1,57 @@ +package cz.frantovo.rozsireneAtributy.gui; + +import javax.swing.table.TableModel; + +/** + * + * @author fiki + */ +public class Panel extends javax.swing.JPanel { + + private TableModel model; + + public Panel(TableModel model) { + this.model = model; + initComponents(); + tabulka.setModel(model); + } + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + scroll = new javax.swing.JScrollPane(); + tabulka = new javax.swing.JTable(); + + tabulka.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null} + }, + new String [] { + "Title 1", "Title 2", "Title 3", "Title 4" + } + )); + scroll.setViewportView(tabulka); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 447, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 316, Short.MAX_VALUE) + ); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JScrollPane scroll; + private javax.swing.JTable tabulka; + // End of variables declaration//GEN-END:variables + +}