src/main/java/cz/frantovo/rozsireneatributy/Konfigurace.java
author František Kučera <franta-hg@frantovo.cz>
Sun, 24 Dec 2023 00:38:41 +0100
branchv_0
changeset 42 d2414701ce09
parent 39 ec0e970e0830
permissions -rw-r--r--
režimy zamykání:

- vypnuté: tlačítko pro zamykání je skryté a soubor se nezamyká
- volitelné: uživatel může soubor zamknout, ale může editovat i bez toho
- povinné: uživatel musí soubor zamknout, aby mohl atributy editovat

Změny v atributech se vždy propisují okamžitě - na ně zámek nemá vliv.
Zámek je na souboru (ne metadatech) a slouží pro kooperující procesy.
Proces, který soubor/metadata čte, si jednak může soubor zamknout (POSIX)
a tím mít jistotu, že zrovna neprobíhá editace.
A jednak může reagovat na notifikace CLOSE_WRITE (inotify).
Notifikaci mu pošleme tím, že soubor odemkneme (čímž se i zavře).
franta-hg@31
     1
/**
franta-hg@31
     2
 * Rozšířené atributy – program na správu rozšířených atributů souborů
franta-hg@31
     3
 * Copyright © 2023 František Kučera (frantovo.cz)
franta-hg@31
     4
 *
franta-hg@31
     5
 * This program is free software: you can redistribute it and/or modify
franta-hg@31
     6
 * it under the terms of the GNU General Public License as published by
franta-hg@31
     7
 * the Free Software Foundation, either version 3 of the License.
franta-hg@31
     8
 *
franta-hg@31
     9
 * This program is distributed in the hope that it will be useful,
franta-hg@31
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
franta-hg@31
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
franta-hg@31
    12
 * GNU General Public License for more details.
franta-hg@31
    13
 *
franta-hg@31
    14
 * You should have received a copy of the GNU General Public License
franta-hg@31
    15
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
franta-hg@31
    16
 */
franta-hg@31
    17
package cz.frantovo.rozsireneatributy;
franta-hg@31
    18
franta-hg@31
    19
import java.io.File;
franta-hg@42
    20
import java.util.Arrays;
franta-hg@42
    21
import java.util.HashSet;
franta-hg@31
    22
import java.util.LinkedList;
franta-hg@31
    23
import java.util.List;
franta-hg@42
    24
import java.util.Set;
franta-hg@31
    25
franta-hg@31
    26
/**
franta-hg@31
    27
 * @author Ing. František Kučera (frantovo.cz)
franta-hg@31
    28
 */
franta-hg@31
    29
