void oms::SingleImageChain::setToThreeBands()
{
   if(!theImageChain.valid()) return;
   ossim_uint32 bands = 0;
   if(theImageChain->getInput())
   {
      ossimImageSource* is = dynamic_cast<ossimImageSource*>(theImageChain->getInput());
      bands = is->getNumberOfOutputBands();
   }
   std::vector<ossim_uint32> bandList;
   if(bands >=3)
   {
      bandList.push_back(0);
      bandList.push_back(1);
      bandList.push_back(2);
      setBandSelection(bandList);
   }
   else if((bands < 3)&&(bands>0))
   {
      bandList.push_back(0);
      bandList.push_back(0);
      bandList.push_back(0);
      setBandSelection(bandList);
   }
}
void oms::SingleImageChain::setBandSelection(const std::vector<ossimString>& bandList, bool zeroBased)
{
   std::vector<ossim_uint32> bands(bandList.size());
   ossim_uint32 idx = 0;
   for(idx = 0; idx < bands.size(); ++idx)
   {
      bands[idx] = bandList[idx].toUInt32();
   }
   setBandSelection(bands, zeroBased);
}
void oms::SingleImageChain::setToThreeBandsReverse()
{
   if(!theImageChain.valid()) return;
   ossim_uint32 bands = theImageChain->getNumberOfInputBands();
   std::vector<ossim_uint32> bandList;
   if(bands >3)
   {
      bandList.push_back(2);
      bandList.push_back(1);
      bandList.push_back(0);
      setBandSelection(bandList);
   }
   else if((bands < 3)&&(bands>0))
   {
      bandList.push_back(0);
      bandList.push_back(0);
      bandList.push_back(0);
      setBandSelection(bandList);
   }
}
void ossimSingleImageChain::setToThreeBands()
{
   if (!m_bandSelector)
   {
      addBandSelector();
   }

   m_bandSelector->setEnableFlag(true);
   m_bandSelector->setThreeBandRgb();

   if ( m_histogramRemapper.valid() )
   {
      m_histogramRemapper->initialize();
   } 

#if 0
   if ( m_handler.valid() )
   {
      // Only do if not three bands already so the band list order is not wiped out.
      if ( !m_bandSelector.valid() ||
           ( m_bandSelector.valid() &&
             ( m_bandSelector->getNumberOfOutputBands() != 3 ) ) )
      {
         std::vector<ossim_uint32> bandList(3);

         if ( m_handler->getRgbBandList( bandList ) == false )
         {
            const ossim_uint32 BANDS = m_handler->getNumberOfInputBands();
            if(BANDS >= 3)
            {
               bandList[0] = 0;
               bandList[1] = 1;
               bandList[2] = 2;
            }
            else
            {
               bandList[0] = 0;
               bandList[1] = 0;
               bandList[2] = 0;
            }
         }
         setBandSelection(bandList);
      }
   }
#endif
}
void ossimSingleImageChain::setToThreeBandsReverse()
{
   if ( m_handler.valid() )
   {
      std::vector<ossim_uint32> bandList(3);
      const ossim_uint32 BANDS = m_handler->getNumberOfInputBands();
      if(BANDS >= 3)
      {
         bandList[0] = 2;
         bandList[1] = 1;
         bandList[2] = 0;
      }
      else
      {
         bandList[0] = 0;
         bandList[1] = 0;
         bandList[2] = 0;
      }
      setBandSelection(bandList);
   }
}
void oms::SingleImageChain::setBandSelection(const int* bandList, int bandListSize, bool zeroBased)
{
	setBandSelection(std::vector<ossim_uint32>(bandList, bandList+bandListSize));
}
void oms::SingleImageChain::setToSingleBand(ossim_int32 band)
{
   std::vector<ossim_uint32> bandList;
   bandList.push_back(band);
   setBandSelection(bandList);
}