lundi 26 octobre 2009

java : export excel et flux a telecharger

Voici un petit code permettant de realiser un export Excel et de le recevoir par une servlet ... Cet exemple s'appuie sur la librairie POI d'apache :


public void exportExcelCsa(ArrayList pTitreColonne, ArrayList pIndiceColonne, ArrayList pListe,
HttpServletResponse pReponseHttp, final boolean pTest, final String pNomFichier) throws FretOrchestreException {

// creation d'un classeur
final HSSFWorkbook vClasseurExcel = new HSSFWorkbook();
// creation des styles
// police des titres
final HSSFFont vFontHeader = vClasseurExcel.createFont();
vFontHeader.setFontHeightInPoints((short) 10);
vFontHeader.setFontName("Times New Roman");
vFontHeader.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
vFontHeader.setColor(HSSFColor.WHITE.index);
// style des cellules de titres
final HSSFCellStyle vStyleTitreColonne = vClasseurExcel.createCellStyle();
vStyleTitreColonne.setFillForegroundColor(HSSFColor.SEA_GREEN.index);
vStyleTitreColonne.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
vStyleTitreColonne.setFont(vFontHeader);
vStyleTitreColonne.setBorderBottom(HSSFCellStyle.BORDER_THIN);
vStyleTitreColonne.setBottomBorderColor(HSSFColor.BLACK.index);
vStyleTitreColonne.setBorderLeft(HSSFCellStyle.BORDER_THIN);
vStyleTitreColonne.setLeftBorderColor(HSSFColor.BLACK.index);
vStyleTitreColonne.setBorderRight(HSSFCellStyle.BORDER_THIN);
vStyleTitreColonne.setRightBorderColor(HSSFColor.BLACK.index);
vStyleTitreColonne.setBorderTop(HSSFCellStyle.BORDER_THIN);
vStyleTitreColonne.setTopBorderColor(HSSFColor.BLACK.index);
vStyleTitreColonne.setAlignment(HSSFCellStyle.ALIGN_CENTER);
vStyleTitreColonne.setWrapText(true);
// police des données
final HSSFFont vFont = vClasseurExcel.createFont();
vFont.setFontHeightInPoints((short) 10);
vFont.setFontName("Times New Roman");
// style des cellules de données
final HSSFCellStyle vStyleDonnees = vClasseurExcel.createCellStyle();
vStyleDonnees.setBorderBottom(HSSFCellStyle.BORDER_THIN);
vStyleDonnees.setBottomBorderColor(HSSFColor.BLACK.index);
vStyleDonnees.setBorderLeft(HSSFCellStyle.BORDER_THIN);
vStyleDonnees.setLeftBorderColor(HSSFColor.BLACK.index);
vStyleDonnees.setBorderRight(HSSFCellStyle.BORDER_THIN);
vStyleDonnees.setRightBorderColor(HSSFColor.BLACK.index);
vStyleDonnees.setBorderTop(HSSFCellStyle.BORDER_THIN);
vStyleDonnees.setTopBorderColor(HSSFColor.BLACK.index);
vStyleDonnees.setFont(vFont);
vStyleDonnees.setAlignment(HSSFCellStyle.ALIGN_LEFT);

/* creation de l'onglet Recherche */
final String vTitre = "Recherche";
final HSSFSheet vOnglet = vClasseurExcel.createSheet(vTitre);
//genererEnTeteEtPiedDePage(vTitre, vOnglet, true);

/* Titre des colonnes. */
creerLigneTitre(vOnglet, pTitreColonne, vStyleTitreColonne);

/* Contenu de la liste pour la version retraitée. */
creerContenuFretListe(vOnglet, pListe, pIndiceColonne, vStyleDonnees);

/* Génération en tete et pied de page. */
final HSSFHeader vEnTete = vOnglet.getHeader();
vEnTete.setLeft("Commandes en saisie");

final HSSFFooter vPiedDePage = vOnglet.getFooter();
final SimpleDateFormat vSimpleDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
vPiedDePage.setLeft(vSimpleDateFormat.format(new Date()));
vPiedDePage.setRight(HSSFFooter.page() + " / " + HSSFFooter.numPages());

OutputStream vOutput = null;
try {
// flux de sortie
if (pTest) {
final FileOutputStream vFileOut = new FileOutputStream("c:\\" + pNomFichier + ".xls");
vClasseurExcel.write(vFileOut);
vFileOut.close();
} else {
vOutput = pReponseHttp.getOutputStream();
pReponseHttp.setContentType("application/vnd.ms-excel");
pReponseHttp.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
pReponseHttp.setHeader("Pragma", "public");
pReponseHttp.setDateHeader("Expires", 0);
pReponseHttp.setHeader("Content-disposition", "attachment;filename=\"" + pNomFichier + ".xls\"");
pReponseHttp.setStatus(HttpServletResponse.SC_OK);

vClasseurExcel.write(vOutput);
}
} catch (Exception vExc) {
sLog.error("Echec d'enregistrement du fichier généré (échec d'écriture, répértoire inconnu,...)" + vExc.getMessage());
} finally {
//fermeture du flux
try {
if (vOutput != null) {
vOutput.close();
}
} catch (IOException vIoExce) {
sLog.error("Echec d'enregistrement du fichier généré (échec d'écriture, répertoire inconnu,...)" + vIoExce.getMessage());
}
}
}

vendredi 23 octobre 2009

putty : exporter et importer rapidement la configuration de putty

Pour l'export de configuration, il suffit d'exporter la clé de registre suivante, via la commande ms-dos :

regedit /e putty.reg HKEY_CURRENT_USER/Software/SimonTatham/PuTTY/Sessions