public class Konfigurace {
franta-hg@31
    30
franta-hg@31
    31
	public static class DefiniceAtributu {
franta-hg@31
    32
franta-hg@31
    33
		private String název;
franta-hg@31
    34
		private String popis;
franta-hg@31
    35
		private final List<DefiniceHodnoty> hodnoty = new LinkedList<>();
franta-hg@31
    36
franta-hg@31
    37
		public DefiniceAtributu(String název, String popis) {
franta-hg@31
    38
			this.název = název;
franta-hg@31
    39
			this.popis = popis;
franta-hg@31
    40
		}
franta-hg@31
    41
franta-hg@31
    42
		public String getNázev() {
franta-hg@31
    43
			return název;
franta-hg@31
    44
		}
franta-hg@31
    45
franta-hg@31
    46
		public void setNázev(String název) {
franta-hg@31
    47
			this.název = název;
franta-hg@31
    48
		}
franta-hg@31
    49
franta-hg@31
    50
		public String getPopis() {
franta-hg@31
    51
			return popis;
franta-hg@31
    52
		}
franta-hg@31
    53
franta-hg@31
    54
		public void setPopis(String popis) {
franta-hg@31
    55
			this.popis = popis;
franta-hg@31
    56
		}
franta-hg@31
    57
franta-hg@31
    58
		public List<DefiniceHodnoty> getHodnoty() {
franta-hg@31
    59
			return hodnoty;
franta-hg@31
    60
		}
franta-hg@31
    61
franta-hg@31
    62
		public void addHodnota(DefiniceHodnoty hodnota) {
franta-hg@31
    63
			this.hodnoty.add(hodnota);
franta-hg@31
    64
		}
franta-hg@31
    65
franta-hg@31
    66
	}
franta-hg@31
    67
franta-hg@31
    68
	public static class DefiniceHodnoty {
franta-hg@31
    69
franta-hg@31
    70
		private String název;
franta-hg@31
    71
		private String popis;
franta-hg@31
    72
franta-hg@31
    73
		public DefiniceHodnoty(String název, String popis) {
franta-hg@31
    74
			this.název = název;
franta-hg@31
    75
			this.popis = popis;
franta-hg@31
    76
		}
franta-hg@31
    77
franta-hg@31
    78
		public String getNázev() {
franta-hg@31
    79
			return název;
franta-hg@31
    80
		}
franta-hg@31
    81
franta-hg@31
    82
		public void setNázev(String název) {
franta-hg@31
    83
			this.název = název;
franta-hg@31
    84
		}
franta-hg@31
    85
franta-hg@31
    86
		public String getPopis() {
franta-hg@31
    87
			return popis;
franta-hg@31
    88
		}
franta-hg@31
    89
franta-hg@31
    90
		public void setPopis(String popis) {
franta-hg@31
    91
			this.popis = popis;
franta-hg@31
    92
		}
franta-hg@31
    93
	}
franta-hg@31
    94
franta-hg@42
    95
	public enum RežimZamykání {
franta-hg@42
    96
		VYPNUTÉ("vypnuté", "disabled"),
franta-hg@42
    97
		VOLITELNÉ("volitelné", "optional"),
franta-hg@42
    98
		POVINNÉ("povinné", "mandatory");
franta-hg@42
    99
franta-hg@42
   100
		private final Set<String> hodnoty = new HashSet<>();
franta-hg@42
   101
franta-hg@42
   102
		private RežimZamykání(String... hodnoty) {
franta-hg@42
   103
			this.hodnoty.addAll(Arrays.asList(hodnoty));
franta-hg@42
   104
		}
franta-hg@42
   105
franta-hg@42
   106
		public boolean odpovídá(String hodnota) {
franta-hg@42
   107
			return hodnoty.contains(hodnota);
franta-hg@42
   108
		}
franta-hg@42
   109
franta-hg@42
   110
		public static RežimZamykání najdiRežim(String hodnota) {
franta-hg@42
   111
			for (RežimZamykání režim : values()) {
franta-hg@42
   112
				if (režim.odpovídá(hodnota)) return režim;
franta-hg@42
   113
			}
franta-hg@42
   114
			return null;
franta-hg@42
   115
		}
franta-hg@42
   116
	}
franta-hg@42
   117
franta-hg@31
   118
	private File soubor;
franta-hg@31
   119
franta-hg@42
   120
	private RežimZamykání režimZamykání = RežimZamykání.VOLITELNÉ;
franta-hg@31
   121
franta-hg@31
   122
	private final List<DefiniceAtributu> atributy = new LinkedList<>();
franta-hg@31
   123
franta-hg@31
   124
	public File getSoubor() {
franta-hg@31
   125
		return soubor;
franta-hg@31
   126
	}
franta-hg@31
   127
franta-hg@31
   128
	public void setSoubor(File soubor) {
franta-hg@31
   129
		this.soubor = soubor;
franta-hg@31
   130
	}
franta-hg@31
   131
franta-hg@42
   132
	public RežimZamykání getRežimZamykání() {
franta-hg@42
   133
		return režimZamykání;
franta-hg@31
   134
	}
franta-hg@31
   135
franta-hg@42
   136
	public void setRežimZamykání(RežimZamykání režimZamykání) {
franta-hg@42
   137
		this.režimZamykání = režimZamykání;
franta-hg@31
   138
	}
franta-hg@31
   139
franta-hg@31
   140
	public List<DefiniceAtributu> getAtributy() {
franta-hg@31
   141
		return atributy;
franta-hg@31
   142
	}
franta-hg@31
   143
franta-hg@31
   144
	public void addAtribut(DefiniceAtributu atribut) {
franta-hg@31
   145
		this.atributy.add(atribut);
franta-hg@31
   146
	}
franta-hg@31
   147
franta-hg@31
   148
}