PD_DocumentRDFHandle AP_Dialog_RDFEditor::getRDF() { FV_View* view = getView(); PD_Document* doc = view->getDocument(); PD_DocumentRDFHandle rdf = doc->getDocumentRDF(); return rdf; }
PD_RDFModelHandle AP_Dialog_RDFEditor::getModel() { if( m_restrictedModel ) return m_restrictedModel; FV_View* view = getView(); PD_Document* doc = view->getDocument(); PD_DocumentRDFHandle model = doc->getDocumentRDF(); return model; }
bool IE_Imp_OpenDocument::pasteFromBuffer(PD_DocumentRange * pDocRange, const unsigned char * pData, UT_uint32 lenData, const char * /*szEncoding*/) { UT_return_val_if_fail(getDoc() == pDocRange->m_pDoc,false); UT_return_val_if_fail(pDocRange->m_pos1 == pDocRange->m_pos2,false); PD_Document * newDoc = new PD_Document(); newDoc->createRawDocument(); IE_Imp_OpenDocument * pODImp = new IE_Imp_OpenDocument(newDoc); // // Turn pData into something that can be imported by the open documenb // importer. // GsfInput * pInStream = gsf_input_memory_new((const guint8 *) pData, (gsf_off_t) lenData, FALSE); pODImp->loadFile(newDoc, pInStream); // pInStream deleted after load. newDoc->finishRawCreation(); // Handle RDF for the newdoc { PD_DocumentRDFHandle rdf = newDoc->getDocumentRDF(); rdf->dumpModel("about to broadcast..."); PD_DocumentRDFMutationHandle m = getDoc()->getDocumentRDF()->createMutation(); m->add( rdf ); m->commit(); } // // OK Broadcast from the just filled source document into our current // doc via the paste listener // IE_Imp_PasteListener * pPasteListen = new IE_Imp_PasteListener(getDoc(),pDocRange->m_pos1,newDoc); newDoc->tellListener(static_cast<PL_Listener *>(pPasteListen)); delete pPasteListen; delete pODImp; UNREFP( newDoc); return true; }
/*! * This method copies the selection defined by pDocRange to ODT format * placed in the ByteBuf bufODT */ UT_Error IE_Exp_OpenDocument::copyToBuffer(PD_DocumentRange * pDocRange,UT_ByteBuf * bufODT) { // // First export selected range to a tempory document // PD_Document * outDoc = new PD_Document(); outDoc->createRawDocument(); IE_Exp_DocRangeListener * pRangeListener = new IE_Exp_DocRangeListener(pDocRange,outDoc); UT_DEBUGMSG(("DocumentRange low %d High %d \n",pDocRange->m_pos1,pDocRange->m_pos2)); PL_ListenerCoupleCloser* pCloser = new PL_ListenerCoupleCloser(); pDocRange->m_pDoc->tellListenerSubset(pRangeListener,pDocRange,pCloser); if( pCloser) delete pCloser; // // Grab the RDF triples while we are copying... // if( PD_DocumentRDFHandle outrdf = outDoc->getDocumentRDF() ) { std::set< std::string > xmlids; PD_DocumentRDFHandle inrdf = pDocRange->m_pDoc->getDocumentRDF(); inrdf->addRelevantIDsForRange( xmlids, pDocRange ); if( !xmlids.empty() ) { UT_DEBUGMSG(("MIQ: ODF export creating restricted RDF model xmlids.sz:%ld \n",(long)xmlids.size())); PD_RDFModelHandle subm = inrdf->createRestrictedModelForXMLIDs( xmlids ); PD_DocumentRDFMutationHandle m = outrdf->createMutation(); m->add( subm ); m->commit(); subm->dumpModel("copied rdf triples subm"); outrdf->dumpModel("copied rdf triples result"); } // PD_DocumentRDFMutationHandle m = outrdf->createMutation(); // m->add( PD_URI("http://www.example.com/foo"), // PD_URI("http://www.example.com/bar"), // PD_Literal("copyToBuffer path") ); // m->commit(); } outDoc->finishRawCreation(); // // OK now we have a complete and valid document containing our selected // content. We export this to an in memory GSF buffer // IE_Exp * pNewExp = NULL; char *szTempFileName = NULL; GError *err = NULL; g_file_open_tmp ("XXXXXX", &szTempFileName, &err); GsfOutput * outBuf = gsf_output_stdio_new (szTempFileName,&err); IEFileType ftODT = IE_Exp::fileTypeForMimetype("application/vnd.oasis.opendocument.text"); UT_Error aerr = IE_Exp::constructExporter(outDoc,outBuf, ftODT,&pNewExp); if(pNewExp == NULL) { return aerr; } aerr = pNewExp->writeFile(szTempFileName); if(aerr != UT_OK) { delete pNewExp; delete pRangeListener; UNREFP( outDoc); g_remove(szTempFileName); g_free (szTempFileName); return aerr; } // // File is closed at the end of the export. Open it again. // GsfInput * fData = gsf_input_stdio_new(szTempFileName,&err); UT_DebugOnly<UT_sint32> siz = gsf_input_size(fData); const UT_Byte * pData = gsf_input_read(fData,gsf_input_size(fData),NULL); UT_DEBUGMSG(("Writing %d bytes to clipboard \n", (UT_sint32)siz)); bufODT->append( pData, gsf_input_size(fData)); delete pNewExp; delete pRangeListener; UNREFP( outDoc); g_remove(szTempFileName); g_free (szTempFileName); return aerr; }