IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Design Patterns Discussion :

[Java] Viewer spécifique selon le type du fichier à charger


Sujet :

Design Patterns

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 6
    Points
    6
    Par défaut [Java] Viewer spécifique selon le type du fichier à charger
    re-Bonjour,

    Je cherche à créer une classe qui me permettrait, selon le type de fichier que l'on charge, d'instancier un viewer bien spécifique (librairie externe style Batik, Adobe etc...) ; tout ça dans un JPanel par exemple.

    Je ne sais pas trop comment me lancer, je me mélange un peu les pinceaux !

    Est-ce que quelqu'un a déjà fait quelquechose du même style et pourrait me conseiller ?

    Merci beaucoup.

    [ Modéré par Bulbo ]
    Ajout d'un tag dans le titre
    Les Règles du Forum

  2. #2
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    Bonjour,
    Comme ca de loin de loin je verrai assez bien l'implémentation du patern Factory.
    Sinon en fesant une classe mère qui possede les traitements, objets ... commun (tous ce qui sera commun selon les divers fichiers) ainsi que les methodes virtuelles (traitement spécifiques selon le type de fichier) pour chaque classe fille s'occupant d'un type de fichier.
    "vaste programme"

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 844
    Points
    22 844
    Billets dans le blog
    51
    Par défaut
    Yup.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    public abstract class ViewerFactory {
      /** Factory cache.
       * <br>Maps fileformat ID -> factory.
       */
      private static final Map<String, ViewerFactory> FACTORY_CACHE = new HashMap<String, ViewerFactory>&#40;&#41;;
    
      /** Static initializer.
      */
      static &#123;
        // Register initial base factories.
        registerViewerFactory&#40;"pdf", new AdobeViewerFactory&#40;&#41;&#41;;
        ...
      &#125;
    
      /** Creates a viewer for given file.
      * @param file The target file.
      * @return A viewer, never <code>null</code>
      * @exception InvalidFileFormatException The file is invalid.
      * @exception UnsupportedFileFormatException The given file is not of a format supported by this factory.
      */
      public Viewer createViewer&#40;String file&#41; throws InvalidFileFormatException, UnsupportedFileFormat &#123;
       return createViewer&#40;new File&#40;file&#41;&#41;;  
     &#125;
    
      /** Creates a viewer for given file.
      * @param file The target file.
      * @return A viewer, never <code>null</code>
      * @exception InvalidFileFormatException The file is invalid.
      * @exception UnsupportedFileFormatException The given file is not of a format supported by this factory.
      */
      public abstract Viewer createViewer&#40;File file&#41; throws InvalidFileFormatException, UnsupportedFileFormat;
    
      /** Gets a factory for given file format.
      * @param filetype The fileformat identifier.
      * @return A <code>ViewerFactory</code> instance or <code>null</code> if giben filetype is <code>null</code>.
      * @exception UnsupportedFileFormat There is no factory for such file format.
      */
      public static final ViewerFactory getFactoryForFileFormat&#40;String filetype&#41; throws UnsupportedFileFormatException &#123;
        ...
      &#125;  
      
      /** Registers a factory for a given fileformat.
      * @param filetype The fileformat identifier.
      * @param factory The factory, must not be <code>null</code>
      * @exception NullPointerException Either the filetype or the factory parameter is <code>null</code>.
      */
      public static void registerViewerFactory&#40;String filetype, ViewerFactory factory&#41; throws NullPointerException &#123;
        ...
      &#125;
    
      /** Unregister a factory for a given fileformat.
      * @param filetype The fileformat identifier.
      * @exception NullPointerException The given filetype is <code>null</code>.
      */
      public static void unregisterViewerFactory&#40;String filetype&#41; &#123;
        ...
      &#125;
    &#125;
    
    public abstract class Viewer extends JPanel &#123;
      ...
    &#125;
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    J'avoue que je n'ai jamais utilisé ce genre de design pattern ...
    Je ne vois pas trop comment utiliser ce code ...

    Dans ma classe Viewer, je déclare un objet de type ViewerFactory et c'est dans ma classe ViewerFactory que je déclare les méthodes par exemple "load", "clear" etc... que je définirais dans les classes concrètes AdobeViewerFactory et autres ?

    Je ne suis pas sûre d'avoir bien compris ... je fais des tests ... mais j'avoue que si vous avez des précisions : je suis preneuse !

    Merci encore.

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Et sinon pour la partie viewer il va falloir passer par JDIC si tu veux l'intégrer dans ton interface JAVA, sinon juste lancer l'application par le runtime avec les options appropriées
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 844
    Points
    22 844
    Billets dans le blog
    51
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dans ma classe Viewer, je déclare un objet de type ViewerFactory
    Chaque class publique est dans son propre fichier .java
    En gros la factory detache l'endroit ou l'on cree et instancie la Viewer du code principal. Commes les factory sont elles-memes abstraite on peut en creer un plusieurs types/variantes (une pour chaque viewer par exemple*).

    *Rien n'empeche de faire une factory qui supporte plusieurs types de viewer. Ou un viewer qui supporte plusieurs formats de fichiers.

    Ca evite de coder en dur dans le code de la GUI un truc de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    else if &#40;extension.equals&#40;"pdf"&#41; &#123;
      ...
    &#125;
    else if &#40;extension.equals&#40;...
    sur 3Km de long.

    Ici cet unique et simple bloc peut instancier tout et nimporte quoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Viewer viewer = null;
    try &#123;
      ViewerFactory factory = ViewerFactory.getFactoryForFileFormat&#40;extension&#41;;
      viewer = factory.createViewer&#40;file&#41;;
    &#125;
    // File format not supported.
    catch &#40;UnsupportedFileFormat ufe&#41; &#123;
      ...
    &#125;
    // File is BAD.
    catch&#40;InvalidFileFormatException  iffe&#41; &#123;
      ...
    &#125;
    if &#40;viewer != null&#41; &#123;
      // Add the viewer to the GUI
      ...
    &#125;
    Mais rien ne t'oblige a utiliser ce pattern il est toujours possible de coder "normalement" meme si ce n'est pas toujours une solution "correcte" (tout depend tu point de vue et de la destination du programme. Trop de pattern nuit parfois.... pas assez egalement).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    Oui la factory permet de découpler ton code de telle maniere que la création d'objets est déléguée aux sous classes (ce qui explique la méthode createViewer() qui est abstraite)

    Ensuite dans toute sous classe qui étendra "ViewerFactory" tu devra implémenter ta propre createViewer

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 844
    Points
    22 844
    Billets dans le blog
    51
    Par défaut
    Il est vai que pour faire un peu plus complet j'aurai du egalement ajouter ces classes-ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    public class AdobeViewerFactory extends ViewerFactory &#123; 
    
      /** Creates a new instance.
      */
      public AdobeViewerFactory&#40;&#41; &#123;
      &#125;
    
      /** @inheritDoc
       */ 
      @Override public Viewer createViewer&#40;File file&#41; throws InvalidFileFormatException, UnsupportedFileFormat &#123;
        // MAY test if file format and extention is valid for this factory.
        // OR may delegate that to the viewer itself.
        ...
        try &#123;
           return new AdobeViewer&#40;file&#41;;
        &#125;
        // Handle AbobeViewer-issued exceptions and convert them to this class' supported exceptions. 
        catch &#40;....&#41; &#123;
           ...
        &#125;
      &#125;
    &#125; 
    
    public class AdobeViewer extends Viewer &#123; 
      /** Creates  a new instance.
       * @param file The target file.
       * @exception ... Exceptions specific to this viewer or to JDIC/native calls.
       */
      public AbobeViewer&#40;File file&#41; throws ...
        super&#40;&#41;;
        // Maybe we can use JDIC to call/include Adode Reader in the GUI?
        ...
       &#125;
    
      ...
    &#125;
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Ranger des fichiers selon leur type
    Par Battant dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 17/06/2015, 09h08
  2. Filtrer le contenu d'un fichier selon le type de données
    Par nicolas823 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 17/04/2014, 18h22
  3. sélectionner instruction selon le type de fichier
    Par callofduty dans le forum Images
    Réponses: 1
    Dernier message: 22/07/2013, 10h53
  4. CheckStyle : Filtrer selon le type de fichier
    Par Lebas dans le forum Qualimétrie
    Réponses: 0
    Dernier message: 16/06/2011, 14h44
  5. Bloquer le téléchargement de certains types de fichiers
    Par Nikos dans le forum Développement
    Réponses: 4
    Dernier message: 23/12/2002, 21h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo