- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / docs / server2 / server_instance.py
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 from api_data_source import APIDataSource
6 from api_list_data_source import APIListDataSource
7 from api_models import APIModels
8 from availability_finder import AvailabilityFinder
9 from compiled_file_system import CompiledFileSystem
10 from content_providers import ContentProviders
11 from empty_dir_file_system import EmptyDirFileSystem
12 from environment import IsDevServer
13 from features_bundle import FeaturesBundle
14 from github_file_system_provider import GithubFileSystemProvider
15 from host_file_system_provider import HostFileSystemProvider
16 from host_file_system_iterator import HostFileSystemIterator
17 from intro_data_source import IntroDataSource
18 from object_store_creator import ObjectStoreCreator
19 from path_canonicalizer import PathCanonicalizer
20 from reference_resolver import ReferenceResolver
21 from samples_data_source import SamplesDataSource
22 import svn_constants
23 from template_renderer import TemplateRenderer
24 from test_branch_utility import TestBranchUtility
25 from test_object_store import TestObjectStore
26
27 class ServerInstance(object):
28
29   def __init__(self,
30                object_store_creator,
31                compiled_fs_factory,
32                branch_utility,
33                host_file_system_provider,
34                github_file_system_provider,
35                base_path='/'):
36     '''
37     |object_store_creator|
38         The ObjectStoreCreator used to create almost all caches.
39     |compiled_fs_factory|
40         Factory used to create CompiledFileSystems, a higher-level cache type
41         than ObjectStores. This can usually be derived from just
42         |object_store_creator| but under special circumstances a different
43         implementation needs to be passed in.
44     |branch_utility|
45         Has knowledge of Chrome branches, channels, and versions.
46     |host_file_system_provider|
47         Creates FileSystem instances which host the server at alternative
48         revisions.
49     |github_file_system_provider|
50         Creates FileSystem instances backed by GitHub.
51     |base_path|
52         The path which all HTML is generated relative to. Usually this is /
53         but some servlets need to override this.
54     '''
55     self.object_store_creator = object_store_creator
56
57     self.compiled_fs_factory = compiled_fs_factory
58
59     self.host_file_system_provider = host_file_system_provider
60     host_fs_at_trunk = host_file_system_provider.GetTrunk()
61
62     self.github_file_system_provider = github_file_system_provider
63
64     assert base_path.startswith('/') and base_path.endswith('/')
65     self.base_path = base_path
66
67     self.host_file_system_iterator = HostFileSystemIterator(
68         host_file_system_provider,
69         branch_utility)
70
71     self.features_bundle = FeaturesBundle(
72         host_fs_at_trunk,
73         self.compiled_fs_factory,
74         self.object_store_creator)
75
76     self.api_models = APIModels(
77         self.features_bundle,
78         self.compiled_fs_factory,
79         host_fs_at_trunk)
80
81     self.availability_finder = AvailabilityFinder(
82         branch_utility,
83         compiled_fs_factory,
84         self.host_file_system_iterator,
85         host_fs_at_trunk,
86         object_store_creator)
87
88     self.api_list_data_source_factory = APIListDataSource.Factory(
89         self.compiled_fs_factory,
90         host_fs_at_trunk,
91         self.features_bundle,
92         self.object_store_creator)
93
94     self.api_data_source_factory = APIDataSource.Factory(
95         self.compiled_fs_factory,
96         host_fs_at_trunk,
97         svn_constants.API_PATH,
98         self.availability_finder,
99         branch_utility)
100
101     self.ref_resolver_factory = ReferenceResolver.Factory(
102         self.api_data_source_factory,
103         self.api_models,
104         object_store_creator)
105
106     self.api_data_source_factory.SetReferenceResolverFactory(
107         self.ref_resolver_factory)
108
109     # Note: samples are super slow in the dev server because it doesn't support
110     # async fetch, so disable them.
111     if IsDevServer():
112       extension_samples_fs = EmptyDirFileSystem()
113       app_samples_fs = EmptyDirFileSystem()
114     else:
115       extension_samples_fs = host_fs_at_trunk
116       app_samples_fs = github_file_system_provider.Create(
117           'GoogleChrome', 'chrome-app-samples')
118     self.samples_data_source_factory = SamplesDataSource.Factory(
119         extension_samples_fs,
120         app_samples_fs,
121         CompiledFileSystem.Factory(object_store_creator),
122         self.ref_resolver_factory,
123         svn_constants.EXAMPLES_PATH,
124         base_path)
125
126     self.api_data_source_factory.SetSamplesDataSourceFactory(
127         self.samples_data_source_factory)
128
129     self.intro_data_source_factory = IntroDataSource.Factory(
130         self.compiled_fs_factory,
131         host_fs_at_trunk,
132         self.ref_resolver_factory,
133         [svn_constants.INTRO_PATH, svn_constants.ARTICLE_PATH])
134
135     self.path_canonicalizer = PathCanonicalizer(
136         self.compiled_fs_factory,
137         host_fs_at_trunk)
138
139     self.content_providers = ContentProviders(
140         self.compiled_fs_factory,
141         host_fs_at_trunk)
142
143     # TODO(kalman): Move all the remaining DataSources into DataSourceRegistry,
144     # then factor out the DataSource creation into a factory method, so that
145     # the entire ServerInstance doesn't need to be passed in here.
146     self.template_renderer = TemplateRenderer(self)
147
148     self.strings_json_path = svn_constants.STRINGS_JSON_PATH
149     self.manifest_json_path = svn_constants.MANIFEST_JSON_PATH
150     self.manifest_features_path = svn_constants.MANIFEST_FEATURES_PATH
151
152   @staticmethod
153   def ForTest(file_system, base_path='/'):
154     object_store_creator = ObjectStoreCreator.ForTest()
155     return ServerInstance(object_store_creator,
156                           CompiledFileSystem.Factory(object_store_creator),
157                           TestBranchUtility.CreateWithCannedData(),
158                           HostFileSystemProvider.ForTest(file_system,
159                                                          object_store_creator),
160                           GithubFileSystemProvider.ForEmpty(),
161                           base_path=base_path)
162
163   @staticmethod
164   def ForLocal():
165     object_store_creator = ObjectStoreCreator(start_empty=False,
166                                               store_type=TestObjectStore)
167     host_file_system_provider = HostFileSystemProvider.ForLocal(
168         object_store_creator)
169     return ServerInstance(
170         object_store_creator,
171         CompiledFileSystem.Factory(object_store_creator),
172         TestBranchUtility.CreateWithCannedData(),
173         host_file_system_provider,
174         GithubFileSystemProvider.ForEmpty())