Upstream version 10.39.225.0
[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 compiled_file_system import CompiledFileSystem
8 from content_providers import ContentProviders
9 from document_renderer import DocumentRenderer
10 from empty_dir_file_system import EmptyDirFileSystem
11 from environment import IsDevServer
12 from gcs_file_system_provider import CloudStorageFileSystemProvider
13 from github_file_system_provider import GithubFileSystemProvider
14 from host_file_system_iterator import HostFileSystemIterator
15 from host_file_system_provider import HostFileSystemProvider
16 from object_store_creator import ObjectStoreCreator
17 from platform_bundle import PlatformBundle
18 from samples_data_source import SamplesDataSource
19 from table_of_contents_renderer import TableOfContentsRenderer
20 from template_renderer import TemplateRenderer
21 from test_branch_utility import TestBranchUtility
22 from test_object_store import TestObjectStore
23
24
25 class ServerInstance(object):
26
27   def __init__(self,
28                object_store_creator,
29                compiled_fs_factory,
30                branch_utility,
31                host_file_system_provider,
32                github_file_system_provider,
33                gcs_file_system_provider,
34                base_path='/'):
35     '''
36     |object_store_creator|
37         The ObjectStoreCreator used to create almost all caches.
38     |compiled_fs_factory|
39         Factory used to create CompiledFileSystems, a higher-level cache type
40         than ObjectStores. This can usually be derived from just
41         |object_store_creator| but under special circumstances a different
42         implementation needs to be passed in.
43     |branch_utility|
44         Has knowledge of Chrome branches, channels, and versions.
45     |host_file_system_provider|
46         Creates FileSystem instances which host the server at alternative
47         revisions.
48     |github_file_system_provider|
49         Creates FileSystem instances backed by GitHub.
50     |base_path|
51         The path which all HTML is generated relative to. Usually this is /
52         but some servlets need to override this.
53     '''
54     self.object_store_creator = object_store_creator
55
56     self.compiled_fs_factory = compiled_fs_factory
57
58     self.host_file_system_provider = host_file_system_provider
59     host_fs_at_master = host_file_system_provider.GetMaster()
60
61     self.github_file_system_provider = github_file_system_provider
62     self.gcs_file_system_provider = gcs_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.platform_bundle = PlatformBundle(
72         branch_utility,
73         self.compiled_fs_factory,
74         host_fs_at_master,
75         self.host_file_system_iterator,
76         self.object_store_creator,
77         self.base_path)
78
79     self.content_providers = ContentProviders(
80         object_store_creator,
81         self.compiled_fs_factory,
82         host_fs_at_master,
83         self.github_file_system_provider,
84         self.gcs_file_system_provider)
85
86     # TODO(kalman): Move all the remaining DataSources into DataSourceRegistry,
87     # then factor out the DataSource creation into a factory method, so that
88     # the entire ServerInstance doesn't need to be passed in here.
89     self.template_renderer = TemplateRenderer(self)
90
91     # TODO(kalman): It may be better for |document_renderer| to construct a
92     # TemplateDataSource itself rather than depending on template_renderer, but
93     # for that the above todo should be addressed.
94     self.document_renderer = DocumentRenderer(
95         TableOfContentsRenderer(host_fs_at_master,
96                                 compiled_fs_factory,
97                                 self.template_renderer),
98         self.platform_bundle)
99
100   @staticmethod
101   def ForTest(file_system=None, file_system_provider=None, base_path='/'):
102     object_store_creator = ObjectStoreCreator.ForTest()
103     if file_system is None and file_system_provider is None:
104       raise ValueError('Either |file_system| or |file_system_provider| '
105                        'must be specified')
106     if file_system and file_system_provider:
107       raise ValueError('Only one of |file_system| and |file_system_provider| '
108                        'can be specified')
109     if file_system_provider is None:
110       file_system_provider = HostFileSystemProvider.ForTest(
111           file_system,
112           object_store_creator)
113     return ServerInstance(object_store_creator,
114                           CompiledFileSystem.Factory(object_store_creator),
115                           TestBranchUtility.CreateWithCannedData(),
116                           file_system_provider,
117                           GithubFileSystemProvider.ForEmpty(),
118                           CloudStorageFileSystemProvider(object_store_creator),
119                           base_path=base_path)
120
121   @staticmethod
122   def ForLocal():
123     object_store_creator = ObjectStoreCreator(start_empty=False,
124                                               store_type=TestObjectStore)
125     host_file_system_provider = HostFileSystemProvider.ForLocal(
126         object_store_creator)
127     return ServerInstance(
128         object_store_creator,
129         CompiledFileSystem.Factory(object_store_creator),
130         TestBranchUtility.CreateWithCannedData(),
131         host_file_system_provider,
132         GithubFileSystemProvider.ForEmpty(),
133         CloudStorageFileSystemProvider(object_store_creator))