² DEVOIR DE GENIE LOGICIEL 2008-2009

Transcription

² DEVOIR DE GENIE LOGICIEL 2008-2009
²
DEVOIR DE GENIE LOGICIEL 2008-2009
Construire une application serveur permettant à des utilisateurs de construire, gérer et utiliser des listes de lecture
(playlist) de clips audio (musique) ou vidéo. Le site permet aussi de collecter et gérer des informations sur des
artistes.
Un utilisateur enregistré a droit a un espace de stockage personnel.
Un utilisateur, une fois connecté, peut construire des listes de lecture. Il effectue des recherches de clips sur un site
musical (par défaut, Yahoo-Music). Il sélectionne des clips parmi les résultats obtenus pour construire sa liste de
lecture. Il peut modifier la liste (y ajouter, supprimer d’autres clips.) Il peut sauvegarder les listes de lectures. Il peut
faire jouer un clip ou une liste de lecture.
Etant donné un artiste, chaque utilisateur peut obtenir la liste des clips de cet artiste enregistrés dans son espace de
travail. Etant donné un clip, on en connait l’artiste principal.
Les contraintes techniques suivantes sont des exemples d’exigences fonctionnelles à vérifier par l’application.
L’application a une architecture multi-tiers qui sera déployée sur une plate-forme JEE 5.
L’application pourra être adaptée facilement dans le futur pour accepter différents types de clients (navigateur
web, applications autonomes java, consommateur de services web)
L’application peut fonctionner avec des données locales en cas de défaillance du réseau
Le lecteur « Flash Player » peut être remplacé par un autre lecteur
L’application peut accepter toute implémentation de JPA pour gérer le stockage des données.
L’application adopte une architecture MVC pour relier la couche présentation avec la couche domaine ou applicative
Conduite du projet
Le projet se fait en trois itérations.
Itération 1. 3 semaines.
Choix et test architecture. Construire un prototype testant les couches présentation et domaine avec les fonctions
suivantes :
•
rechercher les clips d’un artiste donné (par son nom), récupérer un clip puis la liste de tous les clips.
•
afficher un clip vidéo donné. Voir exemples ci-dessous.
Analyse et conception
Etudier le cas d’utilisation de base : construire une liste de lecture à partir des résultats obtenus d’une
recherche de clips par nom d’artistes :
•
Construire un modèle du domaine
•
Déterminer les événements et opérations systèmes (donner le contrat quand l’opération est n’est
pas triviale)
•
Pour chaque opération système, étudier la conception : affecter les responsabilités (diagramme de
classes et d’interactions )
Itération 2. 2 semaines
1) Implémenter le cas d’utilisation de base mais sans la persistence
2) Analyse et conception :
•
Cas d’utilisation : construction d’une liste de lecture en général
•
la persistence des données
•
architecture MVC entre couches pésentation et domaine
Itération 3
En fonction du temps restant :
•
implémentation couche domaine du CU étudiée dans itération 2
•
implémentation persistence
•
implémentation MVC
Exemple.
Le servlet ci-dessous retourne un fichier XML contenant la description de 21 clips vidéo de Rihanna. Il suffit de
donner une valeur valide, la clef de votre appID , à la variable statique appID. Le servlet envoie une requête de type
GET à http://us.music.yahooapis.com/video/v1/list/search/all/rihanna?response=main,artists&appid=[votre cle appID valide]
import java.io.IOException, java.net.* , java.io.*;
import javax.servlet.*, etc.
public class rest extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String
public rest() {
appID="zHawwEfV34EG7tvmKZvglNrRMBXOLDYSZkuXUS_XgM9rdhQqxmhLOQTq6aqN";
super();}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
urls="http://us.music.yahooapis.com/video/v1/list/search/all/rihanna?response=main,artists&appid="+rest.appID;
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
URL url = new URL(urls);
URLConnection urlConnection = url.openConnection();
urlConnection.setRequestProperty("accept", "text/xml");
BufferedReader in =
new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
String str;
while ((str = in.readLine()) != null) { out.println(str); }
in.close();
}
catch (Exception e) { System.out.println(e); }
finally { out.close(); }
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{ processRequest(request, response);
}
}
Le code jsp ci-dessous fait tourner dans flash player un video. Ce code ne fait que inclure dans son corps le
fichier «
<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/
xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Insert title here</title>
</head>
<body>
<jsp:include page="appelDeFlashPlayer.htm" />
</body>
</html>
Le fichier texte « appelDeFlashPlayer.htm » ci-dessous inséré dans un fichier html normal lance un clip vidéo
dans une instance de Flash player.
<div id="uvp_fop_container" style="width:512px;height:322px;">
<a href="http://www.adobe.com/products/flashplayer/">Please Install Flash</a>
</div>
<script type='text/javascript' language='javascript' src='http://us.js2.yimg.com/us.js.yimg.com/lib/flash/swfobject/1.0/swfobject.js'></script>
<script type="text/javascript">
var so = new SWFObject('http://d.yimg.com/cosmos.bcst.yahoo.com/up/fop/embedflv/swf/fop.swf', 'uvp_fop',
'512', '322', '9', '#ffffff');
so.addVariable('id', 'v46805699');
so.addVariable('eID', '1301797'); // NEEDS TO CHANGE DEPENDING ON LOCALE
so.addVariable('ympsc', '4195351'); // NEEDS TO CHANGE DEPENDING ON LOCALE
so.addVariable('lang', 'en');
// NEEDS TO CHANGE DEPENDING ON LOCALE
so.addVariable('shareEnable', '1');
so.addParam("allowFullScreen", "true");
so.addVariable('enableFullScreen', '1');
so.addVariable('autoStart', '0');
so.addVariable('eh', 'myCallbackEventHandler');
so.addParam("allowScriptAccess", "always"); // for scripting access
so.write('uvp_fop_container');
</script>
Références.
http://developer.yahoo.com/music/
Documentation en ligne : http://developer.yahoo.com/music/api_guide/
Pour télécharger Tomcat ou Géronimo : http://www.apache.org/
Autres infos dans http://users.info.unicaen.fr/~ionona/gl2009 ou écrire à [email protected]

Documents pareils