client/src/Iri.Modernisation.Data/Models/Loader.cs
author totetm <>
Wed, 27 Jan 2010 10:37:39 +0100
changeset 36 b6df6fce6e5d
parent 35 43bb1b8ed555
permissions -rw-r--r--
Sync init XML download. ProductionVideo from URI source
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
     1
using System;
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
     2
using System.Net;
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
     3
using System.Windows;
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
     4
using System.Windows.Controls;
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
     5
using System.Windows.Documents;
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
     6
using System.Windows.Ink;
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
     7
using System.Windows.Input;
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
     8
using System.Windows.Media;
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
     9
using System.Windows.Media.Animation;
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    10
using System.Windows.Shapes;
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    11
using System.Xml.Linq;
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    12
using System.IO;
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    13
using System.Collections.Generic;
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    14
using System.Threading;
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    15
namespace Iri.Modernisation.Data.Models
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    16
{
36
b6df6fce6e5d Sync init XML download.
totetm <>
parents: 35
diff changeset
    17
    /// <summary>
b6df6fce6e5d Sync init XML download.
totetm <>
parents: 35
diff changeset
    18
    /// Interface permettant une utilisation dans la classe Sync
b6df6fce6e5d Sync init XML download.
totetm <>
parents: 35
diff changeset
    19
    /// </summary>
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    20
    public interface ILoader
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    21
    {
36
b6df6fce6e5d Sync init XML download.
totetm <>
parents: 35
diff changeset
    22
       
b6df6fce6e5d Sync init XML download.
totetm <>
parents: 35
diff changeset
    23
        event EventHandler<EventArgs> LoaderFinished;
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    24
    }
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    25
    
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    26
    /// <summary>
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    27
    /// Classe permettant de charger un XML et de convertir son contenu en un type ReturnType désiré
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    28
    /// </summary>
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    29
    /// <typeparam name="ReturnType">Type Désiré</typeparam>
36
b6df6fce6e5d Sync init XML download.
totetm <>
parents: 35
diff changeset
    30
    public class Loader<ResultType> : ILoader
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    31
    {
34
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    32
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    33
        private AutoResetEvent Are { get; set; }
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    34
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    35
        public String Path { get; set; }
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    36
        /// <summary>
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    37
        /// WebClient qui permet de charger le XML distant
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    38
        /// </summary>
34
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    39
        public  WebClient xmlClient {get; private set;}
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    40
        /// <summary>
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    41
        /// Fonction permettant de transcrire le document XML en Type désiré
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    42
        /// </summary>
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    43
        private Func<XDocument, ResultType> ProcessFunction { get; set; }
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    44
      
34
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    45
        /// <summary>
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    46
        /// Constructeur
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    47
        /// </summary>
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    48
        /// <param name="processFunction">Fonction de transtypage</param>
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    49
       public Loader(Func<XDocument,ResultType> processFunction)
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    50
        {
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    51
            ProcessFunction = processFunction;
34
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    52
            xmlClient = new WebClient();
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    53
        }
34
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    54
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    55
        /// <summary>
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    56
        /// Téléchargement des données 
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    57
        /// </summary>
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    58
        /// <param name="path">Chemin du fichier</param>
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    59
        public void Load(String path)
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    60
        {
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    61
            //Here it's working
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    62
            // Are.Set();
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    63
            this.Path = path;
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    64
            xmlClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(xmlClient_DownloadStringCompleted);
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    65
        
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    66
            xmlClient.DownloadStringAsync(new Uri(path,UriKind.RelativeOrAbsolute));
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    67
           
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    68
           
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    69
            //Here not
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    70
            //Are.Set();
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    71
          
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    72
          
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    73
        }
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    74
       
34
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    75
        /// <summary>
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    76
        /// Une fois le fichier télécharger, on commence le transtypage
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    77
        /// </summary>
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    78
        /// <param name="sender"></param>
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    79
        /// <param name="e"></param>
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    80
        private void xmlClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    81
        {
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    82
         
34
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    83
            //On utilise la fonction donnée lors de la construction du Loader pour créer l'objet grâce au fichier XML
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    84
            ResultType result = ProcessFunction.Invoke(XDocument.Parse(e.Result));
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    85
            if (LoaderFinished != null)
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    86
            {
34
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    87
                //Une fois le Transtypage Fini, on lance l'évenement indiquant que le chargement est fini et donnant
4d9ebc6fbbe8 Web Migration Update
totetm <>
parents: 30
diff changeset
    88
                // en argument l'objet créé.
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    89
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    90
                LoaderFinished(this, new LoaderEventArgs<ResultType>(result));
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    91
             
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    92
               
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    93
            }
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
    94
        }
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    95
        public void  Execute(Object sender)
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    96
        {
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    97
            Are = (AutoResetEvent)sender;
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    98
            Load(this.Path);
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
    99
         
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
   100
        }
36
b6df6fce6e5d Sync init XML download.
totetm <>
parents: 35
diff changeset
   101
        public event EventHandler<EventArgs> LoaderFinished;
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
   102
      
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
   103
       
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
   104
    }
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
   105
    public class LoaderEventArgs<ResultType> :  EventArgs
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
   106
    {
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
   107
        public ResultType CreatedObject { get; private set; }
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
   108
        public AutoResetEvent Are { get; private set; }
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
   109
        public LoaderEventArgs(ResultType createdObject)
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
   110
        {
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
   111
            CreatedObject = createdObject;
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
   112
            Are = null;
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
   113
        }
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
   114
        public LoaderEventArgs(ResultType createdObject,AutoResetEvent are)
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
   115
        {
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
   116
            CreatedObject = createdObject;
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
   117
            Are = are;
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
   118
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
   119
        }
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
   120
    }
35
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
   121
43bb1b8ed555 IRIFiles Class
totetm <>
parents: 34
diff changeset
   122
 
30
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
   123
    
644e3cd48034 Introduce in Web context
totetm <>
parents:
diff changeset
   124
}