--- /dev/null
+/*******************************************************************************
+ * Copyright � Igor Barma, Alexandre Desoubeaux, Christian Martel, Eric Brun, Mathieu Amblard, Gwenael Gevet, Pierre Guillot, 2012
+ * Copyright Alexandre Desoubeaux, Christian Martel, Cedric Lecarpentier, Alexandre Lefevre, Marc Salvat 2014-2016
+ * Copyright Alexandre Desoubeaux, Christian Martel, Cedric Lecarpentier, Marc Salvat, Marc Suarez, Harifetra Ramamonjy 2017
+ *
+ * This file is part of the work and learning management system Pentila Nero.
+ *
+ * Pentila Nero is free software. You can redistribute it and/or modify since
+ * you respect the terms of either (at least one of the both license) :
+ * - under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * - the CeCILL-C as published by CeCILL-C; either version 1 of the
+ * License, or any later version
+ * - the GNU Lesser General Public License as published by the
+ * Free Software Foundation, either version 3 of the license,
+ * or (at your option) any later version.
+ *
+ * There are special exceptions to the terms and conditions of the
+ * licenses as they are applied to this software. View the full text of
+ * the exception in file LICENSE-PROJECT.txt in the directory of this software
+ * distribution.
+ *
+ * Pentila Nero is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Licenses for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * and the CeCILL-C and the GNU Lesser General Public License along with
+ * Pentila Nero. If not, see :
+ * <http://www.gnu.org/licenses/> and
+ * <http://www.cecill.info/licences.fr.html>.
+ ******************************************************************************/
+package com.pentila.entSavoie.blogEntryInfos.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import com.liferay.portal.kernel.exception.PortalException;
+import com.liferay.portal.kernel.exception.SystemException;
+import com.liferay.portal.kernel.util.FileUtil;
+import com.liferay.portal.kernel.util.ObjectValuePair;
+import com.liferay.portlet.documentlibrary.conversion.util.ENTDocumentConversionServiceUtil;
+import com.pentila.entSavoie.blogEntryInfos.model.BlogEntryInfos;
+import com.pentila.entSavoie.blogEntryInfos.service.BlogEntryInfosLocalServiceUtil;
+import com.pentila.entSavoie.utils.ENTMainUtilsLocalServiceUtil;
+
+
+public class ThreadAddFlashFile extends Thread{
+
+ private String originalTitle;
+ private List<Long> beiIds;
+ private List<BlogEntryInfos> blogEntryInfos;
+ private InputStream is;
+ private String sourceExtension;
+ private String targetExtension;
+ private boolean needConversion;
+ private long companyId;
+ private String idConverted;
+
+ public ThreadAddFlashFile(String idConverted, String originalTitle, List<Long> beiIds, InputStream is, String sourceExtension, String targetExtension, boolean needConversion, long companyId) {
+ this.originalTitle = originalTitle;
+ this.is = is;
+ this.sourceExtension = sourceExtension;
+ this.targetExtension = targetExtension;
+ this.needConversion = needConversion;
+ this.beiIds = beiIds;
+ this.blogEntryInfos = null;
+ this.companyId = companyId;
+ this.idConverted = idConverted;
+ }
+
+ public ThreadAddFlashFile(String originalTitle, List<BlogEntryInfos> blogEntryInfos, InputStream is, String sourceExtension, String targetExtension, boolean needConversion, long companyId) {
+ this.originalTitle = originalTitle;
+ this.is = is;
+ this.sourceExtension = sourceExtension;
+ this.targetExtension = targetExtension;
+ this.needConversion = needConversion;
+ this.beiIds = null;
+ this.blogEntryInfos = blogEntryInfos;
+ this.companyId = companyId;
+ }
+
+ public void run() {
+ //Conversion du fichier
+ try {
+ InputStream flashIS = this.is;
+
+ String state = ENTMainUtilsLocalServiceUtil.getFlashFileStateConvert(this.companyId);
+
+ if(this.needConversion){
+ try {
+ File file = ENTDocumentConversionServiceUtil.convert(this.idConverted, this.is, this.sourceExtension, this.targetExtension);
+ flashIS = new FileInputStream(file);
+ } catch (IOException e) {
+ e.printStackTrace();
+ state = ENTMainUtilsLocalServiceUtil.getFlashFileStateError(this.companyId);
+
+ File f = new File(ENTMainUtilsLocalServiceUtil.getFileErrorFlv(this.companyId));
+ this.originalTitle = "erreur";
+ flashIS = new FileInputStream(f);
+ }
+ }
+
+ //On transforme l'InputStream En Tableau de Bytes
+ byte[] flashByteArray = FileUtil.getBytes(flashIS);
+
+ if ( beiIds != null) {
+ for(Long beiId: this.beiIds){
+ BlogEntryInfos bei = BlogEntryInfosLocalServiceUtil.getBlogEntryInfos(beiId);
+ updateFlashFileStateForBlogEntryInfos(bei, flashByteArray, state);
+ }
+ }
+ else {
+ for(BlogEntryInfos bei: this.blogEntryInfos){
+ updateFlashFileStateForBlogEntryInfos(bei, flashByteArray, state);
+ }
+ }
+
+ } catch (Exception e) {
+ System.out.println("erreur de thread TAFF");
+ e.printStackTrace();
+ } finally {
+ try {
+ this.is.close();
+ } catch (IOException e) {}
+ }
+ }
+
+ private void updateFlashFileStateForBlogEntryInfos(BlogEntryInfos bei, byte[] flashByteArray, String state) throws PortalException, SystemException {
+ try{
+ ObjectValuePair<String, byte[]> ovp = new ObjectValuePair<String, byte[]>();
+ ovp.setKey(this.originalTitle + "." + this.targetExtension);
+ ovp.setValue(flashByteArray);
+
+ BlogEntryInfosLocalServiceUtil.updateFlashFile(bei.getBlogEntryInfosId(), ovp, BlogEntryInfosLocalServiceUtil.getFlashFile(this.companyId, bei));
+
+ } finally {
+ //Set de l'etat à la fin pour être sur qu'il a bien posé le fichier
+ bei.setFlashFileState(state);
+ BlogEntryInfosLocalServiceUtil.updateBlogEntryInfos(bei, false);
+ }
+ }
+
+}