Skip to content

Commit 6e7e36b

Browse files
committed
refactor(sedalib/resip): improve SEDA version handling
changes: * pass SEDA version from int to enumeration in sedalib * add observable SEDA version changes in resip
1 parent b3a81b3 commit 6e7e36b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+788
-567
lines changed

resip/src/main/java/fr/gouv/vitam/tools/resip/app/ResipApp.java

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
import com.fasterxml.jackson.core.JsonParser;
3131
import com.fasterxml.jackson.databind.ObjectMapper;
3232
import fr.gouv.vitam.tools.resip.data.Work;
33+
import fr.gouv.vitam.tools.resip.event.EventBus;
34+
import fr.gouv.vitam.tools.resip.event.SedaVersionChangedEvent;
3335
import fr.gouv.vitam.tools.resip.parameters.CSVImportContext;
3436
import fr.gouv.vitam.tools.resip.parameters.CSVMetadataImportContext;
3537
import fr.gouv.vitam.tools.resip.parameters.CreationContext;
@@ -40,13 +42,13 @@
4042
import fr.gouv.vitam.tools.resip.utils.ResipException;
4143
import fr.gouv.vitam.tools.resip.utils.ResipLogger;
4244
import fr.gouv.vitam.tools.sedalib.core.ArchiveTransfer;
43-
import fr.gouv.vitam.tools.sedalib.core.SEDA2Version;
45+
import fr.gouv.vitam.tools.sedalib.core.seda.SedaContext;
46+
import fr.gouv.vitam.tools.sedalib.core.seda.SedaVersion;
4447
import fr.gouv.vitam.tools.sedalib.droid.DroidIdentifier;
4548
import fr.gouv.vitam.tools.sedalib.inout.exporter.ArchiveTransferToSIPExporter;
4649
import fr.gouv.vitam.tools.sedalib.inout.importer.CSVMetadataToDataObjectPackageImporter;
4750
import fr.gouv.vitam.tools.sedalib.inout.importer.DiskToArchiveTransferImporter;
4851
import fr.gouv.vitam.tools.sedalib.inout.importer.SIPToArchiveTransferImporter;
49-
import fr.gouv.vitam.tools.sedalib.utils.SEDALibException;
5052
import fr.gouv.vitam.tools.sedalib.utils.SEDALibProgressLogger;
5153
import org.apache.commons.cli.CommandLine;
5254
import org.apache.commons.cli.CommandLineParser;
@@ -65,7 +67,9 @@
6567
import java.time.Duration;
6668
import java.time.Instant;
6769
import java.util.Arrays;
70+
import java.util.HashMap;
6871
import java.util.List;
72+
import java.util.Map;
6973

