Statistics
| Branch: | Revision:

root / trunk / Pithos.Client.WPF / AppBootstrapper.cs @ 21141c06

History | View | Annotate | Download (5.2 kB)

1 7e39367d pkanavos
#region
2 7e39367d pkanavos
/* -----------------------------------------------------------------------
3 7e39367d pkanavos
 * <copyright file="AppBootstrapper.cs" company="GRNet">
4 7e39367d pkanavos
 * 
5 7e39367d pkanavos
 * Copyright 2011-2012 GRNET S.A. All rights reserved.
6 7e39367d pkanavos
 *
7 7e39367d pkanavos
 * Redistribution and use in source and binary forms, with or
8 7e39367d pkanavos
 * without modification, are permitted provided that the following
9 7e39367d pkanavos
 * conditions are met:
10 7e39367d pkanavos
 *
11 7e39367d pkanavos
 *   1. Redistributions of source code must retain the above
12 7e39367d pkanavos
 *      copyright notice, this list of conditions and the following
13 7e39367d pkanavos
 *      disclaimer.
14 7e39367d pkanavos
 *
15 7e39367d pkanavos
 *   2. Redistributions in binary form must reproduce the above
16 7e39367d pkanavos
 *      copyright notice, this list of conditions and the following
17 7e39367d pkanavos
 *      disclaimer in the documentation and/or other materials
18 7e39367d pkanavos
 *      provided with the distribution.
19 7e39367d pkanavos
 *
20 7e39367d pkanavos
 *
21 7e39367d pkanavos
 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
22 7e39367d pkanavos
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23 7e39367d pkanavos
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 7e39367d pkanavos
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
25 7e39367d pkanavos
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 7e39367d pkanavos
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 7e39367d pkanavos
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
28 7e39367d pkanavos
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29 7e39367d pkanavos
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 7e39367d pkanavos
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 7e39367d pkanavos
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 7e39367d pkanavos
 * POSSIBILITY OF SUCH DAMAGE.
33 7e39367d pkanavos
 *
34 7e39367d pkanavos
 * The views and conclusions contained in the software and
35 7e39367d pkanavos
 * documentation are those of the authors and should not be
36 7e39367d pkanavos
 * interpreted as representing official policies, either expressed
37 7e39367d pkanavos
 * or implied, of GRNET S.A.
38 7e39367d pkanavos
 * </copyright>
39 7e39367d pkanavos
 * -----------------------------------------------------------------------
40 7e39367d pkanavos
 */
