Browse Source

ajout visuel dans la correction partielle

Rajah 10 months ago
parent
commit
6d34cbff00
1 changed files with 68 additions and 5 deletions
  1. 68 5
      src/fr/triplea/vote/servlet/Production.java

+ 68 - 5
src/fr/triplea/vote/servlet/Production.java

@@ -994,7 +994,7 @@ public final class Production extends HttpServlet
 		bean.setEnregistrementInterdit(!acces.isModificationPermise());
 		bean.setSuppressionInterdite(true);
 		bean.setAction('m');
-		bean.setNombre(7);
+		bean.setNombre(8);
 
 		bean.setChamp(0, "", Fiche.OBJ_INVISIBLE, "ino_prod", ligne.getString("INO_PROD"), 0, 0);
 
@@ -1012,7 +1012,8 @@ public final class Production extends HttpServlet
 		bean.setObligatoire(3, true);
 		bean.setChamp(4, "Groupe(s)", Fiche.OBJ_INPUT, "cgroup_prod", ligne.getString("CGROUP_PROD"), 64, 128);
 		bean.setChamp(5, "Machine utilisée", Fiche.OBJ_INPUT, "cplateforme_prod", ligne.getString("CPLATEFORME_PROD"), 64, 128);
-		bean.setChamp(6, "Commentaire public", Fiche.OBJ_TEXTAREA, "ccommentaire_prod", ligne.getString("CCOMMENTAIRE_PROD"), 64, 10);
+		bean.setChamp(6, "Capture d'écran", Fiche.OBJ_UPLOAD, "bsnapshot_prod", "", 64, 256); 
+		bean.setChamp(7, "Commentaire public", Fiche.OBJ_TEXTAREA, "ccommentaire_prod", ligne.getString("CCOMMENTAIRE_PROD"), 64, 10);
 
 		afficheFiche(request, response, numeroParticipant, contexte, bean);
 	}
@@ -1022,8 +1023,6 @@ public final class Production extends HttpServlet
 	private synchronized void PROD_corriger(HttpServletRequest request, HttpServletResponse response, RecupereParametres rp) throws ServletException, IOException
 	{
 		String contexte = "Modification d'une production";
-
-		// TODO : corriger visuel
 		
 		int numeroParticipant = rp.getNumeroParticipant();
 		int numeroProduction = rp.getInt("ino_prod", 0, true);
@@ -1032,6 +1031,7 @@ public final class Production extends HttpServlet
 		String auteur = rp.getString("cauteur_prod", "", 128, true);
 		String groupe = rp.getString("cgroup_prod", "", 128, false);
 		String plateforme = rp.getString("cplateforme_prod", "", 128, false);
+		MemoireFichier visuel = rp.getFichier("bsnapshot_prod", false);
 		String commentaire = rp.getString("ccommentaire_prod", "", true);
 		boolean depuisCategories = rp.getString("from", "", false).equals("cat");
 		int abandon = rp.getAbandon();
@@ -1048,7 +1048,61 @@ public final class Production extends HttpServlet
 
 		if (type.trim().length() == 0) { type = "AUTRE"; }
 
-		SqlPARAM param = new SqlPARAM();
+		if (visuel.getTaille() > 0) 
+		{
+			try
+			{
+				String mime = visuel.getMime();
+				String format = "jpeg";
+
+				RenderedImage ri = null;
+				
+				if (mime.equals("image/gif"))
+				{
+					format = "gif";
+											
+					ri = ImageIO.read(new ByteArrayInputStream(visuel.getDonnees()));
+				}
+				else 
+				{
+					ImageDecodeParam par_img = null;
+
+					if (mime.equals("image/jpeg") || mime.equals("image/jpg")) { par_img = new JPEGDecodeParam(); format = "jpeg"; }
+					else
+					if (mime.equals("image/png")) { par_img = new PNGDecodeParam(); format = "png"; }
+
+					SeekableStream s = new ByteArraySeekableStream(visuel.getDonnees());
+
+					ImageDecoder dec = ImageCodec.createImageDecoder(format, s, par_img);
+
+					ri = dec.decodeAsRenderedImage(); 
+				}
+				
+				if (ri != null)
+				{
+					Raster ra = ri.getData();
+					
+					BufferedImage bi = new BufferedImage(ri.getColorModel(), Raster.createWritableRaster(ri.getSampleModel(), ra.getDataBuffer(), null), false, new Hashtable<String, String>());
+
+					BufferedImage si = Scalr.resize(bi, Method.QUALITY, 480, Scalr.OP_ANTIALIAS);
+
+					// encodage jpeg et écriture du fichier.
+					ByteArrayOutputStream os = new ByteArrayOutputStream();
+
+					JPEGEncodeParam par_jpg = new JPEGEncodeParam();  
+					par_jpg.setQuality((float)0.95);
+					ImageEncoder encoder = ImageCodec.createImageEncoder("jpeg", os, par_jpg);
+					encoder.encode(si);          
+					visuel.setDonnees(os.toByteArray());
+
+					os.close();
+				}
+			}
+			catch (Exception e) { debug.affiche(numeroParticipant, "Erreur dans la miniaturisation du visuel " + e.toString()); }
+		}
+
+
+	  SqlPARAM param = new SqlPARAM();
 
 		param.addColumn("par_ino_prod", Types.INTEGER);
 		param.addColumn("par_ctype_prod", Types.VARCHAR);
@@ -1056,6 +1110,7 @@ public final class Production extends HttpServlet
 		param.addColumn("par_cauteur_prod", Types.VARCHAR);
 		param.addColumn("par_cgroup_prod", Types.VARCHAR);
 		param.addColumn("par_cplateforme_prod", Types.VARCHAR);
+		param.addColumn("par_bsnapshot_prod", Types.BLOB);
 		param.addColumn("par_ccommentaire_prod", Types.VARCHAR);
 
 		param.setInt("par_ino_prod", numeroProduction);
@@ -1064,6 +1119,7 @@ public final class Production extends HttpServlet
 		param.setString("par_cauteur_prod", auteur);
 		param.setString("par_cgroup_prod", groupe);
 		param.setString("par_cplateforme_prod", plateforme);
+		param.setBlob("par_bsnapshot_prod", visuel.getDonnees());
 		param.setString("par_ccommentaire_prod", commentaire);
 
 		SqlORDER ordre = new SqlORDER(pool, numeroParticipant);
@@ -1072,6 +1128,13 @@ public final class Production extends HttpServlet
 
 		if (abandon != 0) { afficheErreur(request, response, numeroParticipant, contexte.trim(), commun.MSG_get(46)); return; }
 
+		if (visuel.getTaille() > 0) 
+		{ 
+			abandon = ordre.execute("UPDATE VOTE.PRODUCTIONS SET BSNAPSHOT_PROD = :par_bsnapshot_prod WHERE INO_PROD = :par_ino_prod ", param, debug);
+
+			if (abandon != 0) { afficheErreur(request, response, numeroParticipant, contexte.trim(), commun.MSG_get(46)); return; }
+		}
+		
 		Alerte bean = new Alerte();
 		bean.setTitre("Modification");
 		bean.setMessage("Certaines informations sur la production ont été corrigés.");