diff -r 000000000000 -r 6474c204b198 rdf/tests/triplescat/triplescat.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rdf/tests/triplescat/triplescat.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,153 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * A simple test program that reads in RDF/XML into an in-memory data + * source, then serializes NTriples format back to stdout (or none). + * + * The program takes a single parameter: the URL from which to read, + * plus an optional parameter -q + */ + +#include +#include "nsXPCOM.h" +#include "nsCOMPtr.h" +//#include "nsString.h" +#include "nsIComponentManager.h" +#include "nsComponentManagerUtils.h" +#include "nsServiceManagerUtils.h" +#include "nsThreadUtils.h" +#include "nsIIOService.h" +#include "nsIInputStream.h" +#include "nsIOutputStream.h" +#include "nsIRDFCompositeDataSource.h" +#include "nsIRDFNode.h" +#include "nsIRDFRemoteDataSource.h" +#include "nsIRDFService.h" +#include "nsIRDFXMLSource.h" +#include "nsIServiceManager.h" +#include "nsIStreamListener.h" +#include "nsIURL.h" +#include "nsRDFCID.h" +#include "plstr.h" +#include "prio.h" +#include "prthread.h" + +#include "rdf.h" +#include "rdfIDataSource.h" +#include "rdfITripleVisitor.h" +#include "rdfISerializer.h" + +//////////////////////////////////////////////////////////////////////// +// Blatantly stolen from netwerk/test/ +#define RETURN_IF_FAILED(rv, step) \ + PR_BEGIN_MACRO \ + if (NS_FAILED(rv)) { \ + printf(">>> %s failed: rv=%x\n", step, static_cast(rv)); \ + return 1;\ + } \ + PR_END_MACRO + +//////////////////////////////////////////////////////////////////////// + +class ConsoleOutputStreamImpl : public nsIOutputStream +{ +public: + ConsoleOutputStreamImpl(void) {} + virtual ~ConsoleOutputStreamImpl(void) {} + + // nsISupports interface + NS_DECL_ISUPPORTS + + // nsIOutputStream interface + NS_IMETHOD Close(void) { + return NS_OK; + } + + NS_IMETHOD Write(const char* aBuf, uint32_t aCount, uint32_t *aWriteCount) { + PR_Write(PR_GetSpecialFD(PR_StandardOutput), aBuf, aCount); + *aWriteCount = aCount; + return NS_OK; + } + + NS_IMETHOD + WriteFrom(nsIInputStream *inStr, uint32_t count, uint32_t *_retval) { + NS_NOTREACHED("WriteFrom"); + return NS_ERROR_NOT_IMPLEMENTED; + } + + NS_IMETHOD + WriteSegments(nsReadSegmentFun reader, void * closure, uint32_t count, uint32_t *_retval) { + NS_NOTREACHED("WriteSegments"); + return NS_ERROR_NOT_IMPLEMENTED; + } + + NS_IMETHOD + IsNonBlocking(bool *aNonBlocking) { + NS_NOTREACHED("IsNonBlocking"); + return NS_ERROR_NOT_IMPLEMENTED; + } + + NS_IMETHOD Flush(void) { + PR_Sync(PR_GetSpecialFD(PR_StandardOutput)); + return NS_OK; + } +}; + +NS_IMPL_ISUPPORTS(ConsoleOutputStreamImpl, nsIOutputStream) + +//////////////////////////////////////////////////////////////////////// + +int +main(int argc, char** argv) +{ + nsresult rv; + + if (argc < 2) { + fprintf(stderr, "usage: %s \n", argv[0]); + return 1; + } + + NS_InitXPCOM2(nullptr, nullptr, nullptr); + + // Create a stream data source and initialize it on argv[1], which + // is hopefully a "file:" URL. + nsCOMPtr ds = + do_CreateInstance(NS_RDF_DATASOURCE_CONTRACTID_PREFIX "xml-datasource", + &rv); + RETURN_IF_FAILED(rv, "RDF/XML datasource creation"); + + nsCOMPtr remote = do_QueryInterface(ds, &rv); + RETURN_IF_FAILED(rv, "QI to nsIRDFRemoteDataSource"); + + rv = remote->Init(argv[1]); + RETURN_IF_FAILED(rv, "datasource initialization"); + + // Okay, this should load the XML file... + rv = remote->Refresh(false); + RETURN_IF_FAILED(rv, "datasource refresh"); + + // Pump events until the load is finished + nsCOMPtr thread = do_GetCurrentThread(); + bool done = false; + while (!done) { + NS_ENSURE_TRUE(NS_ProcessNextEvent(thread), 1); + remote->GetLoaded(&done); + } + + nsCOMPtr rdfds = do_QueryInterface(ds, &rv); + RETURN_IF_FAILED(rv, "QI to rdIDataSource"); + { + nsCOMPtr out = new ConsoleOutputStreamImpl(); + nsCOMPtr ser = + do_CreateInstance(NS_RDF_SERIALIZER "ntriples", &rv); + RETURN_IF_FAILED(rv, "Creation of NTriples Serializer"); + rv = ser->Serialize(rdfds, out); + RETURN_IF_FAILED(rv, "Serialization to NTriples"); + out->Close(); + } + + return 0; +}