7074
/**
7175
* ResipApp class for launching the command or the graphic application.
@@ -236,6 +240,8 @@ public static void main(String[] args) throws
236240

237241
System.out.println("Resip launched");
238242

243+
EventBus.subscribe(SedaVersionChangedEvent.class, event -> SedaContext.setVersion(event.getNewVersion()));
244+
239245
String workdirString;
240246
int logLevel;
241247
CreationContext creationContext;
@@ -335,24 +341,22 @@ public static void main(String[] args) throws
335341
}
336342

337343
// define the SEDA 2 version
338-
if (cmd.hasOption("sedaversion")){
339-
try {
340-
int tmp = Integer.parseInt(cmd.getOptionValue("sedaversion"));
341-
switch (tmp){
342-
case 1:
343-
case 2:
344-
SEDA2Version.setSeda2Version(tmp);
345-
break;
346-
default:
347-
throw new NumberFormatException("Doit valoir 1 ou 2");
348-
}
349-
} catch (NumberFormatException e) {
350-
System.err.println(
351-
"Resip: La sous-version du SEDA 2 est non conforme, elle doit être dans la liste (1|2)");
344+
if (cmd.hasOption("sedaversion")) {
345+
final Map<String, SedaVersion> supportedSedaVersions = new HashMap<>();
346+
supportedSedaVersions.put("2.1", SedaVersion.V2_1);
347+
supportedSedaVersions.put("2.2", SedaVersion.V2_2);
348+
supportedSedaVersions.put("2.3", SedaVersion.V2_3);
349+
350+
String sedaVersion = cmd.getOptionValue("sedaversion");
351+
boolean isNotSupportedVersion = !supportedSedaVersions.containsKey(sedaVersion);
352+
353+
if (isNotSupportedVersion) {
354+
System.err.println("Doit valoir " + String.join(",", supportedSedaVersions.keySet()));
352355
System.exit(1);
353-
} catch (SEDALibException ignored) {
354-
// no real case
355356
}
357+
358+
final SedaVersion version = supportedSedaVersions.get(sedaVersion);
359+
EventBus.publish(new SedaVersionChangedEvent(version));
356360
}
357361

358362
// define the global logger
@@ -447,7 +451,7 @@ else if (cmd.hasOption("listimport")) {
447451
cmi.doImport();
448452

449453
packet = new ArchiveTransfer();
450-
Work work = new Work(cmi.getDataObjectPackage(), cSVMetadataImportContext, exportContext, SEDA2Version.getSeda2Version());
454+
Work work = new Work(cmi.getDataObjectPackage(), cSVMetadataImportContext, exportContext);
451455
work.getDataObjectPackage()
452456
.setManagementMetadataXmlData(work.getExportContext().getManagementMetadataXmlData());
453457
packet.setDataObjectPackage(work.getDataObjectPackage());

resip/src/main/java/fr/gouv/vitam/tools/resip/app/ResipGraphicApp.java

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929

3030
import fr.gouv.vitam.tools.mailextractlib.core.StoreExtractor;
3131
import fr.gouv.vitam.tools.resip.data.Work;
32+
import fr.gouv.vitam.tools.resip.event.EventBus;
33+
import fr.gouv.vitam.tools.resip.event.SedaVersionChangedEvent;
3234
import fr.gouv.vitam.tools.resip.frame.*;
3335
import fr.gouv.vitam.tools.resip.frame.preferences.PreferencesDialog;
3436
import fr.gouv.vitam.tools.resip.parameters.*;
@@ -43,7 +45,8 @@
4345
import fr.gouv.vitam.tools.resip.threads.ImportThread;
4446
import fr.gouv.vitam.tools.resip.utils.ResipException;
4547
import fr.gouv.vitam.tools.resip.utils.ResipLogger;
46-
import fr.gouv.vitam.tools.sedalib.core.SEDA2Version;
48+
import fr.gouv.vitam.tools.sedalib.core.seda.SedaContext;
49+
import fr.gouv.vitam.tools.sedalib.core.seda.SedaVersion;
4750
import fr.gouv.vitam.tools.sedalib.droid.DroidIdentifier;
4851
import fr.gouv.vitam.tools.sedalib.utils.SEDALibException;
4952

@@ -159,13 +162,20 @@ public class ResipGraphicApp implements ActionListener, Runnable {
159162
*/
160163
public DuplicatesWindow duplicatesWindow;
161164

