Klávesové zkratky, kontroly, čeština.
1.1 --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java Wed Dec 15 23:29:14 2010 +0100
1.2 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Atribut.java Wed Dec 15 23:58:34 2010 +0100
1.3 @@ -5,28 +5,46 @@
1.4
1.5 public class Atribut {
1.6
1.7 - private String klic;
1.8 + private String klíč;
1.9 private String hodnota;
1.10
1.11 - public Atribut(String klic, String hodnota) {
1.12 - this.klic = klic;
1.13 + public Atribut(String klíč, String hodnota) {
1.14 + this.klíč = klíč;
1.15 this.hodnota = hodnota;
1.16 }
1.17
1.18 - public Atribut(String klic, ByteBuffer hodnota) {
1.19 - this.klic = klic;
1.20 + public Atribut(String klíč, ByteBuffer hodnota) {
1.21 + this.klíč = klíč;
1.22 setHodnota(hodnota);
1.23 }
1.24
1.25 public Atribut() {
1.26 }
1.27
1.28 - public String getKlic() {
1.29 - return klic;
1.30 + public String getKlíč() {
1.31 + return klíč;
1.32 }
1.33
1.34 - public void setKlic(String klic) {
1.35 - this.klic = klic;
1.36 + public void setKlíč(String klíč) {
1.37 + this.klíč = klíč;
1.38 + }
1.39 +
1.40 + /**
1.41 + * Název atributu musí být nenulový a mít nějakou délku, aby šel uložit
1.42 + * TODO: další kontroly?
1.43 + * @return jestli je platný
1.44 + */
1.45 + public boolean isPlatnýKlíč() {
1.46 + return klíč != null && klíč.length() > 0;
1.47 + }
1.48 +
1.49 + /**
1.50 + * nulová hodnota → smazání atributu
1.51 + * (ale může být prázdný řetězec)
1.52 + * @return jestli je platná
1.53 + */
1.54 + public boolean isPlatnáHodnota() {
1.55 + return hodnota != null;
1.56 }
1.57
1.58 public String getHodnota() {
2.1 --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java Wed Dec 15 23:29:14 2010 +0100
2.2 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Model.java Wed Dec 15 23:58:34 2010 +0100
2.3 @@ -23,12 +23,12 @@
2.4 private static final Logger log = Logger.getLogger(Model.class.getSimpleName());
2.5 private String[] sloupečky = {"Název", "Hodnota"};
2.6 private HashSet<TableModelListener> posluchače = new HashSet<TableModelListener>();
2.7 - private UserDefinedFileAttributeView souborovySystem;
2.8 + private UserDefinedFileAttributeView souborovýSystém;
2.9 private ArrayList<Atribut> atributy = new ArrayList<Atribut>();
2.10
2.11 public Model(File soubor) throws IOException {
2.12 Path cesta = soubor.toPath();
2.13 - souborovySystem = cesta.getFileAttributeView(UserDefinedFileAttributeView.class);
2.14 + souborovýSystém = cesta.getFileAttributeView(UserDefinedFileAttributeView.class);
2.15 načtiAtributy();
2.16 }
2.17
2.18 @@ -54,7 +54,7 @@
2.19
2.20 public Object getValueAt(int m, int n) {
2.21 if (n == 0) {
2.22 - return atributy.get(m).getKlic();
2.23 + return atributy.get(m).getKlíč();
2.24 } else if (n == 1) {
2.25 return atributy.get(m).getHodnota();
2.26 } else {
2.27 @@ -68,19 +68,19 @@
2.28 if (n == 0) {
2.29 /** Měníme klíč – název atributu */
2.30 String novýKlíč = String.valueOf(value.toString());
2.31 - if (!novýKlíč.equals(a.getKlic())) {
2.32 - if (a.getKlic() != null) {
2.33 - souborovySystem.delete(a.getKlic());
2.34 + if (!novýKlíč.equals(a.getKlíč())) {
2.35 + if (a.isPlatnýKlíč()) {
2.36 + souborovýSystém.delete(a.getKlíč());
2.37 }
2.38 - a.setKlic(novýKlíč);
2.39 - if (a.getHodnotaBajty() != null) {
2.40 - souborovySystem.write(a.getKlic(), a.getHodnotaBajty());
2.41 + a.setKlíč(novýKlíč);
2.42 + if (a.isPlatnáHodnota()) {
2.43 + souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty());
2.44 }
2.45 }
2.46 } else if (n == 1) {
2.47 /** Měníme hodnotu atributu */
2.48 a.setHodnota(String.valueOf(value.toString()));
2.49 - souborovySystem.write(a.getKlic(), a.getHodnotaBajty());
2.50 + souborovýSystém.write(a.getKlíč(), a.getHodnotaBajty());
2.51 }
2.52 } catch (IOException e) {
2.53 log.log(Level.SEVERE, "Selhalo ukládání atributu na souborový systém", e);
2.54 @@ -110,16 +110,18 @@
2.55
2.56 public void odeberAtribut(Atribut a) throws IOException {
2.57 atributy.remove(a);
2.58 - souborovySystem.delete(a.getKlic());
2.59 + if (a.isPlatnýKlíč()) {
2.60 + souborovýSystém.delete(a.getKlíč());
2.61 + }
2.62 upozorniPosluchače();
2.63 }
2.64
2.65 public final void načtiAtributy() throws IOException {
2.66 - List<String> jménaAtributů = souborovySystem.list();
2.67 + List<String> jménaAtributů = souborovýSystém.list();
2.68 atributy.clear();
2.69 for (String jménoAtributu : jménaAtributů) {
2.70 - ByteBuffer hodnotaAtributu = ByteBuffer.allocate(souborovySystem.size(jménoAtributu));
2.71 - souborovySystem.read(jménoAtributu, hodnotaAtributu);
2.72 + ByteBuffer hodnotaAtributu = ByteBuffer.allocate(souborovýSystém.size(jménoAtributu));
2.73 + souborovýSystém.read(jménoAtributu, hodnotaAtributu);
2.74 atributy.add(new Atribut(jménoAtributu, hodnotaAtributu));
2.75 }
2.76 upozorniPosluchače();
3.1 --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Startér.java Wed Dec 15 23:29:14 2010 +0100
3.2 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/Startér.java Wed Dec 15 23:58:34 2010 +0100
3.3 @@ -2,12 +2,17 @@
3.4
3.5 import cz.frantovo.rozsireneAtributy.gui.Panel;
3.6 import java.awt.BorderLayout;
3.7 +import java.awt.event.ActionEvent;
3.8 +import java.awt.event.ActionListener;
3.9 +import java.awt.event.KeyEvent;
3.10 import java.io.File;
3.11 import java.io.IOException;
3.12 import java.util.logging.Level;
3.13 import java.util.logging.Logger;
3.14 +import javax.swing.JComponent;
3.15 import javax.swing.JFrame;
3.16 import javax.swing.JOptionPane;
3.17 +import javax.swing.KeyStroke;
3.18
3.19 /**
3.20 * Spouštěč programu
3.21 @@ -39,12 +44,20 @@
3.22
3.23 Model model = new Model(soubor);
3.24
3.25 - JFrame f = new JFrame();
3.26 + final JFrame f = new JFrame();
3.27 Panel p = new Panel(model);
3.28
3.29 f.setLayout(new BorderLayout());
3.30 f.add(p, BorderLayout.CENTER);
3.31
3.32 + /** Ukončení programu klávesou Escape */
3.33 + f.getRootPane().registerKeyboardAction(new ActionListener() {
3.34 +
3.35 + public void actionPerformed(ActionEvent ae) {
3.36 + f.dispose();
3.37 + }
3.38 + }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
3.39 +
3.40 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
3.41 f.setTitle("Rozšířené stributy souboru: " + soubor);
3.42 f.setSize(640, 240);
4.1 --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.form Wed Dec 15 23:29:14 2010 +0100
4.2 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.form Wed Dec 15 23:58:34 2010 +0100
4.3 @@ -23,9 +23,9 @@
4.4 <Component id="tlačítkoSmazat" min="-2" max="-2" attributes="0"/>
4.5 <EmptySpace max="-2" attributes="0"/>
4.6 <Component id="tlačítkoZnovuNačíst" min="-2" max="-2" attributes="0"/>
4.7 - <EmptySpace pref="90" max="32767" attributes="0"/>
4.8 + <EmptySpace pref="186" max="32767" attributes="0"/>
4.9 </Group>
4.10 - <Component id="posuvnýPanel" alignment="0" pref="447" max="32767" attributes="0"/>
4.11 + <Component id="posuvnýPanel" alignment="0" pref="543" max="32767" attributes="0"/>
4.12 </Group>
4.13 </DimensionLayout>
4.14 <DimensionLayout dim="1">
4.15 @@ -67,6 +67,7 @@
4.16 </Container>
4.17 <Component class="javax.swing.JButton" name="tlačítkoPřidat">
4.18 <Properties>
4.19 + <Property name="mnemonic" type="int" value="112"/>
4.20 <Property name="text" type="java.lang.String" value="Přidat atribut"/>
4.21 </Properties>
4.22 <Events>
4.23 @@ -75,6 +76,7 @@
4.24 </Component>
4.25 <Component class="javax.swing.JButton" name="tlačítkoSmazat">
4.26 <Properties>
4.27 + <Property name="mnemonic" type="int" value="115"/>
4.28 <Property name="text" type="java.lang.String" value="Smazat atribut"/>
4.29 <Property name="enabled" type="boolean" value="false"/>
4.30 </Properties>
4.31 @@ -84,6 +86,7 @@
4.32 </Component>
4.33 <Component class="javax.swing.JButton" name="tlačítkoZnovuNačíst">
4.34 <Properties>
4.35 + <Property name="mnemonic" type="int" value="122"/>
4.36 <Property name="text" type="java.lang.String" value="Znovu načíst"/>
4.37 </Properties>
4.38 <Events>
5.1 --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.java Wed Dec 15 23:29:14 2010 +0100
5.2 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneAtributy/gui/Panel.java Wed Dec 15 23:58:34 2010 +0100
5.3 @@ -23,6 +23,8 @@
5.4 this.model = model;
5.5 initComponents();
5.6 tabulka.setModel(model);
5.7 +
5.8 + /** Výběr aktuálního atributu v tabulce */
5.9 tabulka.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
5.10
5.11 public void valueChanged(ListSelectionEvent e) {
5.12 @@ -71,6 +73,7 @@
5.13 tabulka.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
5.14 posuvnýPanel.setViewportView(tabulka);
5.15
5.16 + tlačítkoPřidat.setMnemonic('p');
5.17 tlačítkoPřidat.setText("Přidat atribut");
5.18 tlačítkoPřidat.addActionListener(new java.awt.event.ActionListener() {
5.19 public void actionPerformed(java.awt.event.ActionEvent evt) {
5.20 @@ -78,6 +81,7 @@
5.21 }
5.22 });
5.23
5.24 + tlačítkoSmazat.setMnemonic('s');
5.25 tlačítkoSmazat.setText("Smazat atribut");
5.26 tlačítkoSmazat.setEnabled(false);
5.27 tlačítkoSmazat.addActionListener(new java.awt.event.ActionListener() {
5.28 @@ -86,6 +90,7 @@
5.29 }
5.30 });
5.31
5.32 + tlačítkoZnovuNačíst.setMnemonic('z');
5.33 tlačítkoZnovuNačíst.setText("Znovu načíst");
5.34 tlačítkoZnovuNačíst.addActionListener(new java.awt.event.ActionListener() {
5.35 public void actionPerformed(java.awt.event.ActionEvent evt) {
5.36 @@ -104,8 +109,8 @@
5.37 .addComponent(tlačítkoSmazat)
5.38 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
5.39 .addComponent(tlačítkoZnovuNačíst)
5.40 - .addContainerGap(90, Short.MAX_VALUE))
5.41 - .addComponent(posuvnýPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 447, Short.MAX_VALUE)
5.42 + .addContainerGap(186, Short.MAX_VALUE))
5.43 + .addComponent(posuvnýPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 543, Short.MAX_VALUE)
5.44 );
5.45 layout.setVerticalGroup(
5.46 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)