Calendrier de vacances avec Java

January 7th, 2012 | by | geek, java, web

Jan
07

Le but de mon code est de vous permettre d’avoir une visibilité sur les jours de vacances en France dans vos applications et surtout l’utilisation d’un référentiel des jours fériés qui est Google Calendar.

Pour cela, nous allons récupérer à travers le service de google un fichier au format ICS contenant la liste des événements tout au long de l’année courante.

Après une petite recherche sur google, nous arrivons sur le projet iCal4j offrant une petite bibliothèque capable de nous aider à exploiter les fichiers ICS.

Pour l’utilisation de cette Bibliothèque, nous l’avons ajouté dans nos dépendances maven à travers le code suivant :

  1. <dependency>
  2.    <groupId>org.mnode.ical4j</groupId>
  3.    <artifactId>ical4j</artifactId>
  4.    <version>1.0.2</version>
  5. </dependency>



Par la suite cette petite application en guise de démonstration.

  1. package com.nihed;
  2.  
  3. import java.io.InputStream;
  4. import java.net.URL;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Date;
  7. import java.util.Iterator;
  8. import net.fortuna.ical4j.data.CalendarBuilder;
  9. import net.fortuna.ical4j.model.Calendar;
  10. import net.fortuna.ical4j.model.Component;
  11. import net.fortuna.ical4j.model.Property;
  12.  
  13. /**
  14.  * @author Nihed MBAREK
  15.  * @version 0.1
  16.  *
  17.  */
  18. public class App {
  19.    
  20.     //Initialisation des constantes
  21.     public static final String DATE_BEGIN = "20120101";
  22.     public static final String DATE_END = "20121231";
  23.     public static final String DD_MM_YYYY = "dd/MM/yyyy";
  24.     public static final String DTSTART = "DTSTART";
  25.     public static final String GOOGLE_URL = "https://www.google.com/"
  26.             + "calendar/ical/"
  27.             + "fr.french%23holiday%40group.v.calendar.google.com"
  28.             + "/public/basic.ics";
  29.     public static final String SUMMARY = "SUMMARY";
  30.     public static final String pattern = "yyyyMMdd";
  31.  
  32.     public static void main(String[] args) {
  33.         try {
  34.             //Init
  35.             final Date dateEnd = (new SimpleDateFormat(pattern)).parse(DATE_END);
  36.             final Date dateBegin = (new SimpleDateFormat(pattern)).parse(DATE_BEGIN);
  37.  
  38.             //Mise en place du stream pour la récupération du fichier ICS
  39.             final InputStream stream = new URL(GOOGLE_URL).openStream();
  40.             CalendarBuilder builder = new CalendarBuilder();
  41.             //Consommation du Stream et remplissage de l’objet calendar
  42.             Calendar calendar = builder.build(stream);
  43.             //Parcour du calendar pour récuperer les évenements
  44.             for (Iterator it = calendar.getComponents().iterator(); it.hasNext();) {
  45.                 Component component = (Component) it.next();
  46.                 //Récupération de la date de l’evènement
  47.                 //à travers la propriété DTSTART
  48.                 final String dtStartValue = component.getProperty(DTSTART).getValue();
  49.                 //Récupération du déscriptif de l’evènement
  50.                 //à travers la propriété SUMMARY
  51.                 final String summaryValue = component.getProperty(SUMMARY).getValue();
  52.                 Date dateEvent = (new SimpleDateFormat(pattern)).parse(dtStartValue);
  53.                 //Test si la date est bien dans notre interval
  54.                 if (dateEvent.after(dateEnd) || dateEvent.before(dateBegin)) {
  55.                     continue;
  56.                 }
  57.                 //Converstion de la date dans un format plus convivial
  58.                 String dateStartValue = (new SimpleDateFormat(DD_MM_YYYY)).format(dateEvent);
  59.                 //Affichage de notre message
  60.                 System.out.println(summaryValue + " tombe le " + dateStartValue + "\n");
  61.             }
  62.  
  63.         } catch (Exception ex) {
  64.             ex.printStackTrace();
  65.         }
  66.     }
  67. }
  68.  



J’espère que le code est clair, sinon je suis disponible pour répondre à vos commentaires.


No Comments »

Java and fedora

March 22nd, 2010 | by | java, linux

