diff -r 8d42303538ed -r d511e4bf7d8f java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/gui/Model.java --- a/java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/gui/Model.java Mon Dec 11 00:49:59 2023 +0100 +++ b/java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/gui/Model.java Tue Dec 12 21:19:11 2023 +0100 @@ -19,7 +19,10 @@ import cz.frantovo.rozsireneatributy.Atribut; import java.io.File; import java.io.IOException; +import java.io.RandomAccessFile; import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; +import java.nio.channels.FileLock; import java.nio.file.Path; import java.nio.file.attribute.UserDefinedFileAttributeView; import java.nio.file.spi.FileSystemProvider; @@ -35,8 +38,7 @@ import javax.swing.table.TableModel; /** - * - * @author fiki + * @author Ing. František Kučera (frantovo.cz) */ public class Model implements TableModel { @@ -49,10 +51,16 @@ překlady.getString("tabulka.hodnota") }; private Set posluchače = new HashSet<>(); + private File soubor; private UserDefinedFileAttributeView souborovýSystém; private List atributy = new ArrayList<>(); + private RandomAccessFile zámekSoubor; + private FileChannel zámekKanál; + private FileLock zámek; + public Model(File soubor) throws IOException { + this.soubor = soubor; Path cesta = soubor.toPath(); FileSystemProvider posyktovatelFS = cesta.getFileSystem().provider(); souborovýSystém = posyktovatelFS @@ -172,4 +180,29 @@ p.tableChanged(new TableModelEvent(this)); } } + + public boolean isZámekPodporovaný() { + return soubor.isFile(); + } + + public void nastavZámek(boolean zamknout) throws IOException { + if (!isZámekPodporovaný()) { + throw new IOException(překlady + .getString("chyba.lzeZamknoutJenSoubor")); + } + + if (zamknout && zámekSoubor == null) { + zámekSoubor = new RandomAccessFile(soubor, "rw"); + zámekKanál = zámekSoubor.getChannel(); + zámek = zámekKanál.lock(); + } else if (!zamknout && zámekSoubor != null) { + zámek.release(); + zámekKanál.close(); + zámekSoubor.close(); + zámek = null; + zámekKanál = null; + zámekSoubor = null; + } + + } }