commit 115caa021804b32392237c2af530bfaae8b843d7 Author: Bigeon Emmanuel Date: Sat Feb 10 17:16:32 2024 +0100 [init] Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c9f1356 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +# Maven +target/ + +# Eclipse +.settings/ +.project +.classpath diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..8e511d7 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,28 @@ +# Comment contribuer à ce projet +2 cas sont possibles pour contribuer à ce projet: +- Vous ête un étudiant et l'utilisez pour créer votre projet, dans ce cas reportez vous à [la section étudiant](#etudiant) +- Vous êtes un enseignant améliorant ce modèle, dans ce cas reportez vous à [la section enseignant](#enseignant) + +## Etudiant + +Vous ne devez pas contribuer directement à ce projet mais devez en effectuer un fork. Une fois cela effectué vous devez: +- [ ] Ajouter votre identifiant de groupe au champs `groupId` du fichier [pom.xml](pom.xml) sous la forme de `fr.u-paris.gla.votreequipe` +- [ ] Modifier le package principal afin de refleter le nouveau nom de groupe. +- [ ] Adapter le fichier [README](README.md) au contenu de votre projet specifique +- [ ] Adapter ce fichier (CONTRIBUTING.md) à vos propres instructions de contribution, notamment: + - [ ] Convention de style de codage + - [ ] Convention d'utilisation de git + - [ ] Lien avec d'autres projets et d'autres dépôts. +- [ ] Modifier le fichier `application.properties` au besoin. + + +## Enseignant + +Ce dépôt suit la convention de gitflow. Les modifications doivent être effectuées dans des branches séparées, +intégrées dans la branche dev une fois terminée. +La branche main ne doit contenir que des versions stables de ce modèle. + +Le code est écrit en Java, manipulé par l'outils de construction maven et doit suivre les conventions usuelles du langage et de l'outils. + +Le package principal du code Java est `fr.u_paris.gla.project` +Le fichier de properties `application.properties` permet d'accéder depuis le code Java aux diverses informations inscrite dans maven. diff --git a/README.md b/README.md new file mode 100644 index 0000000..c303acf --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +# Projet de GLA +Version 2024 + +## Description +Ceci est l'archetype de projet de Génie Logiciel Avancé (GLA). + +Il s'agit d'un projet Java. Ce dépôt définit un système de build et une application simple. Il est nécéssaire de consulter le fichier [CONTRIBUTING.md](CONTRIBUTING.md) pour utiliser ce dépôt. + +## Lancement du programme +Ce projet utilise [maven](https://maven.apache.org/) de Apache pour la gestion de construction. + +Afin de compiler et lancer les tests, éxecutez simplement +``` +mvn verify +``` + +Dans sa version initiale, le programme fournit est un simple code qui se lance en terminal ou en application graphique. + +Une fois le programme compilé, vous trouverez un jar executable dans le dossier target. Au nom de jar près (version changeante), vous pourrez l'exécuter avec: +``` +java -jar project-2024.1.0.0-SNAPSHOT.jar --info +``` + +L'option de lancement `--info` causera l'affichage dans la console d'informations de l'application. + +L'option de lancement `--gui` causera l'ouverture d'une fenêtre affichant le logo de l'Université de Paris. + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..3f471a7 --- /dev/null +++ b/pom.xml @@ -0,0 +1,49 @@ + + + + 4.0.0 + + fr.u-paris.gla + project + 2024.1.0.0-SNAPSHOT + + Project Base + + + UTF-8 + 17 + 17 + + + + + org.junit.jupiter + junit-jupiter + 5.9.1 + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + + true + fr.u_paris.gla.project.App + + + + + + + src/main/resources-filtered + true + + + + diff --git a/src/main/java/fr/u_paris/gla/project/App.java b/src/main/java/fr/u_paris/gla/project/App.java new file mode 100644 index 0000000..923e305 --- /dev/null +++ b/src/main/java/fr/u_paris/gla/project/App.java @@ -0,0 +1,113 @@ +package fr.u_paris.gla.project; + +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Properties; + +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.WindowConstants; + +/** Simple application model. + * + * @author Emmanuel Bigeon */ +public class App { + /** + * + */ + private static final String UNSPECIFIED = "Unspecified"; //$NON-NLS-1$ + /** The logo image name. */ + private static final String LOGO_NAME = "uparis_logo_rvb.png"; //$NON-NLS-1$ + /** Image height. */ + private static final int HEIGHT = 256; + /** Image width. */ + private static final int WIDTH = HEIGHT; + + /** Resizes an image. + * + * @param src source image + * @param w width + * @param h height + * @return the resized image */ + private static Image getScaledImage(Image src, int w, int h) { + BufferedImage resizedImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); + Graphics2D g2d = resizedImg.createGraphics(); + g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BILINEAR); + g2d.drawImage(src, 0, 0, w, h, null); + g2d.dispose(); + return resizedImg; + } + + /** Application entry point. + * + * @param args launching arguments */ + public static void main(String[] args) { + if (args.length > 0) { + for (String string : args) { + if ("--info".equals(string)) { //$NON-NLS-1$ + printAppInfos(System.out); + return; + } + if ("--gui".equals(string)) { //$NON-NLS-1$ + showLogo(); + } + } + } + } + + /** @param out */ + public static void printAppInfos(PrintStream out) { + Properties props = new Properties(); + try (InputStream is = App.class.getResourceAsStream("application.properties")) { //$NON-NLS-1$ + props.load(is); + } catch (IOException e) { + throw new RuntimeException("Unable to read application informations", e); //$NON-NLS-1$ + } + + out.println("Application: " + props.getProperty("app.name", UNSPECIFIED)); //$NON-NLS-1$ //$NON-NLS-2$ + out.println("Version: " + props.getProperty("app.version", UNSPECIFIED)); //$NON-NLS-1$ //$NON-NLS-2$ + out.println("By: " + props.getProperty("app.team", UNSPECIFIED)); //$NON-NLS-1$ //$NON-NLS-2$ + } + + /** Shows the logo in an image. */ + public static void showLogo() { + Properties props = new Properties(); + try (InputStream is = App.class.getResourceAsStream("application.properties")) { //$NON-NLS-1$ + props.load(is); + } catch (IOException e) { + throw new RuntimeException("Unable to read application informations", e); //$NON-NLS-1$ + } + + JFrame frame = new JFrame(props.getProperty("app.name")); //$NON-NLS-1$ + frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + + JLabel container = new JLabel(); + + try (InputStream is = App.class.getResourceAsStream(LOGO_NAME)) { + if (is == null) { + container.setText("Image Not Found"); + } else { + BufferedImage img = ImageIO.read(is); + ImageIcon icon = new ImageIcon(img); + ImageIcon resized = new ImageIcon(getScaledImage(icon.getImage(), WIDTH, HEIGHT)); + + container.setIcon(resized); + } + } catch (IOException e) { + container.setText("Image Not Read: "+e.getLocalizedMessage()); + } + + frame.getContentPane().add(container); + + frame.pack(); + frame.setVisible(true); + } +} diff --git a/src/main/resources-filtered/fr/u_paris/gla/project/application.properties b/src/main/resources-filtered/fr/u_paris/gla/project/application.properties new file mode 100644 index 0000000..7436703 --- /dev/null +++ b/src/main/resources-filtered/fr/u_paris/gla/project/application.properties @@ -0,0 +1,3 @@ +app.name=${name} +app.version=${version} +app.team=No team \ No newline at end of file diff --git a/src/main/resources/fr/u_paris/gla/project/uparis_logo_rvb.png b/src/main/resources/fr/u_paris/gla/project/uparis_logo_rvb.png new file mode 100644 index 0000000..f9afcf6 Binary files /dev/null and b/src/main/resources/fr/u_paris/gla/project/uparis_logo_rvb.png differ diff --git a/src/test/java/fr/u_paris/gla/project/AppTest.java b/src/test/java/fr/u_paris/gla/project/AppTest.java new file mode 100644 index 0000000..5e8873d --- /dev/null +++ b/src/test/java/fr/u_paris/gla/project/AppTest.java @@ -0,0 +1,14 @@ +package fr.u_paris.gla.project; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; + +/** Unit test for simple App. */ +public class AppTest { + /** Rigorous Test :-) */ + @Test + public void shouldAnswerWithTrue() { + assertTrue(true); + } +}