Mar
22

Some Java dependencies and packages are not available on fedora official repositories. The solution is to add JPackage repo.
As root

  1. #cd /etc/yum.repos.d/
  2. #wget http://www.jpackage.org/jpackage50.repo

You can see http://www.jpackage.org/ if there new updates. JPackage can be used with fedora, redhat, centos, mandriva and many distributions.

No Comments »

J2me et les SMS’s

June 14th, 2009 | by | geek, java, programmation

Jun
14

Avec les offres des SMS’s ilimités de Tunisie Telecom et Tunisiana, je me suis posé le problème s’il est possible de mettre en place une application mobile capable de généré un grand nombre de SMS pour une plage de numéro ou pour juste un numéro pour faire du spam.
Après quelques recherche, j’ai réussi à mettre au point un petit bout de code fonctionnel et qui permet d’offrir la possibilité d’envoyer un SMS et bien entendu, les options énuméré au début sont possibles.
Pour le développement, j’ai utilisé netbeans 6.7 RC2 sans aucun additif. J’ai commencé par la création d’un projet standard pour terminaux mobiles. et dans ma class principale, j’ai ajouté cette méthodes qui gère l’envoi des SMS.

    public String sendSms(String number, String message){
    String result = "Ok";
    try {
      //sets address to send message
      String addr = "sms://"+number;
      // opens connection
      MessageConnection conn = (MessageConnection) Connector.open(addr);
      // prepares text message
      TextMessage msg =
      (TextMessage)conn.newMessage(MessageConnection.TEXT_MESSAGE);
      //set text
      msg.setPayloadText(message);
      // send message
      conn.send(msg);
      conn.close();
    } catch (SecurityException se) {
        // probably the user has not allowed to send sms
        // you may want to handle this differently
        result = "Security Problem";
    } catch (Exception e) {
        result = "Unknown Problem";
    }
    return result;
  }

Ce qu’il faut retenir, est que cette méthode utilise comme argument le numéro de téléphone et la message à transmettre et renvoi une chaine de caractère avec les divers possibilité :

  • OK, pour une transmission réussite.
  • Security Problem, si l’application n’a pas le droit d’envoyer un SMS, d’ou une configuration du téléphone est nécaissère.
  • Unknown Problem, pour les cas de figure non pris en considération

Par la suite, une petite interace avec deux champs de saisis et un champ d’affichage de résultat.
L’implémentation de la commande OK, et l’ajout du bout du code suivant :

sol.setText(sendSms(number.getString(), message.getString()));

Petit test sur mon téléphone (Nokia 5800), fonctionnel, un message de securité s’affiche pour la première fois pour demander si vous voulez accorder la ressource SMS à l’application “oui” :) .

1 Comment »

Fedora 9 : Path JAVA, Plugin Flash 64bit

May 1st, 2008 | by | fedora 9, java, linux

May
01

Je voudrais porter votre attention sur le path JAVA qui est appelé par les bundles (xwiki, liferay, Jboss portal, . . .) pour s’exécuter. Pour le configurer d’une manière efficace et avec le moins de risque crée le fichier java.sh au niveau de /etc/profile.d dans lequel vous devez ajouter :

  1. export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64
  2. export JRE_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64

ajouter le droit d’éxécution à notre fichier

  1. chmod +x /etc/profile.d/java.sh

et vous pouvez commencer à tester vos applications java

Pour le flash d’adobe, le suivi de la release note suffit (j’ai exécute les commandes avec firefox fermé pour éviter tous problèmes en étant root)

  1.  
  2. mkdir -p /usr/lib/mozilla/plugins
  3.  
  4. yum install nspluginwrapper.{i386,x86_64} pulseaudio-libs.i386
  5.  
  6. rpm -ivh flash-plugin-9.0.124.0-release.i386.rpm
  7.  
  8. mozilla-plugin-config -i -g -v
  9.  

L’obtention du rpm s’est effectuer sur ce lien :
http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&Lang=French&P5_Language=French
ouvrez votre firefox et vérifer à partir de site qui utilise flash sinon ouvrez ce lien : about:plugins

No Comments »

Spring JSR 286

April 21st, 2008 | by | spring

Apr
21

