示例#1
0
        /// <summary>
        /// Chargement des metadata à partir du répertoire local et des serveurs distants
        /// </summary>
        /// <returns></returns>
        internal MetadataCollection LoadAll()
        {
            if (_models != null)
            {
                return(this);
            }

            // Vérouillage
            lock (_syncObject)
            {
                if (_models != null)
                {
                    return(this);
                }

                ILogger logger = ServiceLocator.Instance.GetService <ILogger>();

                // Lecture dans les référentiels - Local en premier
                _models = new List <ComponentModelMetadata>();

                // Local en premier
                IRepositoryProvider localProvider = RepositoryManager.Instance.GetLocalProvider();
                if (localProvider != null)
                {
                    Merge(RepositoryLocation.Local, localProvider.GetAllMetadata());
                }

                // Puis les serveurs
                foreach (IRepositoryProvider provider in RepositoryManager.Instance.GetRemoteProviders())
                {
                    try
                    {
                        List <ComponentModelMetadata> list = provider.GetAllMetadata();
                        if (list != null)
                        {
                            // On met à jour l'url du serveur d'origine
                            list.ForEach(delegate(ComponentModelMetadata m) { m.ServerUrl = provider.Name; });
                            Merge(RepositoryLocation.Server, list);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (logger != null)
                        {
                            logger.WriteError("GetMetadatas",
                                              String.Format("Error when trying to retrieve the model list"), ex);
                        }
                    }
                }

                // Evénement fin de chargement
                OnMetadataLoaded(new EventArgs());
            }

            return(this);
        }
示例#2
0
 /// <summary>
 /// Liste de tous les métadata des modèles du repository (Réactualisé lors de chaque publication)
 /// </summary>
 /// <returns></returns>
 public List <ComponentModelMetadata> GetAllMetadata()
 {
     if (_models == null)
     {
         lock (sync)
         {
             if (_models == null)
             {
                 _models = _provider.GetAllMetadata();
             }
         }
     }
     return(_models);
 }