1.1 --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/gui/Model.java Mon Dec 11 00:49:59 2023 +0100
1.2 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/gui/Model.java Tue Dec 12 21:19:11 2023 +0100
1.3 @@ -19,7 +19,10 @@
1.4 import cz.frantovo.rozsireneatributy.Atribut;
1.5 import java.io.File;
1.6 import java.io.IOException;
1.7 +import java.io.RandomAccessFile;
1.8 import java.nio.ByteBuffer;
1.9 +import java.nio.channels.FileChannel;
1.10 +import java.nio.channels.FileLock;
1.11 import java.nio.file.Path;
1.12 import java.nio.file.attribute.UserDefinedFileAttributeView;
1.13 import java.nio.file.spi.FileSystemProvider;
1.14 @@ -35,8 +38,7 @@
1.15 import javax.swing.table.TableModel;
1.16
1.17 /**
1.18 - *
1.19 - * @author fiki
1.20 + * @author Ing. František Kučera (frantovo.cz)
1.21 */
1.22 public class Model implements TableModel {
1.23
1.24 @@ -49,10 +51,16 @@
1.25 překlady.getString("tabulka.hodnota")
1.26 };
1.27 private Set<TableModelListener> posluchače = new HashSet<>();
1.28 + private File soubor;
1.29 private UserDefinedFileAttributeView souborovýSystém;
1.30 private List<Atribut> atributy = new ArrayList<>();
1.31
1.32 + private RandomAccessFile zámekSoubor;
1.33 + private FileChannel zámekKanál;
1.34 + private FileLock zámek;
1.35 +
1.36 public Model(File soubor) throws IOException {
1.37 + this.soubor = soubor;
1.38 Path cesta = soubor.toPath();
1.39 FileSystemProvider posyktovatelFS = cesta.getFileSystem().provider();
1.40 souborovýSystém = posyktovatelFS
1.41 @@ -172,4 +180,29 @@
1.42 p.tableChanged(new TableModelEvent(this));
1.43 }
1.44 }
1.45 +
1.46 + public boolean isZámekPodporovaný() {
1.47 + return soubor.isFile();
1.48 + }
1.49 +
1.50 + public void nastavZámek(boolean zamknout) throws IOException {
1.51 + if (!isZámekPodporovaný()) {
1.52 + throw new IOException(překlady
1.53 + .getString("chyba.lzeZamknoutJenSoubor"));
1.54 + }
1.55 +
1.56 + if (zamknout && zámekSoubor == null) {
1.57 + zámekSoubor = new RandomAccessFile(soubor, "rw");
1.58 + zámekKanál = zámekSoubor.getChannel();
1.59 + zámek = zámekKanál.lock();
1.60 + } else if (!zamknout && zámekSoubor != null) {
1.61 + zámek.release();
1.62 + zámekKanál.close();
1.63 + zámekSoubor.close();
1.64 + zámek = null;
1.65 + zámekKanál = null;
1.66 + zámekSoubor = null;
1.67 + }
1.68 +
1.69 + }
1.70 }