L’équipe de Spring nous promet le support de la spécification JSR 286 dans sa version 3 de Spring Portlet MVC.
La chose la plus importante dans cette spécification pour moi est la communication entre les portlets

Lien de la news

No Comments »

Spring Portlet sur liferay

April 15th, 2008 | by | java, liferay, spring

Apr
15

Je vous ai promis un exemple. Le voila malgré un petit retard. je m’excuse.
Ce code a était fait sur IDE NetBeans 6.1 RC1 en utilisant Spring avec dépendance 2.5.1.
dans build.xml il faut modifier spring.root

  1. <property name="spring.root" value="C:/Users/hp/Desktop/liferay/spring-framework-2.5.1"/>

pour pointer sur l’emplacement de spring.
Lien : sample spring

5 Comments »

Création d’une portlet avec support du framework Spring pour liferay

April 6th, 2008 | by | java, liferay

Apr
06

Introduction


Nous allons prendre
l’exemple petportal proposé par spring, ajouter les XML
manquants pour qu’il puisse répondre aux exigences de
liferay, puis ajouter notre portlet exemple à l’application.


On suppose que vous
avez déjà téléchargé spring 2.5.1
(version utilisé pour ce tutorial) avec ses dépendances.


Tout au long de ce
document notre application aura comme nom XXXXX


Ajout des fichiers manquants.


Les fichiers
manquants sont :



  • liferay-portlet.xml pour lister
    les différents portlets.


  • liferay-plugin-package.properties
    pour définir les propriétés de notre
    application


  • liferay-display.xml pour
    la disposition de nos portlets dans le menu ‘’add application’’
    de liferay.



Création de la portlet


Définition dans portlet.xml


Chaque portlet doit
être définie dans ce fichier XML en utilisant les
balises suivantes :



  • Portlet-name :
    Identificateur de la portlet qui doit être unique dans
    l’application.


  • Portlet-class : La class
    dispatcher de notre application Spring.


  • Vous pouvez la définir
    vous-même ou faire appel à une classe générique
    proposé par Spring
    (org.springframework.web.portlet.DispatcherPortlet ).


  • Init-param : paramêtre
    pour l’initialisation de notre application. Nous allons juste
    ajouter contextConfigLocation et le faire pointer sur notre nouveau
    fichier.


  • Supports : donner le type
    de la sortie (text/html pour notre cas) et les modes que la portlet
    va assurer ( view pour notre cas )


  • Portlet-info : pour donner
    des informations sur la portlet, ce que nous retiendrons c’est
    title pour définir le titre qui sera affiché pour les
    utilisateurs finaux.



<portlet>


<portlet-name>XXXXX</portlet-name>


<portlet-class>


org.springframework.web.portlet.DispatcherPortlet


</portlet-class>


<init-param>


<name>contextConfigLocation</name>


<value>/WEB-INF/context/portlet-XXXXX.xml</value>


</init-param>


<supports>


<mime-type>text/html</mime-type>


<portlet-mode>view</portlet-mode>


</supports>


<portlet-info>


<title>Recherche
client</title>


</portlet-info>


</portlet>


Définition dans liferay-portlet.xml


Dans ce fichier on
va juste faire une copie de notre ID du fichier précédant
comme suit :


<portlet>


<portlet-name>XXXXX</portlet-name>


</portlet>


Définition dans liferay-display.xml


Il ne reste plus
qu’a ajouter notre portlet dans la catégorie qu’on
voudrait la voir dans le bloc display comme suit :


<category
name="YYYYY">


<portlet
id="XXXXX" />


</category>


Création du fichier context


L’emplacement de
notre fichier a été défini dans portlet.xml,
donc on va le crée sous WEB-INF, context, avec le nom
portlet-XXXXX.xml.


<?xml
version="1.0" encoding="UTF-8" ?>


<!DOCTYPE
beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">


<beans>


<!–
Ici vont se trouver les définitions de nos beans –>


<bean
id="portletModeHandlerMapping"


class="org.springframework.web.portlet.handler.PortletModeHandlerMapping">


<property
name="order" value="20" />


<property
name="portletModeMap">


<map>


<entry
key="view" value-ref="xcontroleur" />


</map>


</property>


</bean>


<bean
id="parameterMappingInterceptor"


class="org.springframework.web.portlet.handler.ParameterMappingInterceptor"
/>


