Class ArrayDesignSequenceManipulatingCli

All Implemented Interfaces:
org.springframework.beans.factory.Aware, org.springframework.beans.factory.InitializingBean, org.springframework.context.ApplicationContextAware, org.springframework.context.EnvironmentAware, CLI
Direct Known Subclasses:
ArrayDesignAnnotationFileCli, ArrayDesignAuditTrailCleanupCli, ArrayDesignBioSequenceDetachCli, ArrayDesignBlatCli, ArrayDesignMapSummaryCli, ArrayDesignMergeCli, ArrayDesignProbeCleanupCLI, ArrayDesignProbeMapperCli, ArrayDesignRepeatScanCli, ArrayDesignReportCli, ArrayDesignSequenceAssociationCli, ArrayDesignSubsumptionTesterCli, BioSequenceCleanupCli

public abstract class ArrayDesignSequenceManipulatingCli extends AbstractAutoSeekingCLI<ArrayDesign>
Aggregates functionality useful when writing CLIs that need to get an array design from the database and do something with it.
Author:
pavlidis
  • Field Details

  • Constructor Details

    • ArrayDesignSequenceManipulatingCli

      protected ArrayDesignSequenceManipulatingCli()
  • Method Details

    • setExplicitADsOnly

      protected void setExplicitADsOnly()
      Refuse -all, so this CLI can never be pointed at every platform in the system.

      Intended for destructive CLIs (detachSequences, deletePlatformElements) where -all wiping every platform's sequences or elements is a mistake with no undo.

    • getCommandGroup

      public CLI.CommandGroup getCommandGroup()
      Description copied from interface: CLI
      Obtain the command group for this CLI.
      Specified by:
      getCommandGroup in interface CLI
      Overrides:
      getCommandGroup in class AbstractCLI
    • buildOptions

      protected final void buildOptions(org.apache.commons.cli.Options options)
      Description copied from class: AbstractCLI
      Build option implementation.

      Implement this method to add options to your command line, using the OptionBuilder.

      This is called right after AbstractCLI.buildStandardOptions(Options) so the options will be added after standard options.

      Overrides:
      buildOptions in class AbstractCLI
    • buildArrayDesignOptions

      protected void buildArrayDesignOptions(org.apache.commons.cli.Options options)
    • processOptions

      @OverridingMethodsMustInvokeSuper protected final void processOptions(org.apache.commons.cli.CommandLine commandLine) throws org.apache.commons.cli.ParseException
      Description copied from class: AbstractCLI
      Process command line options.

      Implement this to provide processing of options. It is called after AbstractCLI.buildOptions(Options) and right before AbstractCLI.doWork().

      Overrides:
      processOptions in class AbstractAutoSeekingCLI<ArrayDesign>
      Throws:
      org.apache.commons.cli.ParseException - in case of unrecoverable failure (i.e. missing option or invalid value), an exception can be raised and will result in an exit code of AbstractCLI.FAILURE.
    • processArrayDesignOptions

      protected void processArrayDesignOptions(org.apache.commons.cli.CommandLine commandLine) throws org.apache.commons.cli.ParseException
      Throws:
      org.apache.commons.cli.ParseException
    • getMarkOnlyReason

      @Nullable protected String getMarkOnlyReason(org.apache.commons.cli.CommandLine commandLine, String... optionsThatDoWork) throws org.apache.commons.cli.ParseException
      Read the reason given for -markOnly, or return null if it was not used.

      A platform's BLAT results and gene mappings are held per sequence, so running one platform does the work for every platform that shares its sequences — but the audit event propagates only down the merge tree, leaving those platforms with fresh data and an audit trail that says they were never processed. -markOnly writes the event and nothing else.

      The event is a claim that the work was done, so the platforms have to be ones the operator named: -all, -auto and -mdate each select a set nobody enumerated.

      Parameters:
      optionsThatDoWork - options of the calling CLI that make it do work, which -markOnly contradicts
      Throws:
      org.apache.commons.cli.ParseException
    • doAuthenticatedWork

      protected final void doAuthenticatedWork() throws Exception
      Specified by:
      doAuthenticatedWork in class AbstractAuthenticatedCLI
      Throws:
      Exception
    • selectsOwnPlatforms

      protected boolean selectsOwnPlatforms()
      Whether the options of this CLI select platforms by some means other than -a, -f or -all.

      If so, an empty selection from those options is not an error: processArrayDesigns(Collection) is invoked with an empty collection and is responsible for finding its own platforms.

    • processArrayDesigns

      protected void processArrayDesigns(Collection<ArrayDesign> arrayDesigns)
    • processArrayDesign

      protected void processArrayDesign(ArrayDesign arrayDesign)
    • toBatchObject

      protected Serializable toBatchObject(@Nullable ArrayDesign object)
      Description copied from class: AbstractAutoSeekingCLI
      Convert the given object to a serializable object for batch processing.
      Specified by:
      toBatchObject in class AbstractAutoSeekingCLI<ArrayDesign>
    • isSubsumedOrMerged

      protected boolean isSubsumedOrMerged(ArrayDesign arrayDesign)
      Parameters:
      arrayDesign - the array design to check
      Returns:
      true if the sequences on the given array design would be equivalently treated by analyzing another array design. In the case of subsumption, this only works if the array design has been either analyzed for subsuming status. (the analysis is not done as part of this call).
    • shouldRun

      protected boolean shouldRun(Date skipIfLastRunLaterThan, ArrayDesign design, Class<? extends ArrayDesignAnalysisEvent> cls)
    • getRelatedDesigns

      protected Collection<ArrayDesign> getRelatedDesigns(ArrayDesign design)
      Mergees or subsumees of the platform.
      Parameters:
      design - a platform
      Returns:
      related platforms
    • needToRun

      protected boolean needToRun(@Nullable Date skipIfLastRunLaterThan, ArrayDesign arrayDesign, Class<? extends ArrayDesignAnalysisEvent> eventClass)
      Parameters:
      eventClass - e.g., ArrayDesignSequenceAnalysisEvent.class
      Returns:
      true if skipIfLastRunLaterThan is null, or there is no record of a previous analysis, or if the last analysis was run before skipIfLastRunLaterThan. false otherwise.