Esempio n. 1
0
    @SuppressWarnings("unchecked")
    @Override
    public void validatePhase() throws PipelineException {
      /* the slate and format Nuke script nodes */
      String slatePrefix = null;
      {
        String script = getStringParamValue(new ParamMapping(aSlateScript), false);
        Path path = new Path(pProjectNamer.getSlateNukeScriptsParentPath(), script);
        pSlateNodeName = path.toString();
        slatePrefix = path.getName();
        pRequiredNodeNames.add(pSlateNodeName);
      }

      String formatPrefix = null;
      {
        String script = getStringParamValue(new ParamMapping(aFormatScript), false);
        Path path = new Path(pProjectNamer.getFormatNukeScriptsParentPath(), script);
        pFormatNodeName = path.toString();
        formatPrefix = path.getName();
        pRequiredNodeNames.add(pFormatNodeName);
      }

      /* the final QuickTime codec settings */
      String codecPrefix = null;
      {
        String settings = getStringParamValue(new ParamMapping(aCodecSettings), false);
        Path path = new Path(pProjectNamer.getQtCodecSettingsParentPath(), settings);
        pCodecNodeName = path.toString();
        codecPrefix = path.getName();
        pRequiredNodeNames.add(pCodecNodeName);
      }

      /* lookup the rest of the parameters */
      pDeliveryType = getStringParamValue(new ParamMapping(aDeliveryType));
      pDeliverable = getStringParamValue(new ParamMapping(DeliverNamer.aDeliverable), false);
      pClientVersion = getStringParamValue(new ParamMapping(aClientVersion));
      pClientShotName = getStringParamValue(new ParamMapping(aClientShotName));
      pLensInfo = getStringParamValue(new ParamMapping(aLensInfo), false);
      pTakeInfo = getStringParamValue(new ParamMapping(aTakeInfo), false);
      pNotes = getStringParamValue(new ParamMapping(aNotes));
      pSlateHold = getIntegerParamValue(new ParamMapping(aSlateHold), new Range<Integer>(0, null));

      /* compute the full frame range with slate holds added */
      FrameRange range = pSourceVersion.getPrimarySequence().getFrameRange();
      if (range.getBy() != 1)
        throw new PipelineException(
            "The source images node ("
                + pSourceVersion.getName()
                + " v"
                + pSourceVersion.getVersionID()
                + ") must have a frame step increment of (1)!");
      pFrameRange = new FrameRange(range.getStart(), range.getEnd() + pSlateHold, 1);

      /* initialize internal Deliver (Shot) namer */
      {
        pDeliverNamer = new DeliverNamer(pClient, pQueue, getBuilderInformation(), pStudioDefs);
        pShotNamer = pDeliverNamer;

        pDeliverNamer.setParamValue(new ParamMapping(StudioDefinitions.aProjectName), pProjectName);
        pDeliverNamer.setParamValue(new ParamMapping(StudioDefinitions.aSequenceName), pSeqName);
        pDeliverNamer.setParamValue(new ParamMapping(StudioDefinitions.aShotName), pShotName);
        pDeliverNamer.setParamValue(new ParamMapping(DeliverNamer.aDeliverable), pDeliverable);
        pDeliverNamer.setParamValue(new ParamMapping(DeliverNamer.aTaskType), pTaskType.toString());
        pDeliverNamer.setParamValue(new ParamMapping(DeliverNamer.aSlatePrefix), slatePrefix);
        pDeliverNamer.setParamValue(new ParamMapping(DeliverNamer.aFormatPrefix), formatPrefix);
        pDeliverNamer.setParamValue(new ParamMapping(DeliverNamer.aCodecPrefix), codecPrefix);

        pDeliverNamer.generateNames();
      }
    }
