#include "exportMetadataCmd.h"
#include "metadataPluginStrings.h"
#include <maya/MObject.h>
#include <maya/MSyntax.h>
#include <maya/MPxCommand.h>
#include <maya/MStatus.h>
#include <maya/MString.h>
#include <maya/MStringResource.h>
#include <maya/MArgDatabase.h>
#include <maya/MFileObject.h>
#include <maya/MFnDependencyNode.h>
#include <iostream>
#include <sstream>
#include <fstream>
#include <maya/adskDataChannel.h>
#include <maya/adskDataAssociations.h>
#include <maya/adskDataAssociationsSerializer.h>
#include <maya/adskDataChannelSerializer.h>
#include <maya/adskDataStreamSerializer.h>
#include <maya/adskDataStructureSerializer.h>
void* exportMetadataCmd::creator()
{
return new exportMetadataCmd ;
}
const char* exportMetadataCmd::name()
{
return "exportMetadata";
}
MSyntax exportMetadataCmd::cmdSyntax()
{
MSyntax mySyntax = metadataBase::cmdSyntax();
return mySyntax;
}
exportMetadataCmd::exportMetadataCmd()
{
}
exportMetadataCmd::~exportMetadataCmd()
{
}
{
return metadataBase::checkArgs( argsDb );
}
MStatus exportMetadataCmd::doCreate()
{
assert( fSerializer );
assert( fObjects.length() == 1 );
assert( status );
if( ! status ) return status;
displayInfo( node.name(&status) );
if( ! associationsToWrite ) return MS::kFailure;
std::string errors;
status = MS::kSuccess;
if( fFile )
{
MString path( fFile->resolvedFullName() );
std::ofstream destination( fFile->resolvedFullName().asChar() );
if( fSerializer->write( *associationsToWrite, destination, errors ) == 0 )
{
setResult( path );
}
else
{
displayError( errMsg );
status = MS::kFailure;
}
destination.close();
}
else
{
std::stringstream writtenData;
if( fSerializer->write( *associationsToWrite, writtenData, errors ) == 0 )
{
setResult( writtenData.str().c_str() );
}
else
{
displayError( errMsg );
status = MS::kFailure;
}
}
if( errors.length() > 0 )
{
displayError( errors.c_str() );
return MS::kFailure;
}
return MS::kSuccess;
}
MStatus exportMetadataCmd::doQuery()
{
assert( fSerializer );
std::set<const adsk::Data::StreamSerializer*>::iterator sFmtIt;
for( sFmtIt = adsk::Data::StreamSerializer::allFormats().begin();
sFmtIt != adsk::Data::StreamSerializer::allFormats().end(); sFmtIt++ )
{
MString fmtName( fmt->formatType() );
msg.format( fmtMsg, fmtType, fmtName );
appendToResult( msg );
}
std::set<const adsk::Data::ChannelSerializer*>::iterator cFmtIt;
for( cFmtIt = adsk::Data::ChannelSerializer::allFormats().begin();
cFmtIt != adsk::Data::ChannelSerializer::allFormats().end(); cFmtIt++ )
{
MString fmtName( fmt->formatType() );
msg.
format( fmtMsg, fmtType, fmtName );
appendToResult( msg );
}
std::set<const adsk::Data::AssociationsSerializer*>::iterator aFmtIt;
for( aFmtIt = adsk::Data::AssociationsSerializer::allFormats().begin();
aFmtIt != adsk::Data::AssociationsSerializer::allFormats().end(); aFmtIt++ )
{
MString fmtName( fmt->formatType() );
msg.
format( fmtMsg, fmtType, fmtName );
appendToResult( msg );
}
std::set<const adsk::Data::StructureSerializer*>::iterator fmtIt;
for( fmtIt = adsk::Data::StructureSerializer::allFormats().begin();
fmtIt != adsk::Data::StructureSerializer::allFormats().end(); fmtIt++ )
{
MString fmtName( fmt->formatType() );
msg.
format( fmtMsg, fmtType, fmtName );
appendToResult( msg );
}
return status;
}