java/rozsirene-atributy/src/cz/frantovo/rozsireneatributy/gui/Model.java
branchv_0
changeset 30 d511e4bf7d8f
parent 29 8d42303538ed
child 31 1ab5ce94a146
     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  }