Esempio n. 2
0
    /**
     * Phase in which parameter values should be extracted from parameters and checked for
     * consistency and applicability.
     */
    @Override
    public void validatePhase() throws PipelineException {
      /* sets up the built-in parameters common to all builders */
      validateBuiltInParams();

      /* setup the StudioDefinitions version of the UtilContext */
      pStudioDefs.setContext(pContext);

      /* lookup the source images node */
      String sourceNodeName = null;
      VersionID sourceVersionID = null;
      {
        Path spath = (Path) getParamValue(aSourceNode);
        if (spath == null) throw new PipelineException("No " + aSourceNode + " was specified!");
        sourceNodeName = spath.toString();
        pSourcePrefix = spath.getName();

        String sversion = (String) getParamValue(aSourceVersion);
        if (sversion == null)
          throw new PipelineException("No " + aSourceVersion + " was specified!");

        try {
          sourceVersionID = new VersionID(sversion);
        } catch (Exception ex) {
          throw new PipelineException(
              "The value supplied for the "
                  + aSourceVersion
                  + " parameter "
                  + "("
                  + sversion
                  + ") is not a legal node revision number!\n\n"
                  + ex.getMessage());
        }

        try {
          pSourceVersion = pClient.getCheckedInVersion(sourceNodeName, sourceVersionID);
        } catch (PipelineException ex) {
          throw new PipelineException(
              "The source images node ("
                  + sourceNodeName
                  + " v"
                  + sourceVersionID
                  + ") "
                  + "does not exist!");
        }
      }

      /* set namer/builder parameters based on the annotations on the source images node */
      {
        boolean validated = false;
        String projName = null;
        String taskName = null;
        String taskType = null;
        TreeMap<String, BaseAnnotation> annotations = pClient.getAnnotations(sourceNodeName);
        TreeSet<String> otherPurposes = new TreeSet<String>();
        for (String aname : annotations.keySet()) {
          if (aname.equals("Task") || aname.startsWith("AltTask")) {
            BaseAnnotation annot = annotations.get(aname);
            String purpose = lookupPurpose(sourceNodeName, aname, annot);
            if (purpose == null) {
              otherPurposes.add("<UNKNWON>");
            } else if (purpose.equals(aFocus)
                || purpose.equals(aEdit)
                || purpose.equals(aProduct)) {
              projName = lookupProjectName(sourceNodeName, aname, annot);
              taskName = lookupTaskName(sourceNodeName, aname, annot);
              taskType = lookupTaskType(sourceNodeName, aname, annot);
              validated = true;
              break;
            } else {
              otherPurposes.add(purpose);
            }
          }
        }

        if (!validated) {
          StringBuilder buf = new StringBuilder();
          buf.append(
              "Unable to find an valid "
                  + aEdit
                  + ", "
                  + aFocus
                  + " or "
                  + aProduct
                  + " "
                  + "task annotation for the source images node ("
                  + sourceNodeName
                  + " v"
                  + sourceVersionID
                  + ")!");

          if (!otherPurposes.isEmpty()) {
            buf.append(
                "\n\nHowever, there were task annotations on the source images node for "
                    + "the following unsupported purposes:");
            for (String purpose : otherPurposes) buf.append(" " + purpose);
          }

          throw new PipelineException(buf.toString());
        }

        if (taskName.length() != 5)
          throw new PipelineException(
              "The "
                  + aTaskName
                  + " ("
                  + taskName
                  + ") of the source images "
                  + "node ("
                  + sourceNodeName
                  + " v"
                  + sourceVersionID
                  + ") did not conform to "
                  + "the 2-letter sequence name followed by 3-digit shot number format!");
        pProjectName = projName;
        pSeqName = taskName.substring(0, 2);
        pShotName = taskName.substring(2, 5);

        try {
          pTaskType = TaskType.valueOf(TaskType.class, taskType);
        } catch (IllegalArgumentException ex) {
          throw new PipelineException(
              "The "
                  + DeliverNamer.aTaskType
                  + " ("
                  + taskType
                  + ") of the source images "
                  + "node ("
                  + sourceNodeName
                  + " v"
                  + sourceVersionID
                  + ") was an unknown type "
                  + "by this builder!");
        }
      }

      /* generate a temporary working area where the approval process will take place
      and change the util context to use it instead for all future operations */
      {
        String tempView =
            ("QtDeliver" + "-" + pProjectName + "-" + pSeqName + pShotName + "-" + pSourcePrefix);
        tempView = tempView.replaceAll(" ", "_");

        setContext(new UtilContext(pContext.getAuthor(), tempView, pContext.getToolset()));
      }

      /* turn on the DoAnnotations flag for the StageInformation shared by all
      of the Stages created by this builder since we always want task annotations */
      getStageInformation().setDoAnnotations(true);

      /* initialize internal Project namer */
      {
        pProjectNamer.setParamValue(new ParamMapping(StudioDefinitions.aProjectName), pProjectName);
        pProjectNamer.generateNames();
      }
    }