void ResourceThreadModel::Save(const ResourceRequest& request)
{
  DALI_ASSERT_DEBUG(request.GetType()->id == ResourceModel);

  DALI_LOG_INFO(mLogFilter, Debug::Verbose, "%s(%s)\n", __PRETTY_FUNCTION__, request.GetPath().c_str());

  bool success(false);

  BaseObject* baseObject = dynamic_cast<BaseObject*>(request.GetResource().Get());
  if( baseObject != NULL )
  {
    BaseHandle baseHandle(baseObject);
    ModelData modelData = ModelData::DownCast(baseHandle);
    if( modelData )
    {
      scoped_ptr<BinaryModelBuilder> modelBuilder (new BinaryModelBuilder(request.GetPath().c_str()));
      if ( modelBuilder->Write(modelData) )
      {
        success = true;

        // Construct SavedResource
        SavedResource resource( request.GetId(), request.GetType()->id);

        // Queue the loaded resource
        mResourceLoader.AddSavedResource(resource);
      }
    }
  }
  if( ! success )
  {
    // add to the failed queue
    FailedResource resource(request.GetId(), FailureUnknown);
    mResourceLoader.AddFailedSave(resource);
  }
}