|
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ |
|
2 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 #include "nsCOMPtr.h" |
|
6 #include "mozilla/ModuleUtils.h" |
|
7 |
|
8 #include "nsIFactory.h" |
|
9 #include "nsRDFService.h" |
|
10 #include "nsIRDFContainer.h" |
|
11 #include "nsIRDFContainerUtils.h" |
|
12 #include "nsIRDFCompositeDataSource.h" |
|
13 #include "nsIRDFContentSink.h" |
|
14 #include "nsISupports.h" |
|
15 #include "nsRDFBaseDataSources.h" |
|
16 #include "nsRDFBuiltInDataSources.h" |
|
17 #include "nsFileSystemDataSource.h" |
|
18 #include "nsRDFCID.h" |
|
19 #include "nsIComponentManager.h" |
|
20 #include "rdf.h" |
|
21 #include "nsIServiceManager.h" |
|
22 #include "nsILocalStore.h" |
|
23 #include "nsRDFXMLParser.h" |
|
24 #include "nsRDFXMLSerializer.h" |
|
25 |
|
26 #include "rdfISerializer.h" |
|
27 |
|
28 //---------------------------------------------------------------------- |
|
29 |
|
30 // Functions used to create new instances of a given object by the |
|
31 // generic factory. |
|
32 |
|
33 #define MAKE_CTOR(_func,_new,_ifname) \ |
|
34 static nsresult \ |
|
35 CreateNew##_func(nsISupports* aOuter, REFNSIID aIID, void **aResult) \ |
|
36 { \ |
|
37 if (!aResult) { \ |
|
38 return NS_ERROR_INVALID_POINTER; \ |
|
39 } \ |
|
40 if (aOuter) { \ |
|
41 *aResult = nullptr; \ |
|
42 return NS_ERROR_NO_AGGREGATION; \ |
|
43 } \ |
|
44 nsI##_ifname* inst; \ |
|
45 nsresult rv = NS_New##_new(&inst); \ |
|
46 if (NS_FAILED(rv)) { \ |
|
47 *aResult = nullptr; \ |
|
48 return rv; \ |
|
49 } \ |
|
50 rv = inst->QueryInterface(aIID, aResult); \ |
|
51 if (NS_FAILED(rv)) { \ |
|
52 *aResult = nullptr; \ |
|
53 } \ |
|
54 NS_RELEASE(inst); /* get rid of extra refcnt */ \ |
|
55 return rv; \ |
|
56 } |
|
57 |
|
58 extern nsresult |
|
59 NS_NewDefaultResource(nsIRDFResource** aResult); |
|
60 |
|
61 MAKE_CTOR(RDFXMLDataSource,RDFXMLDataSource,RDFDataSource) |
|
62 MAKE_CTOR(RDFCompositeDataSource,RDFCompositeDataSource,RDFCompositeDataSource) |
|
63 MAKE_CTOR(RDFContainer,RDFContainer,RDFContainer) |
|
64 |
|
65 MAKE_CTOR(RDFContainerUtils,RDFContainerUtils,RDFContainerUtils) |
|
66 |
|
67 MAKE_CTOR(RDFContentSink,RDFContentSink,RDFContentSink) |
|
68 MAKE_CTOR(RDFDefaultResource,DefaultResource,RDFResource) |
|
69 |
|
70 #define MAKE_RDF_CTOR(_func,_new,_ifname) \ |
|
71 static nsresult \ |
|
72 CreateNew##_func(nsISupports* aOuter, REFNSIID aIID, void **aResult) \ |
|
73 { \ |
|
74 if (!aResult) { \ |
|
75 return NS_ERROR_INVALID_POINTER; \ |
|
76 } \ |
|
77 if (aOuter) { \ |
|
78 *aResult = nullptr; \ |
|
79 return NS_ERROR_NO_AGGREGATION; \ |
|
80 } \ |
|
81 rdfI##_ifname* inst; \ |
|
82 nsresult rv = NS_New##_new(&inst); \ |
|
83 if (NS_FAILED(rv)) { \ |
|
84 *aResult = nullptr; \ |
|
85 return rv; \ |
|
86 } \ |
|
87 rv = inst->QueryInterface(aIID, aResult); \ |
|
88 if (NS_FAILED(rv)) { \ |
|
89 *aResult = nullptr; \ |
|
90 } \ |
|
91 NS_RELEASE(inst); /* get rid of extra refcnt */ \ |
|
92 return rv; \ |
|
93 } |
|
94 |
|
95 extern nsresult |
|
96 NS_NewTriplesSerializer(rdfISerializer** aResult); |
|
97 |
|
98 MAKE_RDF_CTOR(TriplesSerializer, TriplesSerializer, Serializer) |
|
99 |
|
100 NS_DEFINE_NAMED_CID(NS_RDFCOMPOSITEDATASOURCE_CID); |
|
101 NS_DEFINE_NAMED_CID(NS_RDFFILESYSTEMDATASOURCE_CID); |
|
102 NS_DEFINE_NAMED_CID(NS_RDFINMEMORYDATASOURCE_CID); |
|
103 NS_DEFINE_NAMED_CID(NS_RDFXMLDATASOURCE_CID); |
|
104 NS_DEFINE_NAMED_CID(NS_RDFDEFAULTRESOURCE_CID); |
|
105 NS_DEFINE_NAMED_CID(NS_RDFCONTENTSINK_CID); |
|
106 NS_DEFINE_NAMED_CID(NS_RDFCONTAINER_CID); |
|
107 NS_DEFINE_NAMED_CID(NS_RDFCONTAINERUTILS_CID); |
|
108 NS_DEFINE_NAMED_CID(NS_RDFSERVICE_CID); |
|
109 NS_DEFINE_NAMED_CID(NS_RDFXMLPARSER_CID); |
|
110 NS_DEFINE_NAMED_CID(NS_RDFXMLSERIALIZER_CID); |
|
111 NS_DEFINE_NAMED_CID(NS_RDFNTRIPLES_SERIALIZER_CID); |
|
112 NS_DEFINE_NAMED_CID(NS_LOCALSTORE_CID); |
|
113 |
|
114 |
|
115 static const mozilla::Module::CIDEntry kRDFCIDs[] = { |
|
116 { &kNS_RDFCOMPOSITEDATASOURCE_CID, false, nullptr, CreateNewRDFCompositeDataSource }, |
|
117 { &kNS_RDFFILESYSTEMDATASOURCE_CID, false, nullptr, FileSystemDataSource::Create }, |
|
118 { &kNS_RDFINMEMORYDATASOURCE_CID, false, nullptr, NS_NewRDFInMemoryDataSource }, |
|
119 { &kNS_RDFXMLDATASOURCE_CID, false, nullptr, CreateNewRDFXMLDataSource }, |
|
120 { &kNS_RDFDEFAULTRESOURCE_CID, false, nullptr, CreateNewRDFDefaultResource }, |
|
121 { &kNS_RDFCONTENTSINK_CID, false, nullptr, CreateNewRDFContentSink }, |
|
122 { &kNS_RDFCONTAINER_CID, false, nullptr, CreateNewRDFContainer }, |
|
123 { &kNS_RDFCONTAINERUTILS_CID, false, nullptr, CreateNewRDFContainerUtils }, |
|
124 { &kNS_RDFSERVICE_CID, false, nullptr, RDFServiceImpl::CreateSingleton }, |
|
125 { &kNS_RDFXMLPARSER_CID, false, nullptr, nsRDFXMLParser::Create }, |
|
126 { &kNS_RDFXMLSERIALIZER_CID, false, nullptr, nsRDFXMLSerializer::Create }, |
|
127 { &kNS_RDFNTRIPLES_SERIALIZER_CID, false, nullptr, CreateNewTriplesSerializer }, |
|
128 { &kNS_LOCALSTORE_CID, false, nullptr, NS_NewLocalStore }, |
|
129 { nullptr } |
|
130 }; |
|
131 |
|
132 static const mozilla::Module::ContractIDEntry kRDFContracts[] = { |
|
133 { NS_RDF_DATASOURCE_CONTRACTID_PREFIX "composite-datasource", &kNS_RDFCOMPOSITEDATASOURCE_CID }, |
|
134 { NS_RDF_DATASOURCE_CONTRACTID_PREFIX "files", &kNS_RDFFILESYSTEMDATASOURCE_CID }, |
|
135 { NS_RDF_DATASOURCE_CONTRACTID_PREFIX "in-memory-datasource", &kNS_RDFINMEMORYDATASOURCE_CID }, |
|
136 { NS_RDF_DATASOURCE_CONTRACTID_PREFIX "xml-datasource", &kNS_RDFXMLDATASOURCE_CID }, |
|
137 { NS_RDF_RESOURCE_FACTORY_CONTRACTID, &kNS_RDFDEFAULTRESOURCE_CID }, |
|
138 { NS_RDF_CONTRACTID "/content-sink;1", &kNS_RDFCONTENTSINK_CID }, |
|
139 { NS_RDF_CONTRACTID "/container;1", &kNS_RDFCONTAINER_CID }, |
|
140 { NS_RDF_CONTRACTID "/container-utils;1", &kNS_RDFCONTAINERUTILS_CID }, |
|
141 { NS_RDF_CONTRACTID "/rdf-service;1", &kNS_RDFSERVICE_CID }, |
|
142 { NS_RDF_CONTRACTID "/xml-parser;1", &kNS_RDFXMLPARSER_CID }, |
|
143 { NS_RDF_CONTRACTID "/xml-serializer;1", &kNS_RDFXMLSERIALIZER_CID }, |
|
144 { NS_RDF_SERIALIZER "ntriples", &kNS_RDFNTRIPLES_SERIALIZER_CID }, |
|
145 { NS_LOCALSTORE_CONTRACTID, &kNS_LOCALSTORE_CID }, |
|
146 { nullptr } |
|
147 }; |
|
148 |
|
149 static nsresult |
|
150 StartupRDFModule() |
|
151 { |
|
152 if (RDFServiceImpl::gRDFService) { |
|
153 NS_ERROR("Leaked the RDF service from a previous startup."); |
|
154 RDFServiceImpl::gRDFService = nullptr; |
|
155 } |
|
156 |
|
157 return NS_OK; |
|
158 } |
|
159 |
|
160 static void |
|
161 ShutdownRDFModule() |
|
162 { |
|
163 if (RDFServiceImpl::gRDFService) { |
|
164 // XXX make this an assertion! |
|
165 NS_WARNING("Leaking the RDF Service."); |
|
166 } |
|
167 } |
|
168 |
|
169 static const mozilla::Module kRDFModule = { |
|
170 mozilla::Module::kVersion, |
|
171 kRDFCIDs, |
|
172 kRDFContracts, |
|
173 nullptr, |
|
174 nullptr, |
|
175 StartupRDFModule, |
|
176 ShutdownRDFModule |
|
177 }; |
|
178 |
|
179 NSMODULE_DEFN(nsRDFModule) = &kRDFModule; |