Pour l'import de configuration, il suffit d'importer la clé de registre suivante, via la commande ms-dos :

regedit /s putty.reg

Il est aussi possible de le faire via l'ihm de regedit

jeudi 8 octobre 2009

oracle : trouver si des tables, vues ou objets divers existent ...


Une question qui se pose souvent est de savoir si un objet, une table, une vue, un synonyme est présent ou non dans une base ...

Voici une petite requête utile :

select * from dba_objects where object_name like 'VBORFMRPA'



et voila ... on peut voir si le synonyme existe par exemple et qui en est le propriétaire ... Voilou ..

lundi 5 octobre 2009

java : générer des daigrammes de séquences avec jtracert

Il s'agit d'un outil qui instrumente la JVM (1.5 ou > ) lors de son fonctionnement. Pour cela, il suffit de télécharger jtracert et installer le GUI. Une fois cette opération terminée, vous n'avez qu'a rajouter les paramètres de lancement suivant à la ligne de commande :

-javaagent:D:\MesDocs\mySoft\jtrace\jTracert.jar=7007

Vous lancer alors le GUI et cliquer sur le noeud package ...



Ceci va vous permettre de visualiser le digramme. Un filtrage sur les classe est possible, ainsi que la sélection du répertoire d'export des diagrammes ...



Ceci fonctionne aussi pour les applications J2EE. il suffit d'ajouter cette ligne à catalinat.bat pour tomcat :

set JAVA_OPTS=-DanalyzerOutput=sdEditRtClient -DsdEditHost=127.0.0.1 -DsdEditPort=60001 -javaagent:"chemin librairie"\jTracert.jar=7007 %JAVA_OPTS%

A noter, que je n'ai pas eu le temps de tester ce programme avec tomcat ... Cet outil semble bien fonctionner et permet une analyse rapide du code ...

jeudi 1 octobre 2009

selenium : les utiliser en junit

Voici un petit exemple, de script enregistrer sous Selenium IDE, puis exporter en junit ...

Après c'est simple, il suffit d'exporter l'ensemble en junit, de créer un projet sous eclipse, en ajoutant une jre > 1.5 et télécharger le serveur selenium Remote Control.

Ce dernier nous fournira le serveur , et un jar client pour lancer les commandes selenium à notre browser (selenium-java-client-driver.jar).

Avant de lancer un test unitaire, il faut avoir lancer le serveur par une commande du type :
"C:\Program Files\Java\jre1.6.0_05\bin\java.exe" -jar selenium-server.jar

Et ensuite voici, la classe obtenue après export ... d'un test enregistrer sous Firefox avec Selenium IDE. A noter que ce dernier sera executé sous IE ...





import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;

public class TestBoc extends SeleneseTestCase {
public void setUp() throws Exception {
// setUp("http://change-this-to-the-site-you-are-testing/", "*chrome");
setUp("http://change-this-to-the-site-you-are-testing/", "*iexplore");
}

public void testBoc() throws Exception {
selenium.open("http://www.yahoo.fr");
selenium.type("login", "toto");
selenium.type("password", "titi");
selenium.select("module", "label=Orchestre");
selenium.click("link=Valider");
selenium.waitForPageToLoad("30000");
selenium.click("brechercher");
selenium.waitForPageToLoad("30000");
for (int second = 0;; second++) {
if (second >= 60) fail("timeout");
try { if ("24903".equals(selenium.getText("//tr[@id='l1']/td[2]"))) break; } catch (Exception e) {}
Thread.sleep(1000);
}

verifyTrue(selenium.isTextPresent("24903"));
selenium.click("link=D\u233connexion");
}
}

java : regexp

Les regexp sont très utile pour les traitements complexes sur les chaines (par ex.: recherche, remplacement).

Voici un petit exemple de regexp qui recherche des mots du type :
\b((Req)*(Int((Min\d+)*)(Max\d+)*))\b

Ce dernier va trouver la chaine en gras .. et pas une autre ... On notera que les \b sont les frontières des mots ... et les * (0 ou plusieurs) sont des indicateurs optionnels ... les + sont 1 ou plus ...

helolo ca marche super ReqIntMin200Max300 eReqIntMin200Max300

voici des regexp utiles (trouve sur cette très bonne page ):

un nom d'utilisateur
/[a-zA-Z0-9_]{3,16}/

trouver un tag XML/XHTML
{<tag[^>]*>(.*?)</tag>}

trouver un tag XML/XHTML avec une valeur particulière
{<tag[^>]*attribute\\s*=\\s*(["'])value\\\\1[^>]*>(.*?)</tag>}

vendredi 25 septembre 2009

javascript : loggin avec blackbird



Blackbird est une librairie très utile permettant de logger sous javascript dans une console externe, et fonctionnant sous IE6 + ... et la plupart des autres navigateurs:

Pour mettre en place, le système il faut télécharger la librairie, et y faire référence dans la page html. Voici, un petit exemple ... A noter, que des raccourcis permette d'afficher ou non la console (F2) , de filtrer les messages, et aussi de profiler les fonctions en utilisant une etiquettes.


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script type="text/javascript" src="../js/blackbird.js" ></script>
<link type="text/css" rel="Stylesheet" href="../js/blackbird.css" ></link>
</head>
<body>
<script type="text/javascript" language="javascript">
function testLog()
{
log.profile('testLog');
log.debug(new Date());
log.info(new Date());
log.error('erreur');
log.profile('testLog');
}
</script>
<h3>ceci est un test blackbird</h3>
<a href="javascript:testLog()">testLog</a>
</body>
</html>



et voila .. il est possible de logger simplement et elegamment