rdf/build/nsRDFModule.cpp

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/rdf/build/nsRDFModule.cpp	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,179 @@
     1.4 +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
     1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.8 +#include "nsCOMPtr.h"
     1.9 +#include "mozilla/ModuleUtils.h"
    1.10 +
    1.11 +#include "nsIFactory.h"
    1.12 +#include "nsRDFService.h"
    1.13 +#include "nsIRDFContainer.h"
    1.14 +#include "nsIRDFContainerUtils.h"
    1.15 +#include "nsIRDFCompositeDataSource.h"
    1.16 +#include "nsIRDFContentSink.h"
    1.17 +#include "nsISupports.h"
    1.18 +#include "nsRDFBaseDataSources.h"
    1.19 +#include "nsRDFBuiltInDataSources.h"
    1.20 +#include "nsFileSystemDataSource.h"
    1.21 +#include "nsRDFCID.h"
    1.22 +#include "nsIComponentManager.h"
    1.23 +#include "rdf.h"
    1.24 +#include "nsIServiceManager.h"
    1.25 +#include "nsILocalStore.h"
    1.26 +#include "nsRDFXMLParser.h"
    1.27 +#include "nsRDFXMLSerializer.h"
    1.28 +
    1.29 +#include "rdfISerializer.h"
    1.30 +
    1.31 +//----------------------------------------------------------------------
    1.32 +
    1.33 +// Functions used to create new instances of a given object by the
    1.34 +// generic factory.
    1.35 +
    1.36 +#define MAKE_CTOR(_func,_new,_ifname)                                \
    1.37 +static nsresult                                                      \
    1.38 +CreateNew##_func(nsISupports* aOuter, REFNSIID aIID, void **aResult) \
    1.39 +{                                                                    \
    1.40 +    if (!aResult) {                                                  \
    1.41 +        return NS_ERROR_INVALID_POINTER;                             \
    1.42 +    }                                                                \
    1.43 +    if (aOuter) {                                                    \
    1.44 +        *aResult = nullptr;                                           \
    1.45 +        return NS_ERROR_NO_AGGREGATION;                              \
    1.46 +    }                                                                \
    1.47 +    nsI##_ifname* inst;                                              \
    1.48 +    nsresult rv = NS_New##_new(&inst);                               \
    1.49 +    if (NS_FAILED(rv)) {                                             \
    1.50 +        *aResult = nullptr;                                           \
    1.51 +        return rv;                                                   \
    1.52 +    }                                                                \
    1.53 +    rv = inst->QueryInterface(aIID, aResult);                        \
    1.54 +    if (NS_FAILED(rv)) {                                             \
    1.55 +        *aResult = nullptr;                                           \
    1.56 +    }                                                                \
    1.57 +    NS_RELEASE(inst);             /* get rid of extra refcnt */      \
    1.58 +    return rv;                                                       \
    1.59 +}
    1.60 +
    1.61 +extern nsresult
    1.62 +NS_NewDefaultResource(nsIRDFResource** aResult);
    1.63 +
    1.64 +MAKE_CTOR(RDFXMLDataSource,RDFXMLDataSource,RDFDataSource)
    1.65 +MAKE_CTOR(RDFCompositeDataSource,RDFCompositeDataSource,RDFCompositeDataSource)
    1.66 +MAKE_CTOR(RDFContainer,RDFContainer,RDFContainer)
    1.67 +
    1.68 +MAKE_CTOR(RDFContainerUtils,RDFContainerUtils,RDFContainerUtils)
    1.69 +
    1.70 +MAKE_CTOR(RDFContentSink,RDFContentSink,RDFContentSink)
    1.71 +MAKE_CTOR(RDFDefaultResource,DefaultResource,RDFResource)
    1.72 +
    1.73 +#define MAKE_RDF_CTOR(_func,_new,_ifname)                            \
    1.74 +static nsresult                                                      \
    1.75 +CreateNew##_func(nsISupports* aOuter, REFNSIID aIID, void **aResult) \
    1.76 +{                                                                    \
    1.77 +    if (!aResult) {                                                  \
    1.78 +        return NS_ERROR_INVALID_POINTER;                             \
    1.79 +    }                                                                \
    1.80 +    if (aOuter) {                                                    \
    1.81 +        *aResult = nullptr;                                           \
    1.82 +        return NS_ERROR_NO_AGGREGATION;                              \
    1.83 +    }                                                                \
    1.84 +    rdfI##_ifname* inst;                                             \
    1.85 +    nsresult rv = NS_New##_new(&inst);                               \
    1.86 +    if (NS_FAILED(rv)) {                                             \
    1.87 +        *aResult = nullptr;                                           \
    1.88 +        return rv;                                                   \
    1.89 +    }                                                                \
    1.90 +    rv = inst->QueryInterface(aIID, aResult);                        \
    1.91 +    if (NS_FAILED(rv)) {                                             \
    1.92 +        *aResult = nullptr;                                           \
    1.93 +    }                                                                \
    1.94 +    NS_RELEASE(inst);             /* get rid of extra refcnt */      \
    1.95 +    return rv;                                                       \
    1.96 +}
    1.97 +
    1.98 +extern nsresult
    1.99 +NS_NewTriplesSerializer(rdfISerializer** aResult);
   1.100 +
   1.101 +MAKE_RDF_CTOR(TriplesSerializer, TriplesSerializer, Serializer)
   1.102 +
   1.103 +NS_DEFINE_NAMED_CID(NS_RDFCOMPOSITEDATASOURCE_CID);
   1.104 +NS_DEFINE_NAMED_CID(NS_RDFFILESYSTEMDATASOURCE_CID);
   1.105 +NS_DEFINE_NAMED_CID(NS_RDFINMEMORYDATASOURCE_CID);
   1.106 +NS_DEFINE_NAMED_CID(NS_RDFXMLDATASOURCE_CID);
   1.107 +NS_DEFINE_NAMED_CID(NS_RDFDEFAULTRESOURCE_CID);
   1.108 +NS_DEFINE_NAMED_CID(NS_RDFCONTENTSINK_CID);
   1.109 +NS_DEFINE_NAMED_CID(NS_RDFCONTAINER_CID);
   1.110 +NS_DEFINE_NAMED_CID(NS_RDFCONTAINERUTILS_CID);
   1.111 +NS_DEFINE_NAMED_CID(NS_RDFSERVICE_CID);
   1.112 +NS_DEFINE_NAMED_CID(NS_RDFXMLPARSER_CID);
   1.113 +NS_DEFINE_NAMED_CID(NS_RDFXMLSERIALIZER_CID);
   1.114 +NS_DEFINE_NAMED_CID(NS_RDFNTRIPLES_SERIALIZER_CID);
   1.115 +NS_DEFINE_NAMED_CID(NS_LOCALSTORE_CID);
   1.116 +
   1.117 +
   1.118 +static const mozilla::Module::CIDEntry kRDFCIDs[] = {
   1.119 +    { &kNS_RDFCOMPOSITEDATASOURCE_CID, false, nullptr, CreateNewRDFCompositeDataSource },
   1.120 +    { &kNS_RDFFILESYSTEMDATASOURCE_CID, false, nullptr, FileSystemDataSource::Create },
   1.121 +    { &kNS_RDFINMEMORYDATASOURCE_CID, false, nullptr, NS_NewRDFInMemoryDataSource },
   1.122 +    { &kNS_RDFXMLDATASOURCE_CID, false, nullptr, CreateNewRDFXMLDataSource },
   1.123 +    { &kNS_RDFDEFAULTRESOURCE_CID, false, nullptr, CreateNewRDFDefaultResource },
   1.124 +    { &kNS_RDFCONTENTSINK_CID, false, nullptr, CreateNewRDFContentSink },
   1.125 +    { &kNS_RDFCONTAINER_CID, false, nullptr, CreateNewRDFContainer },
   1.126 +    { &kNS_RDFCONTAINERUTILS_CID, false, nullptr, CreateNewRDFContainerUtils },
   1.127 +    { &kNS_RDFSERVICE_CID, false, nullptr, RDFServiceImpl::CreateSingleton },
   1.128 +    { &kNS_RDFXMLPARSER_CID, false, nullptr, nsRDFXMLParser::Create },
   1.129 +    { &kNS_RDFXMLSERIALIZER_CID, false, nullptr, nsRDFXMLSerializer::Create },
   1.130 +    { &kNS_RDFNTRIPLES_SERIALIZER_CID, false, nullptr, CreateNewTriplesSerializer },
   1.131 +    { &kNS_LOCALSTORE_CID, false, nullptr, NS_NewLocalStore },
   1.132 +    { nullptr }
   1.133 +};
   1.134 +
   1.135 +static const mozilla::Module::ContractIDEntry kRDFContracts[] = {
   1.136 +    { NS_RDF_DATASOURCE_CONTRACTID_PREFIX "composite-datasource", &kNS_RDFCOMPOSITEDATASOURCE_CID },
   1.137 +    { NS_RDF_DATASOURCE_CONTRACTID_PREFIX "files", &kNS_RDFFILESYSTEMDATASOURCE_CID },
   1.138 +    { NS_RDF_DATASOURCE_CONTRACTID_PREFIX "in-memory-datasource", &kNS_RDFINMEMORYDATASOURCE_CID },
   1.139 +    { NS_RDF_DATASOURCE_CONTRACTID_PREFIX "xml-datasource", &kNS_RDFXMLDATASOURCE_CID },
   1.140 +    { NS_RDF_RESOURCE_FACTORY_CONTRACTID, &kNS_RDFDEFAULTRESOURCE_CID },
   1.141 +    { NS_RDF_CONTRACTID "/content-sink;1", &kNS_RDFCONTENTSINK_CID },
   1.142 +    { NS_RDF_CONTRACTID "/container;1", &kNS_RDFCONTAINER_CID },
   1.143 +    { NS_RDF_CONTRACTID "/container-utils;1", &kNS_RDFCONTAINERUTILS_CID },
   1.144 +    { NS_RDF_CONTRACTID "/rdf-service;1", &kNS_RDFSERVICE_CID },
   1.145 +    { NS_RDF_CONTRACTID "/xml-parser;1", &kNS_RDFXMLPARSER_CID },
   1.146 +    { NS_RDF_CONTRACTID "/xml-serializer;1", &kNS_RDFXMLSERIALIZER_CID },
   1.147 +    { NS_RDF_SERIALIZER "ntriples", &kNS_RDFNTRIPLES_SERIALIZER_CID },
   1.148 +    { NS_LOCALSTORE_CONTRACTID, &kNS_LOCALSTORE_CID },
   1.149 +    { nullptr }
   1.150 +};
   1.151 +
   1.152 +static nsresult
   1.153 +StartupRDFModule()
   1.154 +{
   1.155 +    if (RDFServiceImpl::gRDFService) {
   1.156 +        NS_ERROR("Leaked the RDF service from a previous startup.");
   1.157 +        RDFServiceImpl::gRDFService = nullptr;
   1.158 +    }
   1.159 +
   1.160 +    return NS_OK;
   1.161 +}
   1.162 +
   1.163 +static void
   1.164 +ShutdownRDFModule()
   1.165 +{
   1.166 +    if (RDFServiceImpl::gRDFService) {
   1.167 +        // XXX make this an assertion!
   1.168 +        NS_WARNING("Leaking the RDF Service.");
   1.169 +    }
   1.170 +}
   1.171 +
   1.172 +static const mozilla::Module kRDFModule = {
   1.173 +    mozilla::Module::kVersion,
   1.174 +    kRDFCIDs,
   1.175 +    kRDFContracts,
   1.176 +    nullptr,
   1.177 +    nullptr,
   1.178 +    StartupRDFModule,
   1.179 +    ShutdownRDFModule
   1.180 +};
   1.181 +
   1.182 +NSMODULE_DEFN(nsRDFModule) = &kRDFModule;

mercurial