//import java.util.zip.ZipFile;
/**
- * Contrôle l'archive, la déplace là où il faut quand tout est bon, dépose la
- * demande d'import initial.
+ * Contrôle l'archive, la déplace là où il faut quand tout est bon, dépose la demande d'import initial.
*
* @author cmarchand
*/
// le fichier de regle à appliquer à l'import
private String importScheme;
- public Repartitor(String[] args) {
+ public Repartitor(final String[] args) {
super(args);
}
@Override
protected void initialize() throws Exception {
super.initialize();
-
- if (!StringUtils.isEmpty(getProps().getProperty("archive.locator"))) {
- String archiveLocatorClassName = getProps().getProperty("archive.locator");
- Class clazz = Class.forName(archiveLocatorClassName);
- archiveLocator = (ArchiveLocator)clazz.newInstance();
- } else if (!StringUtils.isEmpty(getProps().getProperty("xar.storage"))) {
- String xarStoragePath = getProps().getProperty("xar.storage");
- archiveLocator = new BasicArchiveLocator(xarStoragePath);
- }else {
+
+ if (!StringUtils.isEmpty(this.getProps().getProperty("archive.locator"))) {
+ final String archiveLocatorClassName = this.getProps().getProperty("archive.locator");
+ final Class clazz = Class.forName(archiveLocatorClassName);
+ this.archiveLocator = (ArchiveLocator) clazz.newInstance();
+ } else if (!StringUtils.isEmpty(this.getProps().getProperty("xar.storage"))) {
+ final String xarStoragePath = this.getProps().getProperty("xar.storage");
+ this.archiveLocator = new BasicArchiveLocator(xarStoragePath);
+ } else {
throw new Exception("le paramètre 'archive.locator' ou 'xar.storage' doit être renseigné");
}
-
- archiveLocator.initialize();
-
-
- String inputFileName = getProps().getProperty("xar.dir");
- inputDir = new File(inputFileName);
- if (!inputDir.exists()) {
+
+ this.archiveLocator.initialize();
+
+ final String inputFileName = this.getProps().getProperty("xar.dir");
+ this.inputDir = new File(inputFileName);
+ if (!this.inputDir.exists()) {
logger.error(inputFileName + " n'existe pas !");
throw new IllegalArgumentException(inputFileName + " n'existe pas !");
}
- importUser = getProps().getProperty("import.user");
- importScheme = getProps().getProperty("initial.import.scheme");
+ this.importUser = this.getProps().getProperty("import.user");
+ this.importScheme = this.getProps().getProperty("initial.import.scheme");
}
@Override
protected void doProcess() throws Exception {
- Traitement traitement = new Traitement(Repartitor.class, BATCH_NAME);
- if (checkNotRunning()) {
+ final Traitement traitement = new Traitement(Repartitor.class, BATCH_NAME);
+ if (this.checkNotRunning()) {
try {
- File[] xarFiles = inputDir.listFiles(new FilenameFilter() {
+ final File[] xarFiles = this.inputDir.listFiles(new FilenameFilter() {
@Override
- public boolean accept(File dir, String name) {
+ public boolean accept(final File dir, final String name) {
return name.endsWith("_1.xar");
}
});
logger.info("starting repartitor with " + xarFiles.length + " files");
- pool = Executors.newSingleThreadExecutor();
- for (File f : xarFiles) {
- RepartitorImpl ri = new RepartitorImpl(f, archiveLocator, traitement);
- pool.submit(ri);
+ this.pool = Executors.newSingleThreadExecutor();
+ for (final File f : xarFiles) {
+ final RepartitorImpl ri = new RepartitorImpl(f, this.archiveLocator, traitement);
+ this.pool.submit(ri);
}
- Runnable terminator = new Terminator(traitement);
- pool.submit(terminator);
- pool.shutdown();
- pool.awaitTermination(100, TimeUnit.DAYS);
- } catch (Exception ex) {
+ final Runnable terminator = new Terminator(traitement);
+ this.pool.submit(terminator);
+ this.pool.shutdown();
+ this.pool.awaitTermination(100, TimeUnit.DAYS);
+ } catch (final Exception ex) {
logger.error("Repartitor.doProcess()", ex);
} finally {
- clearLock();
+ this.clearLock();
}
} else {
logger.info("cancelling repartitor - another instance is running");
return "1.0";
}
- private void declareMapping(String idCol, String exercice, String archiveName) {
+ private void declareMapping(final String idCol, final String exercice, final String archiveName) {
Connection con = null;
try {
con = PoolManager.getInstance().getConnection();
- String sql = "insert into ARCHIVE_BUDGET (IDCOLL, EXERCICE, ARCHIVE_NAME) VALUES (?,?,?)";
+ final String sql = "insert into ARCHIVE_BUDGET (IDCOLL, EXERCICE, ARCHIVE_NAME) VALUES (?,?,?)";
java.sql.PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, idCol);
ps.setString(2, exercice);
ps.setString(3, archiveName);
try {
ps.executeUpdate();
- } catch (SQLException sqlEx) {
+ } catch (final SQLException sqlEx) {
// il existait déjà ?
ps = con.prepareStatement("update ARCHIVE_BUDGET set ARCHIVE_NAME=? WHERE IDCOLL=? AND EXERCICE=?");
ps.setString(1, archiveName);
ps.setString(3, exercice);
ps.executeUpdate();
}
- } catch (Exception ex) {
+ } catch (final Exception ex) {
logger.error("Repartitor.declarMapping(Strin,String,String)", ex);
} finally {
- if (con != null)
+ if (con != null) {
PoolManager.getInstance().releaseConnection(con);
+ }
}
}
}
private class RepartitorImpl extends RunnableBatch {
- private File volume1;
- private ArchiveLocator locator;
- private Traitement traitement;
+ private final File volume1;
+ private final ArchiveLocator locator;
+ private final Traitement traitement;
- public RepartitorImpl(File volume1, ArchiveLocator locator, Traitement traitement) {
+ public RepartitorImpl(final File volume1, final ArchiveLocator locator, final Traitement traitement) {
super();
this.volume1 = volume1;
this.locator = locator;
@Override
public String getInformations() {
- StringBuilder sb = new StringBuilder();
- sb.append("RepartitorImpl<").append(volume1.getName()).append("> ").append("en cours");
+ final StringBuilder sb = new StringBuilder();
+ sb.append("RepartitorImpl<").append(this.volume1.getName()).append("> ").append("en cours");
return sb.toString();
}
@Override
public void run() {
- logger.debug("contrôle de " + volume1.getName());
- if (!volume1.exists()) {
- logger.info(volume1.getName() + " a déjà été déplacé");
+ logger.debug("contrôle de " + this.volume1.getName());
+ if (!this.volume1.exists()) {
+ logger.info(this.volume1.getName() + " a déjà été déplacé");
} else {
- ArchiveDetector archiveDetector = new DefaultArchiveDetector(ArchiveDetector.NULL, "xar", new Zip32Driver());
- Builder builder = new Builder();
- de.schlichtherle.io.File zipVolume1 = new de.schlichtherle.io.File(volume1, archiveDetector);
- Message msg = traitement.addMessage(Traitement.SEVERITY_INFO, "traitement de " + volume1.getName());
+ final ArchiveDetector archiveDetector = new DefaultArchiveDetector(ArchiveDetector.NULL, "xar", new Zip32Driver());
+ final Builder builder = new Builder();
+ de.schlichtherle.io.File zipVolume1 = new de.schlichtherle.io.File(this.volume1, archiveDetector);
+ final Message msg = this.traitement.addMessage(Traitement.SEVERITY_INFO, "traitement de " + this.volume1.getName());
try {
InputStream isManifeste = null;
Document manifeste = null;
try {
- de.schlichtherle.io.File manifesteFile = new de.schlichtherle.io.File(zipVolume1, ArchiveImporter.MANIFESTE_FILE_NAME, archiveDetector);
+ final de.schlichtherle.io.File manifesteFile = new de.schlichtherle.io.File(zipVolume1, ArchiveImporter.MANIFESTE_FILE_NAME, archiveDetector);
isManifeste = new de.schlichtherle.io.FileInputStream(manifesteFile);
manifeste = builder.build(isManifeste);
- } catch (Exception ex) {
+ } catch (final Exception ex) {
// ici, on devrait savoir si vraiment c'est pas un zip
logger.error("while reading manifeste", ex);
} finally {
- if (isManifeste != null)
+ if (isManifeste != null) {
isManifeste.close();
+ }
if (zipVolume1 != null) {
de.schlichtherle.io.File.umount(zipVolume1);
zipVolume1 = null;
}
}
- String idCol = manifeste.getRootElement().getAttributeValue("cgIdCol");
- String exercice = manifeste.getRootElement().getAttributeValue("exercice");
- Nodes volumes = manifeste.query("/manifeste/volumes/volume");
+ final String idCol = manifeste.getRootElement().getAttributeValue("cgIdCol");
+ final String exercice = manifeste.getRootElement().getAttributeValue("exercice");
+ final Nodes volumes = manifeste.query("/manifeste/volumes/volume");
boolean allVolumesAvailable = true;
- ArrayList<File> volumesFiles = new ArrayList<File>();
+ final ArrayList<File> volumesFiles = new ArrayList<File>();
for (int i = 0; i < volumes.size(); i++) {
- Element volume = (Element) volumes.get(i);
- String volFileName = volume.getAttributeValue("fichier");
- File volFile = new File(volume1.getParentFile(), volFileName);
+ final Element volume = (Element) volumes.get(i);
+ final String volFileName = volume.getAttributeValue("fichier");
+ final File volFile = new File(this.volume1.getParentFile(), volFileName);
if (!volFile.exists()) {
allVolumesAvailable = false;
msg.setInfoCompl(msg.getInfoCompl() + " | " + volFileName + " est introuvable");
- logger.debug(volume1.getName() + " - " + volFileName + " est introuvable");
- } else
+ logger.debug(this.volume1.getName() + " - " + volFileName + " est introuvable");
+ } else {
volumesFiles.add(volFile);
+ }
}
- String archiveName = ArchiveImporter.getArchiveName(volume1);
+ final String archiveName = ArchiveImporter.getArchiveName(this.volume1);
if (allVolumesAvailable) {
// on indique le lien entre le budget principal et le
// nom de l'archive
- declareMapping(idCol, exercice, archiveName);
+ Repartitor.this.declareMapping(idCol, exercice, archiveName);
if (Importer.doesOpennedTaskExistsForArchive(archiveName, exercice)) {
msg.setInfoCompl("Il existe des tâches d'import en attente ou en cours de traitement pour " + archiveName + ", l'import est repoussé");
logger.info("Il existe des tâches d'import en attente ou en cours de traitement pour " + archiveName + ", l'import est repoussé");
} else {
- String baseArchiveDest = DataLayerManager.getImplementation().getParameterValue("pj.archive.base.path");
+ final String baseArchiveDest = DataLayerManager.getImplementation().getParameterValue("pj.archive.base.path");
if (baseArchiveDest == null) {
msg.setInfoCompl("Le paramètre pj.archive.base.path n'est pas défini");
msg.setSeverity(Traitement.SEVERITY_ERROR);
- traitement.addMessage(Traitement.SEVERITY_ERROR, "Le paramètre pj.archive.base.path n'est pas défini");
+ this.traitement.addMessage(Traitement.SEVERITY_ERROR, "Le paramètre pj.archive.base.path n'est pas défini");
logger.error("Le paramètre pj.archive.base.path n'est pas défini");
} else {
- File archiveMoved = locator.getArchiveLocation(archiveName);
- File archiveDir = archiveMoved.getParentFile();
-
-
+ final File archiveMoved = this.locator.getArchiveLocation(archiveName);
+ final File archiveDir = archiveMoved.getParentFile();
+
// ici, tout est bon, donc on contrôle la
// présence de chacun des fichiers référencés
// dans le manifeste
// déplace les archives
boolean tousFichiersPresents = true;
boolean tousFichiersLisibles = true;
- SAXParserFactory saxFactory = FactoryProvider.getSaxParserFactory();
-
+ final SAXParserFactory saxFactory = FactoryProvider.getSaxParserFactory();
+
for (int i = 0; i < volumesFiles.size(); i++) {
- String volumeId = Integer.toString(i + 1);
- de.schlichtherle.io.File zipVolume = new de.schlichtherle.io.File(volumesFiles.get(i), archiveDetector);
- Nodes fichiersVolume = manifeste.query("/manifeste/documents/document[@volume='" + volumeId + "']");
+ final String volumeId = Integer.toString(i + 1);
+ final de.schlichtherle.io.File zipVolume = new de.schlichtherle.io.File(volumesFiles.get(i), archiveDetector);
+ final Nodes fichiersVolume = manifeste.query("/manifeste/documents/document[@volume='" + volumeId + "']");
try {
for (int fichierCount = 0; fichierCount < fichiersVolume.size(); fichierCount++) {
- Element fichierElement = (Element) fichiersVolume.get(fichierCount);
- String fichierPath = fichierElement.getAttributeValue("path");
- de.schlichtherle.io.File fichierEntry = new de.schlichtherle.io.File(zipVolume, fichierPath, archiveDetector);
+ final Element fichierElement = (Element) fichiersVolume.get(fichierCount);
+ final String fichierPath = fichierElement.getAttributeValue("path");
+ final de.schlichtherle.io.File fichierEntry = new de.schlichtherle.io.File(zipVolume, fichierPath, archiveDetector);
if (!fichierEntry.exists()) {
tousFichiersPresents = false;
fichierElement.addAttribute(new Attribute("added:present", Constants.ADDED_NS_URI, "false"));
} else {
- String typeFichier = fichierElement.getAttributeValue("type");
+ final String typeFichier = fichierElement.getAttributeValue("type");
if (!"PJ".equals(typeFichier)) {
// on ne parse pas les PJ
if (!fichierPath.endsWith("zip") && !fichierPath.endsWith("gz")) {
// essayons de le parser
InputStream is = null;
try {
- SAXParser parser = saxFactory.newSAXParser();
- DefaultHandler dh = new DefaultHandler();
+ final SAXParser parser = saxFactory.newSAXParser();
+ final DefaultHandler dh = new DefaultHandler();
is = new de.schlichtherle.io.FileInputStream(fichierEntry);
parser.parse(is, dh);
- } catch (Exception ex) {
+ } catch (final Exception ex) {
// le fichier n'est
// pas bien formé
tousFichiersLisibles = false;
fichierElement.addAttribute(new Attribute("added:lisible", Constants.ADDED_NS_URI, "false"));
} finally {
- if (is != null)
+ if (is != null) {
is.close();
+ }
}
}
}
}
}
- Nodes pjAbsentes = manifeste.query("//document[@pjStatus='NC']");
- if (pjAbsentes.size() > 0)
+ final Nodes pjAbsentes = manifeste.query("//document[@pjStatus='NC']");
+ if (pjAbsentes.size() > 0) {
tousFichiersPresents = false;
+ }
manifeste.getRootElement().addAttribute(new Attribute("tous-presents", Boolean.toString(tousFichiersPresents)));
manifeste.getRootElement().addAttribute(new Attribute("tous-lisibles", Boolean.toString(tousFichiersLisibles)));
// de l'archive
// on déplace les archives...
for (int i = 0; i < volumesFiles.size(); i++) {
- File f = volumesFiles.get(i);
+ final File f = volumesFiles.get(i);
// il faut qu'on puisse écrire dedans
f.setWritable(true, false);
if (i == 0) {
- de.schlichtherle.io.File volume1zip = new de.schlichtherle.io.File(f, archiveDetector);
+ final de.schlichtherle.io.File volume1zip = new de.schlichtherle.io.File(f, archiveDetector);
// on réécrit le manifeste
- logger.debug(volume1.getName() + " - réécriture du manifeste");
+ logger.debug(this.volume1.getName() + " - réécriture du manifeste");
try {
- de.schlichtherle.io.File tfManifesteEntry = new de.schlichtherle.io.File(volume1zip, "manifeste_XeMeLios.xml", archiveDetector);
- de.schlichtherle.io.FileOutputStream tfOs = new de.schlichtherle.io.FileOutputStream(tfManifesteEntry, false);
+ final de.schlichtherle.io.File tfManifesteEntry = new de.schlichtherle.io.File(volume1zip, "manifeste_XeMeLios.xml", archiveDetector);
+ final de.schlichtherle.io.FileOutputStream tfOs = new de.schlichtherle.io.FileOutputStream(tfManifesteEntry, false);
try {
tfOs.write(manifeste.toXML().getBytes("UTF-8"));
tfOs.flush();
} finally {
tfOs.close();
}
- } catch (Exception ex) {
- logger.error(volume1.getName() + " - réécriture du manifeste dans le premier volume", ex);
+ } catch (final Exception ex) {
+ logger.error(this.volume1.getName() + " - réécriture du manifeste dans le premier volume", ex);
} finally {
de.schlichtherle.io.File.umount(volume1zip);
}
}
- File dest = new File(archiveDir, f.getName());
+ final File dest = new File(archiveDir, f.getName());
try {
- logger.debug(volume1.getName() + " - déplacement vers " + dest.getParentFile().getAbsolutePath());
- if (dest.exists())
+ logger.debug(this.volume1.getName() + " - déplacement vers " + dest.getParentFile().getAbsolutePath());
+ if (dest.exists()) {
FileUtils.forceDelete(dest);
+ }
FileUtils.moveFile(f, dest);
- } catch (Exception ex) {
+ } catch (final Exception ex) {
logger.error("lors du déplacement", ex);
}
}
- Importer.createImportJob(archiveName, exercice, importScheme, importUser);
+ Importer.createImportJob(archiveName, exercice, Repartitor.this.importScheme, Repartitor.this.importUser);
msg.setInfoCompl(archiveName + " déplacé vers " + archiveDir.getAbsolutePath());
}
}
msg.setInfoCompl(msg.getInfoCompl() + " | " + archiveName + " incomplète");
logger.info(archiveName + " incomplète");
}
- } catch (Exception ex) {
+ } catch (final Exception ex) {
logger.error("RepartitorImpl.run()", ex);
msg.setInfoCompl(ex.getMessage());
msg.setSeverity(Traitement.SEVERITY_ERROR);
- } catch (Error err) {
+ } catch (final Error err) {
msg.setSeverity(Traitement.SEVERITY_ERROR);
msg.setInfoCompl(err.getMessage());
- traitement.addMessage(Traitement.SEVERITY_ERROR, err.getMessage());
+ this.traitement.addMessage(Traitement.SEVERITY_ERROR, err.getMessage());
}
}
}
private class Terminator implements Runnable {
private final Traitement traitement;
- public Terminator(Traitement traitement) {
+ public Terminator(final Traitement traitement) {
super();
this.traitement = traitement;
}
@Override
public void run() {
- traitement.setEnd(System.currentTimeMillis());
+ this.traitement.setEnd(System.currentTimeMillis());
}
}