41 7e39367d pkanavos
#endregion
42 7e39367d pkanavos
using System.Windows;
43 7e39367d pkanavos
using System.Windows.Controls;
44 7e39367d pkanavos
using System.Windows.Navigation;
45 7e39367d pkanavos
using Caliburn.Micro;
46 7e39367d pkanavos
using Caliburn.Micro.Logging;
47 7e39367d pkanavos
using Pithos.Client.WPF.Properties;
48 7e39367d pkanavos
using Pithos.Core;
49 7e39367d pkanavos
using Pithos.Network;
50 7e39367d pkanavos
using Xceed.Wpf.Toolkit;
51 7e39367d pkanavos
using log4net.Appender;
52 7e39367d pkanavos
using log4net.Config;
53 7e39367d pkanavos
using log4net.Filter;
54 7e39367d pkanavos
using log4net.Layout;
55 7e39367d pkanavos
56 7e39367d pkanavos
namespace Pithos.Client.WPF
57 7e39367d pkanavos
{
58 7e39367d pkanavos
	using System;
59 7e39367d pkanavos
	using System.Collections.Generic;
60 7e39367d pkanavos
	using System.ComponentModel.Composition;
61 7e39367d pkanavos
	using System.ComponentModel.Composition.Hosting;
62 7e39367d pkanavos
	using System.ComponentModel.Composition.Primitives;
63 7e39367d pkanavos
	using System.Linq;
64 7e39367d pkanavos
	using Caliburn.Micro;
65 7e39367d pkanavos
66 7e39367d pkanavos
	public class AppBootstrapper : Bootstrapper<IShell>
67 7e39367d pkanavos
	{
68 7e39367d pkanavos
69 7e39367d pkanavos
		CompositionContainer container;
70 7e39367d pkanavos
71 7e39367d pkanavos
		public AppBootstrapper()
72 7e39367d pkanavos
		{
73 7e39367d pkanavos
			LogManager.GetLog = type => new log4netLogger(type);
74 7e39367d pkanavos
			UpgradeSettings();
75 7e39367d pkanavos
		}
76 7e39367d pkanavos
77 7e39367d pkanavos
		private void UpgradeSettings()
78 7e39367d pkanavos
		{
79 7e39367d pkanavos
			if (Settings.Default.MustUpgrade)
80 7e39367d pkanavos
			{
81 7e39367d pkanavos
			    Settings.Default.HashingParallelism = (byte) (Environment.ProcessorCount/2);
82 7e39367d pkanavos
				Settings.Default.Upgrade();
83 ac8b664d pkanavos
				Settings.Default.MustUpgrade = false;
84 7e39367d pkanavos
				Settings.Default.Save();
85 7e39367d pkanavos
			}
86 7e39367d pkanavos
		}
87 7e39367d pkanavos
88 6b816c1f pkanavos
        protected override IEnumerable<System.Reflection.Assembly> SelectAssemblies()
89 6b816c1f pkanavos
        {
90 6b816c1f pkanavos
            var assemblies= base.SelectAssemblies();
91 6b816c1f pkanavos
            return assemblies.Union(new[]
92 6b816c1f pkanavos
                {
93 6b816c1f pkanavos
                    typeof(PithosMonitor).Assembly, 
94 6b816c1f pkanavos
                    typeof(CloudFilesClient).Assembly,
95 6b816c1f pkanavos
                    typeof (OFM.FileManagerViewModel).Assembly
96 6b816c1f pkanavos
                });
97 6b816c1f pkanavos
        }
98 6b816c1f pkanavos
99 7e39367d pkanavos
		/// <summary>
100 7e39367d pkanavos
		/// By default, we are configured to use MEF
101 7e39367d pkanavos
		/// </summary>
102 7e39367d pkanavos
		protected override void Configure() {
103 7e39367d pkanavos
			var catalog = new AggregateCatalog(
104 7e39367d pkanavos
				AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>()
105 7e39367d pkanavos
				);
106 7e39367d pkanavos
107 6b816c1f pkanavos
			/*Type[] types = { typeof(PithosMonitor), typeof(CloudFilesClient),typeof(OFM.FileManagerViewModel) };
108 7e39367d pkanavos
			foreach (var type in types)
109 7e39367d pkanavos
			{
110 7e39367d pkanavos
				catalog.Catalogs.Add(new AssemblyCatalog(type.Assembly));
111 7e39367d pkanavos
			}
112 6b816c1f pkanavos
*/
113 7e39367d pkanavos
			container = new CompositionContainer(catalog,true);
114 7e39367d pkanavos
115 7e39367d pkanavos
			var batch = new CompositionBatch();
116 7e39367d pkanavos
117 7e39367d pkanavos
			batch.AddExportedValue<IWindowManager>(new WindowManager());
118 7e39367d pkanavos
			batch.AddExportedValue<IEventAggregator>(new EventAggregator());
119 7e39367d pkanavos
			batch.AddExportedValue(container);
120 7e39367d pkanavos
			batch.AddExportedValue(catalog);
121 7e39367d pkanavos
122 7e39367d pkanavos
123 7e39367d pkanavos
			container.Compose(batch);
124 7e39367d pkanavos
		    
125 7e39367d pkanavos
			ConventionManager.AddElementConvention<MenuItem>(ItemsControl.ItemsSourceProperty, "DataContext", "Click");
126 7e39367d pkanavos
			ConventionManager.AddElementConvention<IntegerUpDown>(IntegerUpDown.ValueProperty, "Value", "ValueChanged");
127 7e39367d pkanavos
		    ConventionManager.AddElementConvention<BusyIndicator>(BusyIndicator.IsBusyProperty, "IsBusy", "DataContextChanged");
128 7e39367d pkanavos
		}
129 7e39367d pkanavos
130 7e39367d pkanavos
		protected override object GetInstance(Type serviceType, string key)
131 7e39367d pkanavos
		{
132 7e39367d pkanavos
			string contract = string.IsNullOrEmpty(key) ? AttributedModelServices.GetContractName(serviceType) : key;
133 7e39367d pkanavos
			var exports = container.GetExportedValues<object>(contract);            
134 7e39367d pkanavos
135 7e39367d pkanavos
			if (exports.Any())
136 7e39367d pkanavos
				return exports.First();
137 7e39367d pkanavos
138 7e39367d pkanavos
			throw new Exception(string.Format("Could not locate any instances of contract {0}.", contract));
139 7e39367d pkanavos
		}
140 7e39367d pkanavos
141 7e39367d pkanavos
		protected override IEnumerable<object> GetAllInstances(Type serviceType)
142 7e39367d pkanavos
		{
143 7e39367d pkanavos
			return container.GetExportedValues<object>(AttributedModelServices.GetContractName(serviceType));
144 7e39367d pkanavos
		}
145 7e39367d pkanavos
146 7e39367d pkanavos
		protected override void BuildUp(object instance)
147 7e39367d pkanavos
		{
148 7e39367d pkanavos
			container.SatisfyImportsOnce(instance);
149 7e39367d pkanavos
		}
150 7e39367d pkanavos
	}
151 100379b3 George Pantazis
}