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