IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 29, 2007, 2:08:17 PM (19 years ago)
Author:
Paul Price
Message:

Adding new mode to difftool (definepoprun) to define a populated run. This combines definerun, 2x addinputskyfile and updaterun into a single call.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/src/difftool.c

    r15376 r15415  
    3939static bool diffskyfileMode(pxConfig *config);
    4040static bool revertdiffskyfileMode(pxConfig *config);
     41static bool definepoprunMode(pxConfig *config);
    4142
    4243static bool setdiffRunState(pxConfig *config, const char *diff_id, const char *state);
     
    6263        MODECASE(DIFFTOOL_MODE_DEFINERUN,         definerunMode);
    6364        MODECASE(DIFFTOOL_MODE_UPDATERUN,         updaterunMode);
    64         MODECASE(DIFFTOOL_MODE_ADDINPUTSKYFILE,    addinputskyfileMode);
    65         MODECASE(DIFFTOOL_MODE_INPUTSKYFILE,       inputskyfileMode);
    66         MODECASE(DIFFTOOL_MODE_TODIFFSKYFILE,      todiffskyfileMode);
    67         MODECASE(DIFFTOOL_MODE_ADDDIFFSKYFILE,     adddiffskyfileMode);
    68         MODECASE(DIFFTOOL_MODE_DIFFSKYFILE,        diffskyfileMode);
    69         MODECASE(DIFFTOOL_MODE_REVERTDIFFSKYFILE,  revertdiffskyfileMode);
     65        MODECASE(DIFFTOOL_MODE_ADDINPUTSKYFILE,   addinputskyfileMode);
     66        MODECASE(DIFFTOOL_MODE_INPUTSKYFILE,      inputskyfileMode);
     67        MODECASE(DIFFTOOL_MODE_TODIFFSKYFILE,     todiffskyfileMode);
     68        MODECASE(DIFFTOOL_MODE_ADDDIFFSKYFILE,    adddiffskyfileMode);
     69        MODECASE(DIFFTOOL_MODE_DIFFSKYFILE,       diffskyfileMode);
     70        MODECASE(DIFFTOOL_MODE_REVERTDIFFSKYFILE, revertdiffskyfileMode);
     71        MODECASE(DIFFTOOL_MODE_DEFINEPOPRUN,      definepoprunMode);
    7072        default:
    7173            psAbort("invalid option (this should not happen)");
     
    787789    return true;
    788790}
     791
     792
     793
     794
     795
     796static bool definepoprunMode(pxConfig *config)
     797{
     798    PS_ASSERT_PTR_NON_NULL(config, false);
     799
     800    // required options
     801    bool status = false;
     802    psString workdir = psMetadataLookupStr(&status, config->args, "-workdir");
     803    if (!status) {
     804        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -workdir");
     805        return false;
     806    }
     807    if (!workdir) {
     808        psError(PS_ERR_UNKNOWN, true, "-workdir is required");
     809        return false;
     810    }
     811
     812    psString skycell_id = psMetadataLookupStr(&status, config->args, "-skycell_id");
     813    if (!status) {
     814        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -skycell_id");
     815        return false;
     816    }
     817    if (!skycell_id) {
     818        psError(PS_ERR_UNKNOWN, true, "-skycell_id is required");
     819        return false;
     820    }
     821
     822    psString tess_id = psMetadataLookupStr(&status, config->args, "-tess_id");
     823    if (!status) {
     824        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -tess_id");
     825        return false;
     826    }
     827    if (!tess_id) {
     828        psError(PS_ERR_UNKNOWN, true, "-tess_id is required");
     829        return false;
     830    }
     831
     832    psString template_stack_id = psMetadataLookupStr(&status, config->args, "-template_stack_id");
     833    if (!status) {
     834        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -template_stack_id");
     835        return false;
     836    }
     837    psString template_warp_id = psMetadataLookupStr(&status, config->args, "-template_warp_id");
     838    if (!status) {
     839        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -template_warp_id");
     840        return false;
     841    }
     842    if (template_stack_id && template_warp_id) {
     843        psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Only one template can be defined.");
     844        return false;
     845    }
     846    if (!template_stack_id && !template_warp_id) {
     847        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     848                "No template has been defined (-template_stack_id or -template_warp_id)");
     849        return false;
     850    }
     851
     852    psString input_stack_id = psMetadataLookupStr(&status, config->args, "-input_stack_id");
     853    if (!status) {
     854        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -input_stack_id");
     855        return false;
     856    }
     857    psString input_warp_id = psMetadataLookupStr(&status, config->args, "-input_warp_id");
     858    if (!status) {
     859        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -input_warp_id");
     860        return false;
     861    }
     862    if (input_stack_id && input_warp_id) {
     863        psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Only one input can be defined.");
     864        return false;
     865    }
     866    if (!input_stack_id && !input_warp_id) {
     867        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     868                "No input has been defined (-input_stack_id or -input_warp_id)");
     869        return false;
     870    }
     871
     872    psString kind = NULL;
     873
     874    psTime *registered = NULL;
     875    {
     876        psString registeredStr = psMetadataLookupStr(&status, config->args, "-registered");
     877        if (!status) {
     878            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -registered");
     879            return false;
     880        }
     881        // pass through NULL as this is an optional field
     882        if (registeredStr) {
     883            registered = psTimeFromISO(registeredStr, PS_TIME_UTC);
     884        } else {
     885            registered = NULL;
     886        }
     887    }
     888
     889    bool simple = false;
     890    {
     891        bool status = false;
     892        simple = psMetadataLookupBool(&status, config->args, "-simple");
     893        if (!status) {
     894            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple");
     895            return false;
     896        }
     897    }
     898
     899    diffRunRow *run = diffRunRowAlloc(
     900            0,          // ID
     901            "reg",      // state
     902            workdir,
     903            NULL,       // dvodb
     904            registered,
     905            skycell_id,
     906            tess_id
     907    );
     908    psFree(registered);
     909
     910    if (!run) {
     911        psError(PS_ERR_UNKNOWN, false, "failed to alloc diffRun object");
     912        return true;
     913    }
     914
     915
     916    if (!psDBTransaction(config->dbh)) {
     917        psError(PS_ERR_UNKNOWN, false, "database error");
     918        return false;
     919    }
     920
     921    if (!diffRunInsertObject(config->dbh, run)) {
     922        psError(PS_ERR_UNKNOWN, false, "database error");
     923        psFree(run);
     924        return true;
     925    }
     926
     927    // get the assigned diff_id
     928    run->diff_id = psDBLastInsertID(config->dbh);
     929
     930    // Template
     931    if (!diffInputSkyfileInsert(config->dbh,
     932            run->diff_id,
     933            true,
     934            template_stack_id ? (psS64)atoll(template_stack_id) : PS_MAX_S64, // defined or NULL
     935            template_warp_id ? (psS64)atoll(template_warp_id) : PS_MAX_S64, // defined or NULL
     936            skycell_id,
     937            tess_id,
     938            kind
     939        )) {
     940        if (!psDBRollback(config->dbh)) {
     941            psError(PS_ERR_UNKNOWN, false, "database error");
     942        }
     943        psError(PS_ERR_UNKNOWN, false, "database error");
     944        return false;
     945    }
     946
     947    // Input
     948    if (!diffInputSkyfileInsert(config->dbh,
     949            run->diff_id,
     950            false,
     951            input_stack_id ? (psS64)atoll(input_stack_id) : PS_MAX_S64, // defined or NULL
     952            input_warp_id ? (psS64)atoll(input_warp_id) : PS_MAX_S64, // defined or NULL
     953            skycell_id,
     954            tess_id,
     955            kind
     956        )) {
     957        if (!psDBRollback(config->dbh)) {
     958            psError(PS_ERR_UNKNOWN, false, "database error");
     959        }
     960        psError(PS_ERR_UNKNOWN, false, "database error");
     961        return false;
     962    }
     963
     964    char *query = "UPDATE diffRun SET state = 'run' WHERE diff_id = '%" PRId64 "'";
     965    if (!p_psDBRunQuery(config->dbh, query, run->diff_id)) {
     966        if (!psDBRollback(config->dbh)) {
     967            psError(PS_ERR_UNKNOWN, false, "database error");
     968        }
     969        psError(PS_ERR_UNKNOWN, false,
     970                "failed to set state to run for diff_id %" PRId64, run->diff_id);
     971        return false;
     972    }
     973
     974    // point of no return
     975    if (!psDBCommit(config->dbh)) {
     976        psError(PS_ERR_UNKNOWN, false, "database error");
     977        return false;
     978    }
     979
     980    if (!diffRunPrintObject(stdout, run, !simple)) {
     981            psError(PS_ERR_UNKNOWN, false, "failed to print object");
     982            psFree(run);
     983            return false;
     984    }
     985
     986    psFree(run);
     987
     988    return true;
     989}
Note: See TracChangeset for help on using the changeset viewer.