<bean
id="portletModeParameterHandlerMapping"


class="org.springframework.web.portlet.handler.PortletModeParameterHandlerMapping">


<property
name="order" value="10" />


<property
name="interceptors">


<list>


<ref
bean="parameterMappingInterceptor" />


</list>


</property>


<property
name="portletModeParameterMap">


<map>


<entry
key="view">


<map>


<entry
key="xview"


value-ref="xcontroleur"
/>


</map>


</entry>


</map>


</property>


</bean>


<bean
id="xcontroleur"


class="org.tunisiana.controller.XControleur">


</bean>


</beans>




Ce que nous devons
retenir ici c’est la définition de notre contrôleur et
de son emplacement. Mais aussi, la partie View de l’application.






Création du contrôleur


Tout d’abord, il
faut respecter l’emplacement attribué au début.


Un contrôleur
Spring doit hériter de AbstractController qui se trouve sous
org.springframework.web.portlet.mvc.AbstractController.


Un contrôleur
doit définir les méthodes :



  • protected
    void handleActionRequestInternal(ActionRequest request,
    ActionResponse response)


  • protected
    ModelAndView handleRenderRequestInternal(RenderRequest request,
    RenderResponse response)



Remarques


L’appel de ses
deux méthodes se fait successivement d’où si vous
avez besoin de paramètre de formulaire dans la deuxième
méthodes, il faudrait penser à les passer ou les faire
passer toutes en utilisant :



response.setRenderParameters(request.getParameterMap());


Reste


Le reste est
semblable à la création d’application Spring.

5 Comments »

Mise en place de l’environnement de développement liferay sous eclipse

March 25th, 2008 | by | java, liferay

Mar
25

Présentation des logiciels requis :
• JDK. J’utilise la version 6 de Sun.
• ANT. J’utilise la version 1.7
• Eclipse. J’ai téléchargé la version 3.3.1 Java EE à partir du site officiel.
• LIFERAY. J’utilise la version 4.4.1 avec Tomcat 5.
• LIFERAY plugins SDK, disponible sur le site officiel dans Additional files
Remarque : pour le développement SPRING MVC, des bugs ont été fixé dans la version 4.4.2 de liferay.

Installation

JDK
Pour Windows, le jdk est un exécutable qu’il faut lancer mais aussi des variable d’environnement sont nécessaire
$JAVA_HOME = C:\Program Files\Java\jdk1.6.0_02
$JRE_HOME = C:\Program Files\Java\jre1.6.0_02

Qui pointent sur l’emplacement de l’installation, exemple pour ma part.
ANT
Il faut ajouter la variable d’environnement qui
ANT_HOME = C:\apache-ant-1.7.0
Qui Pointe sur l’emplacement de ant et ajouter %ANT_HOME%\bin dans le path.

Eclipse, LIFERAY, LIFERAY SDK
Il suffit de les désarchivés et ils sont près à l’emploi.


Mise en place

Création du projet sur eclipse
File -> new -> Project … -> Java Project
Ensuite next,
Nom du projet : SDK
Create project from existing source
Ensuite Finish

Configuration du SDK
Ouvrir le fichier build.properties et changer la valeur d’app.server.dir par l’emplacement du désarchivage de notre LIFERAY.
app.server.dir=C:/Users/hp/Desktop/liferay/liferay-441

Mise en place de ant
On commence par ajouter la fenêtre de ant
Window -> Show View -> Ant
On deplace build.xml dans Ant
et hop ça fait des chocapic :D

Création portlet
Sous le repertoire portlets du sdk, il faut lancer la commande
ant -Dportlet.name=newportlet -Dportlet.display.name="My new Portlet" create
Pour la creation d’un sample.

Compilation et archivage de portlet

Ant est l’outil utilisé pour la compilation, le déploiement et l’archivage avec les option clean, compile et war que vous pouvez lancer à partir de eclipse ou de la ligne de commande.

Récupération d’exemples
Plusieurs exemple sont disponible sur la sourceforge et qui peuvent être télécharger avec svn en utilisant la commande :
svn co http://lportal.svn.sourceforge.net/svnroot/lportal/plugins/trunk/portlets lportal

Vos remarques sont les bienvenus pour enrichir ce billet

7 Comments »