165+
private SedaVersion sedaVersion;
166+
162167
/**
163168
* Instantiates a new Resip graphic app.
164169
*
165170
* @param creationContext the creation context
166171
* @throws ResipException the resip exception
167172
*/
168173
public ResipGraphicApp(CreationContext creationContext) throws ResipException {
174+
EventBus.subscribe(
175+
SedaVersionChangedEvent.class,
176+
event -> this.sedaVersion = event.getNewVersion()
177+
);
178+
169179
try {
170180
if (System.getProperty("os.name").toLowerCase().contains("win"))
171181
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
@@ -195,13 +205,6 @@ public ResipGraphicApp(CreationContext creationContext) throws ResipException {
195205
this.interfaceParameters = new InterfaceParameters(Preferences.getInstance());
196206
this.treatmentParameters = new TreatmentParameters(Preferences.getInstance());
197207

198-
try {
199-
SEDA2Version.setSeda2Version(treatmentParameters.getSeda2Version());
200-
} catch (SEDALibException e) {
201-
getGlobalLogger().getLogger().error(e.getLocalizedMessage());
202-
System.exit(-1);
203-
}
204-
205208
getGlobalLogger().setDebugFlag(interfaceParameters.isDebugFlag());
206209
getGlobalLogger().logIfDebug("Resip prefs accessed from " + Preferences.getInstance().getPrefPropertiesFilename(), null);
207210

@@ -377,13 +380,13 @@ public JMenuBar createMenu() {
377380
actionByMenuItem.put(menuItem, "SeeManifest");
378381
treatMenu.add(menuItem);
379382

380-
sedaValidationMenuItem = new JMenuItem("Vérifier la conformité " + SEDA2Version.getSeda2VersionString() + "...");
383+
sedaValidationMenuItem = new JMenuItem("Vérifier la conformité " + sedaVersion.displayString() + "...");
381384
sedaValidationMenuItem.addActionListener(this);
382385
sedaValidationMenuItem.setAccelerator(KeyStroke.getKeyStroke('R', Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx()));
383386
actionByMenuItem.put(sedaValidationMenuItem, "CheckSEDASchema");
384387
treatMenu.add(sedaValidationMenuItem);
385388

386-
sedaProfileValidationMenuItem = new JMenuItem("Vérifier la conformité à un profil " + SEDA2Version.getSeda2VersionString() + "...");
389+
sedaProfileValidationMenuItem = new JMenuItem("Vérifier la conformité à un profil " + sedaVersion.displayString() + "...");
387390
sedaProfileValidationMenuItem.addActionListener(this);
388391
sedaProfileValidationMenuItem.setAccelerator(KeyStroke.getKeyStroke('R', InputEvent.SHIFT_DOWN_MASK + Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx()));
389392
actionByMenuItem.put(sedaProfileValidationMenuItem, "CheckSpecificSEDASchemaProfile");
@@ -726,18 +729,18 @@ private void loadWork() {
726729

727730
if (fileChooser.showOpenDialog(mainWindow) == JFileChooser.APPROVE_OPTION) {
728731
filename = fileChooser.getSelectedFile().getCanonicalPath();
729-
int loadSeda2Version = Work.getSeda2VersionFromFile(filename);
730-
if (loadSeda2Version != SEDA2Version.getSeda2Version()) {
732+
final SedaVersion sedaVersionFromWorkspace = Work.getSeda2VersionFromFile(filename);
733+
734+
if (sedaVersionFromWorkspace != sedaVersion) {
731735
if (UserInteractionDialog.getUserAnswer(mainWindow,
732736
"Pour charger ce fichier il faut faire passer l'interface en " +
733-
SEDA2Version.getSeda2VersionString(loadSeda2Version) + "\n" +
737+
sedaVersion + "\n" +
734738
"Voulez-vous continuer?",
735739
"Confirmation", UserInteractionDialog.WARNING_DIALOG,
736740
null) != OK_DIALOG)
737741
return;
738-
treatmentParameters.setSeda2Version(loadSeda2Version);
742+
EventBus.publish(new SedaVersionChangedEvent(sedaVersionFromWorkspace));
739743
treatmentParameters.toPrefs(Preferences.getInstance());
740-
useSeda2Version(treatmentParameters.getSeda2Version());
741744
}
742745
mainWindow.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
743746
currentWork = Work.createFromFile(filename);
@@ -839,13 +842,13 @@ private void closeWork() {
839842
}
840843
}
841844

842-
private void useSeda2Version(int version) throws SEDALibException {
843-
SEDA2Version.setSeda2Version(version);
844-
if (currentWork != null)
845-
currentWork.setSeda2Version(version);
846-
sedaValidationMenuItem.setText("Vérifier la conformité " + SEDA2Version.getSeda2VersionString() + "...");
847-
sedaProfileValidationMenuItem.setText("Vérifier la conformité à un profil " + SEDA2Version.getSeda2VersionString() + "...");
848-
}
845+
// private void useSeda2Version(int version) throws SEDALibException {
846+
// SEDA2Version.setSeda2Version(version);
847+
// if (currentWork != null)
848+
// currentWork.setSeda2Version(version);
849+
// sedaValidationMenuItem.setText("Vérifier la conformité " + SEDA2Version.getSeda2VersionString() + "...");
850+
// sedaProfileValidationMenuItem.setText("Vérifier la conformité à un profil " + SEDA2Version.getSeda2VersionString() + "...");
851+
// }
849852

850853
// MenuItem Edit Preferences
851854

@@ -866,8 +869,6 @@ void editPrefs() {
866869
preferencesDialog.tp.toPrefs(Preferences.getInstance());
867870
preferencesDialog.ip.toPrefs(Preferences.getInstance());
868871
Preferences.getInstance().save();
869-
treatmentParameters = preferencesDialog.tp;
870-
useSeda2Version(treatmentParameters.getSeda2Version());
871872
interfaceParameters = preferencesDialog.ip;
872873
debugMenuItem.setState(interfaceParameters.isDebugFlag());
873874
experimentalMenuItem.setState(interfaceParameters.isExperimentalFlag());
@@ -876,7 +877,7 @@ void editPrefs() {
876877
ResipLogger.createGlobalLogger(preferencesDialog.cc.getWorkDir() + File.separator + "log.txt",
877878
getGlobalLogger().getProgressLogLevel());
878879
}
879-
} catch (ResipException | SEDALibException e) {
880+
} catch (ResipException e) {
880881
UserInteractionDialog.getUserAnswer(mainWindow,
881882
"Erreur fatale, impossible d'éditer les préférences \n->" + e.getMessage(),
882883
"Erreur", UserInteractionDialog.ERROR_DIALOG,
@@ -997,7 +998,7 @@ void seeManifest() {
997998
* Check seda schema.
998999
*/
9991000
void checkSEDASchema() {
1000-
InOutDialog inOutDialog = new InOutDialog(mainWindow, "Vérification " + SEDA2Version.getSeda2VersionString());
1001+
InOutDialog inOutDialog = new InOutDialog(mainWindow, "Vérification " + sedaVersion.displayString());
10011002
CheckProfileThread checkProfileThread = new CheckProfileThread(null, inOutDialog);
10021003
completeResipWork();
10031004
checkProfileThread.execute();
@@ -1014,7 +1015,7 @@ void checkSpecificSEDASchemaProfile() {
10141015
JFileChooser fileChooser = new JFileChooser(Preferences.getInstance().getPrefsImportDir());
10151016
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
10161017
if (fileChooser.showOpenDialog(mainWindow) == JFileChooser.APPROVE_OPTION) {
1017-
InOutDialog inOutDialog = new InOutDialog(mainWindow, "Vérification Profil " + SEDA2Version.getSeda2VersionString());
1018+
InOutDialog inOutDialog = new InOutDialog(mainWindow, "Vérification Profil " + sedaVersion.displayString());
10181019
CheckProfileThread checkProfileThread = new CheckProfileThread(fileChooser.getSelectedFile()
10191020
.getAbsolutePath(), inOutDialog);
10201021
completeResipWork();
@@ -1023,12 +1024,12 @@ void checkSpecificSEDASchemaProfile() {
10231024
}
10241025
} catch (Exception e) {
10251026
UserInteractionDialog.getUserAnswer(mainWindow,
1026-
"Erreur fatale, impossible de faire la vérification de confirmité au profil " + SEDA2Version.getSeda2VersionString() + "\n->"
1027+
"Erreur fatale, impossible de faire la vérification de confirmité au profil " + sedaVersion.displayString() + "\n->"
10271028
+ e.getMessage(),
10281029
"Erreur", UserInteractionDialog.ERROR_DIALOG,
10291030
null);
10301031
getGlobalLogger().log(ResipLogger.ERROR, "resip.graphicapp: erreur fatale, impossible de faire la " +
1031-
"vérification de confirmité au profil " + SEDA2Version.getSeda2VersionString(), e);
1032+
"vérification de confirmité au profil " + sedaVersion.displayString(), e);
10321033
}
10331034
}
10341035

resip/src/main/java/fr/gouv/vitam/tools/resip/data/Work.java

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,16 @@
3030
import com.fasterxml.jackson.databind.ObjectMapper;
3131
import com.fasterxml.jackson.databind.SerializationFeature;
3232
import com.fasterxml.jackson.databind.module.SimpleModule;
33+
import fr.gouv.vitam.tools.resip.event.EventBus;
34+
import fr.gouv.vitam.tools.resip.event.SedaVersionChangedEvent;
3335
import fr.gouv.vitam.tools.resip.parameters.CreationContext;
3436
import fr.gouv.vitam.tools.resip.parameters.ExportContext;
3537
import fr.gouv.vitam.tools.resip.utils.ResipException;
3638
import fr.gouv.vitam.tools.resip.utils.ResipLogger;
3739
import fr.gouv.vitam.tools.sedalib.core.*;
3840
import fr.gouv.vitam.tools.sedalib.core.json.DataObjectPackageDeserializer;
3941
import fr.gouv.vitam.tools.sedalib.core.json.DataObjectPackageSerializer;
42+
import fr.gouv.vitam.tools.sedalib.core.seda.SedaVersion;
4043
import fr.gouv.vitam.tools.sedalib.utils.SEDALibException;
4144
import fr.gouv.vitam.tools.sedalib.utils.SEDALibProgressLogger;
4245

@@ -92,15 +95,15 @@ public class Work {
9295
private DataObjectPackage dataObjectPackage;
9396

9497
/**
95-
* The SEDA 2 version.
98+
* SEDA version
9699
*/
97-
private int seda2Version;
100+
private SedaVersion version;
98101

99102
/**
100103
* Instantiates a new work for json serialization.
101104
*/
102105
public Work() {
103-
this(null, null, null,1);
106+
this(null, null, null);
104107
}
105108

106109
/**
@@ -109,14 +112,17 @@ public Work() {
109112
* @param dataObjectPackage the archive transfer
110113
* @param creationContext the creation context
111114
* @param exportContext the export context
112-
* @param seda2Version the seda 2 version
113115
*/
114-
public Work(DataObjectPackage dataObjectPackage, CreationContext creationContext, ExportContext exportContext, int seda2Version) {
116+
public Work(DataObjectPackage dataObjectPackage, CreationContext creationContext, ExportContext exportContext) {
115117
this.serializationVersion = CURRENT_SERIALIZATION_VERSION;
116-
this.seda2Version = seda2Version;
117118
this.dataObjectPackage = dataObjectPackage;
118119
this.creationContext = creationContext;
119120
this.exportContext = exportContext;
121+
122+
EventBus.subscribe(
123+
SedaVersionChangedEvent.class,
124+
event -> this.version = event.getNewVersion()
125+
);
120126
}
121127

122128
/**
@@ -149,7 +155,7 @@ public String doVitamNormalize(SEDALibProgressLogger spl)
149155
* @return the SEDA 2 version
150156
* @throws ResipException the resip exception
151157
*/
152-
public static int getSeda2VersionFromFile(String file) throws ResipException {
158+
public static SedaVersion getSeda2VersionFromFile(String file) throws ResipException {
153159
Work ow;
154160
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(file))) {
155161
ObjectMapper mapper = new ObjectMapper();
@@ -167,7 +173,7 @@ public static int getSeda2VersionFromFile(String file) throws ResipException {
167173
throw new ResipException("Resip: La lecture du fichier [" + file
168174
+ "] ne permet pas de retrouver une session Resip", e);
169175
}
170-
return ow.seda2Version;
176+
return ow.version;
171177
}
172178

173179
/**
@@ -295,22 +301,4 @@ public ExportContext getExportContext() {
295301
public void setExportContext(ExportContext exportContext) {
296302
this.exportContext = exportContext;
297303
}
298-
299-
/**
300-
* Gets the SEDA 2 version used.
301-
*
302-
* @return the seda 2 version
303-
*/
304-
public int getSeda2Version() {
305-
return seda2Version;
306-
}
307-
308-
/**
309-
* Sets the SEDA 2 version used.
310-
*
311-
* @param seda2Version the seda 2 version
312-
*/
313-
public void setSeda2Version(int seda2Version) {
314-
this.seda2Version = seda2Version;
315-
}
316304
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package fr.gouv.vitam.tools.resip.event;
2+
3+
public interface Event {
4+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package fr.gouv.vitam.tools.resip.event;
2+
3+
import java.util.*;
4+
import java.util.concurrent.ConcurrentHashMap;
5+
import java.util.concurrent.CopyOnWriteArrayList;
6+
7+
public class EventBus {
8+
9+
private static final Map<Class<? extends Event>, List<EventListener<?>>> listenersMap = new ConcurrentHashMap<>();
10+
11+
public static <T extends Event> void subscribe(Class<T> eventType, EventListener<T> listener) {
12+
listenersMap
13+
.computeIfAbsent(eventType, k -> new CopyOnWriteArrayList<>())
14+
.add(listener);
15+
}
16+
17+
@SuppressWarnings("unchecked")
18+
public static <T extends Event> void publish(T event) {
19+
List<EventListener<?>> listeners = listenersMap.getOrDefault(event.getClass(), Collections.emptyList());
20+
for (EventListener<?> listener : listeners) {
21+
((EventListener<T>) listener).onEvent(event);
22+
}
23+
}
24+
25+
public static <T extends Event> void unsubscribe(Class<T> eventType, EventListener<T> listener) {
26+
List<EventListener<?>> listeners = listenersMap.get(eventType);
27+
if (listeners != null) {
28+
listeners.remove(listener);
29+
}
30+
}
31+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package fr.gouv.vitam.tools.resip.event;
2+
3+
@FunctionalInterface
4+
public interface EventListener<T extends Event> {
5+
void onEvent(T event);
6+
}

0 commit comments

Comments
 (0)