예제 #1
0
파일: ElmBatch.cpp 프로젝트: yuguess/GSoC
bool ElmBatch::extractInputArgs(PlugInArgList* pInputArgList)
{
   if (ElmCore::extractInputArgs(pInputArgList) == false)
   {
      return false;
   }

   StepResource pStep("Extract Batch Input Args", "app", "32A136BE-8531-42ca-8B22-086293B5A925");
   VERIFY(pStep.get() != NULL);

   // Get the Use Gains/Offsets Flag.
   if (pInputArgList->getPlugInArgValue<bool>(UseGainsOffsetsArg(), mUseGainsOffsets) == false)
   {
      pStep->finalize(Message::Failure, "The \"" + UseGainsOffsetsArg() + "\" input arg is invalid.");
      if (mpProgress != NULL)
      {
         mpProgress->updateProgress(pStep->getFailureMessage(), 100, ERRORS);
      }

      return false;
   }

   if (mUseGainsOffsets == true)
   {
      // If the Use Gains/Offsets Flag is set to true, get the Gains/Offsets Filename.
      Filename* pFilename = pInputArgList->getPlugInArgValue<Filename>(GainsOffsetsFilenameArg());
      if (pFilename == NULL || pFilename->getFullPathAndName().empty() == true)
      {
         // If the Gains/Offsets Filename is not set, use the default.
         mGainsOffsetsFilename = getDefaultGainsOffsetsFilename();
      }
      else if (pFilename->isDirectory() == true)
      {
         pStep->finalize(Message::Failure, "The \"" + GainsOffsetsFilenameArg() + "\" cannot be a directory.");
         if (mpProgress != NULL)
         {
            mpProgress->updateProgress(pStep->getFailureMessage(), 100, ERRORS);
         }

         return false;
      }
      else
      {
         mGainsOffsetsFilename = pFilename->getFullPathAndName();
      }
   }
   else
   {
      // If the Use Gains/Offsets Flag is set to false, get the Signature Filenames and AOI Filenames.
      vector<Filename*> pSignatureFilenames;
      if (pInputArgList->getPlugInArgValue<vector<Filename*> >
         (SignatureFilenamesArg(), pSignatureFilenames) == false)
      {
         pStep->finalize(Message::Failure, "The \"" + SignatureFilenamesArg() + "\" input arg is invalid.");
         if (mpProgress != NULL)
         {
            mpProgress->updateProgress(pStep->getFailureMessage(), 100, ERRORS);
         }

         return false;
      }

      for (vector<Filename*>::iterator iter = pSignatureFilenames.begin(); iter != pSignatureFilenames.end(); ++iter)
      {
         bool previouslyLoaded;
         Signature* pSignature = dynamic_cast<Signature*>
            (getElement(*iter, "Signature", NULL, previouslyLoaded));
         if (pSignature == NULL)
         {
            pStep->finalize(Message::Failure, "The \"" + SignatureFilenamesArg() +
               "\" input arg contains an invalid value.");
            if (mpProgress != NULL)
            {
               mpProgress->updateProgress(pStep->getFailureMessage(), 100, ERRORS);
            }

            return false;
         }

         mpSignatures.push_back(pSignature);
         if (previouslyLoaded == false)
         {
            mpSignaturesToDestroy.push_back(pSignature);
         }
      }

      // Get the AOI names.
      vector<Filename*> pAoiFilenames;
      if (pInputArgList->getPlugInArgValue<vector<Filename*> >(AoiFilenamesArg(), pAoiFilenames) == false)
      {
         pStep->finalize(Message::Failure, "The \"" + AoiFilenamesArg() + "\" input arg is invalid.");
         if (mpProgress != NULL)
         {
            mpProgress->updateProgress(pStep->getFailureMessage(), 100, ERRORS);
         }

         return false;
      }

      for (vector<Filename*>::iterator iter = pAoiFilenames.begin(); iter != pAoiFilenames.end(); ++iter)
      {
         bool previouslyLoaded;
         AoiElement* pAoiElement = dynamic_cast<AoiElement*>
            (getElement(*iter, "AoiElement", mpRasterElement, previouslyLoaded));
         if (pAoiElement == NULL)
         {
            pStep->finalize(Message::Failure, "The \"" + AoiFilenamesArg() +
               "\" input arg contains an invalid value.");
            if (mpProgress != NULL)
            {
               mpProgress->updateProgress(pStep->getFailureMessage(), 100, ERRORS);
            }

            return false;
         }

         mpAoiElements.push_back(pAoiElement);
         if (previouslyLoaded == false)
         {
            mpAoiElementsToDestroy.push_back(pAoiElement);
         }
      }
   }

   pStep->finalize();
   return true;
}