use of fr.univlorraine.ecandidat.entities.ecandidat.Fichier in project esup-ecandidat by EsupPortail.
the class CandidaturePieceController method removeFileToPj.
/* @Transactional(rollbackFor=FileException.class) public void
* removeFileToPj(PjCand pjCand) throws FileException{ Fichier fichier =
* pjCand.getFichier(); pjCandRepository.delete(pjCand); if (fichier != null){
* fileController.deleteFichier(fichier,false); } } */
/**
* Supprime un fichier d'une PJCand
* @param pjCand
*/
public void removeFileToPj(final PjCand pjCand) {
final Fichier fichier = pjCand.getFichier();
final PjCandPK idPjCand = pjCand.getId();
pjCandRepository.delete(pjCand);
if (fichier != null) {
FichierFiabilisation fichierFiabilisation = new FichierFiabilisation(fichier);
fichierFiabilisation.setIdPj(idPjCand.getIdPj());
fichierFiabilisation.setIdCand(idPjCand.getIdCand());
fichierFiabilisation = fichierFiabilisationRepository.save(fichierFiabilisation);
try {
fileController.deleteFichier(fichier);
fichierFiabilisationRepository.delete(fichierFiabilisation);
} catch (final FileException e) {
}
}
}
use of fr.univlorraine.ecandidat.entities.ecandidat.Fichier in project esup-ecandidat by EsupPortail.
the class CandidaturePieceController method addFileToPieceJustificative.
/**
* Ajoute un fichier a une pj
* @param pieceJustif
* @param candidature
* @param listener
*/
public void addFileToPieceJustificative(final PjPresentation pieceJustif, final Candidature candidature, final CandidatureListener listener) {
/* Verification que le service n'est pas en maintenance */
if (fileController.isFileServiceMaintenance(true)) {
return;
}
Assert.notNull(candidature, applicationContext.getMessage("assert.notNull", null, UI.getCurrent().getLocale()));
/* Verrou */
if (!lockCandidatController.getLockOrNotifyCandidature(candidature)) {
return;
}
final String user = userController.getCurrentNoDossierCptMinOrLogin();
final String cod = ConstanteUtils.TYPE_FICHIER_PJ_CAND + "_" + candidature.getCandidat().getCompteMinima().getNumDossierOpiCptMin() + "_" + candidature.getIdCand() + "_" + pieceJustif.getPieceJustif().getIdPj();
final UploadWindow uw = new UploadWindow(cod, ConstanteUtils.TYPE_FICHIER_CANDIDAT, candidature, pieceJustif.getPJCommune(), false);
uw.addUploadWindowListener(file -> {
if (file == null) {
return;
}
/* Verrou */
if (!lockCandidatController.getLockOrNotifyCandidature(candidature)) {
return;
}
final PjCandPK pk = new PjCandPK(pieceJustif.getPieceJustif().getIdPj(), pieceJustif.getIdCandidature());
PjCand pjCand = pjCandRepository.findOne(pk);
if (pjCand == null) {
pjCand = new PjCand(pk, user, candidature, pieceJustif.getPieceJustif());
}
final Fichier fichier = fileController.createFile(file, user, ConstanteUtils.TYPE_FICHIER_CANDIDAT);
if (isPjModified(pieceJustif, candidature, true, listener)) {
FichierFiabilisation fichierFiabilisation = new FichierFiabilisation(fichier);
fichierFiabilisation = fichierFiabilisationRepository.save(fichierFiabilisation);
try {
fileController.deleteFichier(fichier);
fichierFiabilisationRepository.delete(fichierFiabilisation);
} catch (final FileException e) {
}
uw.close();
return;
}
pjCand.setLibFilePjCand(fichier.getNomFichier());
pjCand.setUserModPjCand(user);
pjCand.setFichier(fichier);
final TypeStatutPiece statutTr = tableRefController.getTypeStatutPieceTransmis();
pjCand.setTypeStatutPiece(statutTr);
pjCandRepository.save(pjCand);
// obligé de recharger l'objet car le datetime est arrondi :(
final PjCand pjCandSave = pjCandRepository.findOne(pk);
pieceJustif.setFilePj(fichier);
pieceJustif.setCodStatut(statutTr.getCodTypStatutPiece());
pieceJustif.setLibStatut(i18nController.getI18nTraduction(statutTr.getI18nLibTypStatutPiece()));
pieceJustif.setDatModification(pjCandSave.getDatModPjCand());
candidature.setUserModCand(user);
candidature.updatePjCand(pjCandSave);
candidature.setDatModCand(LocalDateTime.now());
final Candidature candidatureSave = candidatureRepository.save(candidature);
listener.pjModified(pieceJustif, candidatureSave);
Notification.show(applicationContext.getMessage("window.upload.success", new Object[] { file.getFileName() }, UI.getCurrent().getLocale()), Type.TRAY_NOTIFICATION);
uw.close();
});
UI.getCurrent().addWindow(uw);
}
use of fr.univlorraine.ecandidat.entities.ecandidat.Fichier in project esup-ecandidat by EsupPortail.
the class CandidaturePieceController method removeFileToPjManually.
/**
* Utilisé dans le bacth de destruction Les fichiers physiques doivent être
* supprimés à la main
* @param pjCand
* @throws FileException
*/
public void removeFileToPjManually(final PjCand pjCand) throws FileException {
final Fichier fichier = pjCand.getFichier();
pjCandRepository.delete(pjCand);
if (fichier != null) {
fichierRepository.delete(fichier);
}
}
use of fr.univlorraine.ecandidat.entities.ecandidat.Fichier in project esup-ecandidat by EsupPortail.
the class CandidatureController method downloadDossier.
/**
* telecharge le dossier
* @param candidature
* @param listePresentation
* @param listeDatePresentation
* @param listePj
* @param listeForm
* @param addPj
* @return l'InputStream du dossier
*/
public OnDemandFile downloadDossier(final Candidature candidature, final List<SimpleTablePresentation> listePresentation, final List<SimpleTablePresentation> listeDatePresentation, final List<PjPresentation> listePj, final List<FormulairePresentation> listeForm, final Boolean addPj) {
/* Variables utiles */
final String numDossier = candidature.getCandidat().getCompteMinima().getNumDossierOpiCptMin();
final String nom = candidature.getCandidat().getNomPatCandidat();
final String prenom = candidature.getCandidat().getPrenomCandidat();
final String codForm = candidature.getFormation().getCodForm();
final String libForm = candidature.getFormation().getLibForm();
/* Nom du fichier */
final String fileName = applicationContext.getMessage("candidature.download.file", new Object[] { numDossier, nom, prenom, codForm }, UI.getCurrent().getLocale());
// Les parametres des PJ
final Boolean enableAddApogeePJDossier = parametreController.getIsAddApogeePJDossier();
// Font
final PDFont font = PDType1Font.HELVETICA_BOLD;
// le dossier outStream
ByteArrayInputStream bisDossier = null;
// liste des InputStream à fermer
final List<InputStream> listeInputStreamToClose = new ArrayList<>();
/* Génération du dossier principal */
try {
bisDossier = generateDossier(candidature, listePresentation, listeDatePresentation, listePj, listeForm);
if (bisDossier == null) {
Notification.show(applicationContext.getMessage("candidature.download.error", null, UI.getCurrent().getLocale()), Type.WARNING_MESSAGE);
return null;
}
} catch (IOException | XDocReportException e2) {
Notification.show(applicationContext.getMessage("candidature.download.error", null, UI.getCurrent().getLocale()), Type.WARNING_MESSAGE);
logger.error("erreur a la génération du dossier", e2);
return null;
}
ByteArrayInOutStream out = new ByteArrayInOutStream();
InputStream is = null;
try {
/* Merger */
final PDFMergerUtility ut = new PDFMergerUtility();
/* Propriétés du document */
final PDDocumentInformation info = new PDDocumentInformation();
info.setTitle(numDossier + "_" + nom + "_" + prenom + "_" + codForm);
info.setAuthor(ConstanteUtils.APP_NAME);
info.setSubject(nom + " " + prenom + " (" + numDossier + ") / " + libForm + " (" + codForm + ")");
final Calendar calendar = Calendar.getInstance(UI.getCurrent().getLocale());
info.setCreationDate(calendar);
info.setModificationDate(calendar);
ut.setDestinationDocumentInformation(info);
/* Ajout du dossier */
ut.addSource(bisDossier);
/* Gestion des erreurs de pj */
Boolean errorAddPj = false;
final List<String> fileNameError = new ArrayList<>();
/* Calcul si besoin d'ajouter les pj */
Integer nbFilePJ = 0;
for (final PjPresentation pj : listePj) {
if (pj.getFilePj() != null) {
nbFilePJ++;
}
}
if (addPj && nbFilePJ > 0 && !fileController.isFileServiceMaintenance(applicationContext.getMessage("file.service.maintenance.dossier", null, UI.getCurrent().getLocale()))) {
for (final PjPresentation e : listePj) {
// listePj.forEach(e->{
try {
// titre header
final String textHeader = e.getLibPj();
// PJ doit etre à true
if (e.getFilePj() != null && (e.getPjCandidatFromApogee() == null || (e.getPjCandidatFromApogee() != null && enableAddApogeePJDossier))) {
final Fichier file = e.getFilePj();
final String nameFile = file.getNomFichier();
final InputStream inputStreamFile = fileController.getInputStreamFromPjPresentation(e);
// on doit fermer l'inputStream apres le merge donc je stock le stream et le ferme apres
listeInputStreamToClose.add(inputStreamFile);
// cas du PDF
if (inputStreamFile != null && MethodUtils.isPdfFileName(nameFile)) {
// chargement du pdf avant de l'ajouter -> evite de compiler avec des fichiers corrompus
final BufferedInputStream bufferedInputStreamFile = new BufferedInputStream(inputStreamFile);
// on doit fermer l'inputStream apres le merge donc je stock le stream et le ferme apres
listeInputStreamToClose.add(bufferedInputStreamFile);
try {
// on place un marker au max du buffer du stream (mark = nb byte qu'il peut lire avant d'etre invalide.. mais comme on lit tout le fichier..)
bufferedInputStreamFile.mark(ConstanteUtils.MAX_BUFFER_SIZE);
// lecture du fichier pour vérifier s'il n'est pas corrompue
final PDDocument doc = PDDocument.load(bufferedInputStreamFile);
// cloture immédiate du fichier pour libérer la mémoire
MethodUtils.closeRessource(doc);
// on replace le bufferedInputStreamFile au début
bufferedInputStreamFile.reset();
// on ajoute l'inputStream
ut.addSource(bufferedInputStreamFile);
} catch (final Exception ex1) {
logger.warn("fichier pdf '" + nameFile + "' en erreur et non ajouté au dossier '" + fileName + "'", ex1);
errorAddPj = true;
fileNameError.add(nameFile);
}
} else if (inputStreamFile != null && MethodUtils.isImgFileName(nameFile)) {
// creation document
final PDDocument document = new PDDocument();
final ByteArrayInOutStream baosImg = new ByteArrayInOutStream();
ByteArrayInputStream bis = null;
try {
// chargement page A4
final PDRectangle PAGE_SIZE_A4 = PDRectangle.A4;
// creation page
final PDPage page = new PDPage(PAGE_SIZE_A4);
// ajout de la page
document.addPage(page);
// Stream du document
final PDPageContentStream contentStream = new PDPageContentStream(document, page);
// margin top est calculée si un text de titre a été ajouté
Float marginTop = addHeaderPJ(textHeader, font, PAGE_SIZE_A4, contentStream);
// on ajoute la marge sous le text (ou la marge depuis le haut du doc si pas de
// text)
marginTop = marginTop + ConstanteUtils.DOSSIER_MARGIN;
// creation de l'image
PDImageXObject img = null;
// JPG
if (MethodUtils.isJpgFileName(nameFile)) {
img = JPEGFactory.createFromStream(document, inputStreamFile);
} else // PNG
if (MethodUtils.isPngFileName(nameFile)) {
img = LosslessFactory.createFromImage(document, ImageIO.read(inputStreamFile));
}
// calcul de la largeur et hauteur de l'image
Float imgWidth = (float) img.getWidth();
Float imgHeight = (float) img.getHeight();
// calcul de la largeur et hauteur de la page moins les deux marges
final Float a4Width = PAGE_SIZE_A4.getWidth() - 2 * ConstanteUtils.DOSSIER_MARGIN;
final Float a4Height = PAGE_SIZE_A4.getHeight() - ConstanteUtils.DOSSIER_MARGIN - marginTop;
// calcul du coef à appliquer si l'image est trop grande
Float coef = 1.0f;
if (imgWidth > a4Width) {
coef = a4Width / imgWidth;
imgWidth = imgWidth * coef;
imgHeight = imgHeight * coef;
}
// le nouveau coef
if (imgHeight > a4Height) {
coef = a4Height / imgHeight;
imgWidth = imgWidth * coef;
imgHeight = imgHeight * coef;
}
// ecriture de l'image
contentStream.drawImage(img, ConstanteUtils.DOSSIER_MARGIN, PAGE_SIZE_A4.getHeight() - imgHeight - marginTop, imgWidth, imgHeight);
// il faut d'abord fermer le flux
MethodUtils.closeRessource(contentStream);
document.save(baosImg);
/* Creation du flux */
bis = baosImg.getInputStream();
/* Ajout de la page au document */
ut.addSource(bis);
} catch (final Exception e1) {
errorAddPj = true;
fileNameError.add(nameFile);
logger.warn("fichier image '" + nameFile + "' en erreur et non ajouté au dossier '" + fileName + "'", e1);
} finally {
/* Nettoyage des ressources */
MethodUtils.closeRessource(document);
MethodUtils.closeRessource(bis);
MethodUtils.closeRessource(baosImg);
}
}
}
} catch (final Exception e1) {
errorAddPj = true;
final String nameFile = e.getFilePj() != null ? e.getFilePj().getNomFichier() : "-";
if (e.getFilePj() != null) {
fileNameError.add(e.getFilePj().getNomFichier());
}
logger.warn("fichier '" + nameFile + "' en erreur et non ajouté au dossier '" + fileName + "'", e1);
}
}
}
if (errorAddPj) {
String fileNamesError = "";
if (fileNameError.size() > 0) {
fileNamesError = " : " + fileNameError.stream().collect(Collectors.joining(", "));
}
Notification.show(applicationContext.getMessage("candidature.download.encoding.pj", null, UI.getCurrent().getLocale()) + fileNamesError, Type.WARNING_MESSAGE);
}
ut.setDestinationFileName(fileName);
ut.setDestinationStream(out);
ut.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
is = pdfManager.cryptAndSignPdf(out, UI.getCurrent().getLocale());
return new OnDemandFile(fileName, is);
} catch (final Exception e) {
logger.warn("erreur a la génération du dossier '" + fileName + "'", e);
try {
out = new ByteArrayInOutStream();
final PDFMergerUtility ut = new PDFMergerUtility();
ut.addSource(generateDossier(candidature, listePresentation, listeDatePresentation, listePj, listeForm));
ut.setDestinationFileName(fileName);
ut.setDestinationStream(out);
ut.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
is = pdfManager.cryptAndSignPdf(out, UI.getCurrent().getLocale());
Notification.show(applicationContext.getMessage("candidature.download.error.pj", null, UI.getCurrent().getLocale()), Type.WARNING_MESSAGE);
return new OnDemandFile(fileName, is);
} catch (final Exception e2) {
Notification.show(applicationContext.getMessage("candidature.download.error", null, UI.getCurrent().getLocale()), Type.WARNING_MESSAGE);
logger.error("erreur a la génération du dossier", e2);
return null;
}
} finally {
// fermeture des fichiers
MethodUtils.closeRessource(is);
MethodUtils.closeRessource(out);
MethodUtils.closeRessource(bisDossier);
/* besoin de fermer les pdf apres coup */
listeInputStreamToClose.forEach(inputStreamFile -> {
MethodUtils.closeRessource(inputStreamFile);
});
listeInputStreamToClose.clear();
}
}
use of fr.univlorraine.ecandidat.entities.ecandidat.Fichier in project esup-ecandidat by EsupPortail.
the class CommissionController method deleteFileToSignataire.
/**
* Supprime un fichier d'une commission
* @param commission
*/
public void deleteFileToSignataire(final Commission commission) {
/* Vérifie si le service de fichier est en maintenance */
if (fileController.isFileServiceMaintenance(true)) {
return;
}
/* Verrou */
if (!lockController.getLockOrNotify(commission, null)) {
return;
}
if (!fileController.isModeFileStockageOk(commission.getFichier(), true)) {
return;
}
final Fichier fichier = commission.getFichier();
if (fichier == null) {
Notification.show(applicationContext.getMessage("file.error", null, UI.getCurrent().getLocale()), Type.WARNING_MESSAGE);
lockController.releaseLock(commission);
return;
}
final ConfirmWindow confirmWindow = new ConfirmWindow(applicationContext.getMessage("file.window.confirmDelete", new Object[] { fichier.getNomFichier() }, UI.getCurrent().getLocale()), applicationContext.getMessage("file.window.confirmDeleteTitle", null, UI.getCurrent().getLocale()));
confirmWindow.addBtnOuiListener(file -> {
removeFileToCommission(commission, fichier);
});
confirmWindow.addCloseListener(e -> lockController.releaseLock(commission));
UI.getCurrent().addWindow(confirmWindow);
}
Aggregations