@abc.abstractmethod<EOL><INDENT>def submit_job(self, job_descriptor, skip_if_output_present):<DEDENT>
raise NotImplementedError()<EOL>
Submit the job to be executed.

        Args:
          job_descriptor (job_model.JobDescriptor): parameters needed to launch all
          job tasks
          skip_if_output_present: (boolean) if true, skip tasks whose output
            is present (see --skip flag for more explanation).


        Returns:
          A dictionary containing the 'user-id', 'job-id', and 'task-id' list.
          For jobs that are not task array jobs, the task-id list should be empty.
          If all tasks were skipped, then the job-id is dsub_lib.NO_JOB.


        Raises:
          ValueError: submit_job may validate any of the parameters and raise
            a value error if any parameter (or specific combination of parameters)
            is not supported by the provider.