#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package RPS::App;

use strict;
use warnings;

use lib '/app/tools/common/lib';
use Common::Assert;

use lib '/app/tools/rps/lib';
use RSApache::RSWebApp;
use base 'RSApache::RSWebApp';

my %gCommandMap = (

    # ---- User Commands ---- #
    'portal' => {
        'DEFAULT'   => 'RPS::Portal::Command::Main',
        'main'      => 'RPS::Portal::Command::Main',
        'history'   => 'RPS::Portal::Command::History',
    },
    'help' => {
        'DEFAULT'   => 'RPS::Help::Command::Show',
        'show'      => 'RPS::Help::Command::Show',
    },
    'forgotpw' => {
        'DEFAULT'  => 'AppUser::ForgotPW::Command::ForgotPW',
        'forgotpw' => 'AppUser::ForgotPW::Command::ForgotPW',
    },

    'login' => {
        'DEFAULT' => 'AppUser::Login::Command::Login',
        'login'   => 'AppUser::Login::Command::Login',
        'select'  => 'AppUser::Login::Command::Select',
    },

    'logout' => {
        'DEFAULT' => 'AppUser::Logout::Command::Logout',
        'logout'  => 'AppUser::Logout::Command::Logout',
    },

    'user' => {
        'DEFAULT'  => 'AppUser::User::Command::Search',
        'search'   => 'AppUser::User::Command::Search',
        'edit'     => 'AppUser::User::Command::Edit',
        'show'     => 'AppUser::User::Command::Show',
        'contact'  => 'AppUser::User::Command::Contact',
        'profile'  => 'AppUser::User::Command::Profile',
        'loginas'  => 'AppUser::User::Command::LoginAs',
        'changepw' => 'AppUser::User::Command::ChangePW',
        'import'   => 'AppUser::User::Command::Import',
        'terms'    => 'AppUser::User::Command::Terms',
        'view_terms' => 'AppUser::User::Command::ViewTerms',
    },

    # ---- RPS Commands ---- #
    'artist_contract' => {
        'DEFAULT'     => 'RPS::ArtistContract::Command::Main',
        'main'        => 'RPS::ArtistContract::Command::Main',
        'list'        => 'RPS::ArtistContract::Command::List',
        'show'        => 'RPS::ArtistContract::Command::Show',
        'edit'        => 'RPS::ArtistContract::Command::Edit',
        'search'      => 'RPS::ArtistContract::Command::Search',
        'search_artist_contract'      => 'RPS::ArtistContract::Command::SearchArtistContract',
        'search_license_income'      => 'RPS::ArtistContract::Command::SearchLicenseIncome',
        'term'        => 'RPS::ArtistContract::Command::TermEdit',
        'delete_term' => 'RPS::ArtistContract::Command::TermDelete',
        'deduction'   => 'RPS::ArtistContract::Command::DeductionEdit',
        'unit_escalation' => 'RPS::ArtistContract::Command::UnitEscalationEdit',
        'region'      => 'RPS::ArtistContract::Command::RegionEdit',
        'expense'     => 'RPS::ArtistContract::Command::ExpenseTypeEdit',
        'license_income'     => 'RPS::ArtistContract::Command::ArtistContractLicenseIncomeEdit',
    },

    'artist_payee' => {
        'DEFAULT' => 'RPS::ArtistPayee::Command::Main',
        'main'    => 'RPS::ArtistPayee::Command::Main',
        'list'    => 'RPS::ArtistPayee::Command::List',
        'search'  => 'RPS::ArtistPayee::Command::Search',
        'show'    => 'RPS::ArtistPayee::Command::Show',
        'edit'    => 'RPS::ArtistPayee::Command::Edit',
        'account' => 'RPS::ArtistPayee::Command::AccountEdit',
    },

    'artist_statement_settings' => {
        'DEFAULT'  => 'RPS::Statement::Settings::Command::ShowArtistSettings',
        'show'     => 'RPS::Statement::Settings::Command::ShowArtistSettings',
        'edit'     => 'RPS::Statement::Settings::Command::EditArtistSettings',
    },

    'artist_royalty' => {
        'DEFAULT' => 'RPS::ArtistRoyalty::Command::List',
        'list'    => 'RPS::ArtistRoyalty::Command::List',
        'show'    => 'RPS::ArtistRoyalty::Command::Show',
        'payors'  => 'RPS::ArtistRoyalty::Command::ListPayors',
        'editpay' => 'RPS::ArtistRoyalty::Command::EditPayments',
        'create'  => 'RPS::ArtistRoyalty::Command::Create',
        'commit'  => 'RPS::ArtistRoyalty::Command::Commit',
        'delete'  => 'RPS::ArtistRoyalty::Command::Delete',
        'invalidate' => 'RPS::ArtistRoyalty::Command::Invalidate',
        'pdf'     => 'RPS::ArtistRoyalty::Command::DownloadPDF',
        'cp_text'  => 'RPS::ArtistRoyalty::Command::DownloadCurrentPeriodText',
        'cp_excel' => 'RPS::ArtistRoyalty::Command::DownloadCurrentPeriodExcel',
        'ab_text'  => 'RPS::ArtistRoyalty::Command::DownloadAlbumBalancesText',
        'ab_excel' => 'RPS::ArtistRoyalty::Command::DownloadAlbumBalancesExcel',
    },

    'ca_license' => {
        'DEFAULT'         => 'RPS::License::Command::CA::Edit',
        'preedit'         => 'RPS::License::Command::CA::PreEdit',
        'edit'            => 'RPS::License::Command::CA::Edit',
        'delete'          => 'RPS::License::Command::CA::Delete',
        'show'            => 'RPS::License::Command::CA::Show',
        'copy'            => 'RPS::License::Command::CA::Copy',
        'account'         => 'RPS::License::Command::CA::AccountEdit',
        'crossed_account' => 'RPS::License::Command::CA::CrossedAccountEdit',
    },

    'ca_publisher' => {
        'DEFAULT' => 'RPS::Publisher::Command::CA::List',
        'list'    => 'RPS::Publisher::Command::CA::List',
        'list_licenses' => 'RPS::Publisher::Command::CA::ListLicenses',
        'list_direct_licenses' => 'RPS::Publisher::Command::CA::ListDirectLicenses',
        'list_indirect_licenses' => 'RPS::Publisher::Command::CA::ListIndirectLicenses',
        'search'  => 'RPS::Publisher::Command::CA::Search',
        'show'    => 'RPS::Publisher::Command::CA::Show',
        'edit'    => 'RPS::Publisher::Command::CA::Edit',
        'account' => 'RPS::Publisher::Command::CA::AccountEdit',
        'edit_direct' => 'RPS::Publisher::Command::CA::EditDirect',
        'edit_indirect' => 'RPS::Publisher::Command::CA::EditIndirect',
    },

    'catalog' => {
        'DEFAULT'            => 'RPS::Catalog::Command::Main',
        'main'               => 'RPS::Catalog::Command::Main',
        'list'               => 'RPS::Catalog::Command::List',
        'search'             => 'RPS::Catalog::Command::Search',
        'search_product'     => 'RPS::Catalog::Command::SearchProduct',
        'search_track'       => 'RPS::Catalog::Command::SearchTrack',
        'search_track_ajax'  => 'RPS::Catalog::Command::SearchTrackAjax',
        'show'               => 'RPS::Catalog::Command::Show',
        'edit'               => 'RPS::Catalog::Command::Edit',
        'da_show'            => 'RPS::Catalog::Command::DAShow',
        'da_edit'            => 'RPS::Catalog::Command::DAEdit',
        'attach'             => 'RPS::Catalog::Command::Attach',
        'detach'             => 'RPS::Catalog::Command::Detach',
        'dist_cache'         => 'RPS::Catalog::Command::DistributionCache',
        'dist_cache_status'  => 'RPS::Catalog::Command::DistributionCacheStatus',
        'advance'            => 'RPS::Catalog::Command::AdvanceEdit',
        'cc'                 => 'RPS::Catalog::Command::ToggleAdvanceCC',
        'error_report'       => 'RPS::Catalog::Command::ErrorReport',
        'expense'            => 'RPS::Catalog::Command::ExpenseView',
        'expense_edit'       => 'RPS::Catalog::Command::ExpenseEdit',
        'expense_delete'     => 'RPS::Catalog::Command::ExpenseDelete',
        'make_cc'            => 'RPS::Catalog::Command::SetAsControlledComp',
        'make_ca_cc'         => 'RPS::Catalog::Command::SetAsCAControlledComp',
        'show_main'          => 'RPS::Catalog::Command::ShowMain',
        'show_licenses'      => 'RPS::Catalog::Command::ShowLicenses',
        'show_ca_licenses'   => 'RPS::Catalog::Command::ShowCALicenses',
        'show_uk_licenses'   => 'RPS::Catalog::Command::ShowUkLicenses',
        'show_contracts'     => 'RPS::Catalog::Command::ShowContracts',
        'show_digital'       => 'RPS::Catalog::Command::ShowDigital',
        'search_duplicates'  => 'RPS::Catalog::Command::SearchDuplicates',
        'search_album'     	 => 'RPS::Catalog::Command::SearchAlbum',
        'search_artist'      => 'RPS::Catalog::Command::SearchArtist',
        'search_composer'    => 'RPS::Catalog::Command::SearchComposer',
        'search_import'      => 'RPS::Catalog::Command::SearchImport',
        'search_no_image'    => 'RPS::Catalog::Command::SearchImage',
        'search_no_audio'    => 'RPS::Catalog::Command::SearchAudio',
        'search_no_metadata' => 'RPS::Catalog::Command::SearchMetadata',
        'search_dr'          => 'RPS::Catalog::Command::SearchDistributionReady',
        'search_no_dr'       => 'RPS::Catalog::Command::SearchDistributionReady',
        'search_in_queue'    => 'RPS::Catalog::Command::SearchDistributionStatus',
        'search_delivered'   => 'RPS::Catalog::Command::SearchDistributionStatus',
        'image_upload'       => 'RPS::Catalog::Command::ImageUpload',
        'inactivate_album_contract'       => 'RPS::Catalog::Command::InactivateAlbumContract',
        'reactivate_album_contract'       => 'RPS::Catalog::Command::ReactivateAlbumContract',
    },

    'ccomp' => {
        'DEFAULT' => 'RPS::ControlledComposition::Command::Edit',
        'edit'    => 'RPS::ControlledComposition::Command::Edit',
        'show'    => 'RPS::ControlledComposition::Command::Show',
    },

    'contract' => {
        'DEFAULT'     => 'RPS::Contract::Command::Main',
        'main'        => 'RPS::Contract::Command::Main',
        'list'        => 'RPS::Contract::Command::List',
        'search'      => 'RPS::Contract::Command::Search',
    },

    'dashboard' => {
        'DEFAULT'      => 'RPS::Dashboard::Command::Show',
        'show'         => 'RPS::Dashboard::Command::Show',
        'delete_alert' => 'RPS::Dashboard::Command::DeleteAlert',
        'save_alert'   => 'RPS::Dashboard::Command::SaveAlert',
    },

    'display' => {
        'DEFAULT' => 'RPS::Display::Command::Show',
        'show'    => 'RPS::Display::Command::Show',
    },

    'distribution' => {
        'DEFAULT'            => 'RPS::Distribution::Command::Show',
        'show'               => 'RPS::Distribution::Command::Show',
        'upload'             => 'RPS::Distribution::Command::Show',
        'save'               => 'RPS::Distribution::Command::Show',
        'discard'            => 'RPS::Distribution::Command::Show',
        'fail'               => 'RPS::Distribution::Command::Show',
        'albumdetail'        => 'RPS::Distribution::Command::AlbumDetail',
        'exceldump'          => 'RPS::Distribution::Command::ExcelDump',
        'errorreport'        => 'RPS::Distribution::Command::ErrorReport',
        'override'           => 'RPS::Distribution::Command::Override',
        'duplicate'          => 'RPS::Distribution::Command::DuplicateSearch',
        'metadata_spec_pdf'  => 'RPS::Distribution::Command::DownloadMetadataSpecPDF',
        'metadata_template'  => 'RPS::Distribution::Command::DownloadMetadataTemplate',
        'duplicate'          => 'RPS::Distribution::Command::DuplicateSearch',
        'upload_file'        => 'RPS::Distribution::Command::UploadFile',
        'upload_status'      => 'RPS::Distribution::Command::UploadStatus',
    },

    'distributor' => {
        'DEFAULT' => 'RPS::Distributor::Command::Search',
        'search'  => 'RPS::Distributor::Command::Search',
    },

    'label' => {
        'DEFAULT' => 'RPS::Label::Command::List',
        'list'    => 'RPS::Label::Command::List',
        'edit'    => 'RPS::Label::Command::Edit',
        'show'    => 'RPS::Label::Command::Show',
        'set_default' => 'RPS::Label::Command::MakeDefault',
    },

    'label_contract' => {
        'DEFAULT'     => 'RPS::LabelContract::Command::Main',
        'main'        => 'RPS::LabelContract::Command::Main',
        'list'        => 'RPS::LabelContract::Command::List',
        'show'        => 'RPS::LabelContract::Command::Show',
        'edit'        => 'RPS::LabelContract::Command::Edit',
        'search'      => 'RPS::LabelContract::Command::Search',
        'edit_contract_ajax' => 'RPS::LabelContract::Command::EditContractAjax',
        'show_contract_ajax' => 'RPS::LabelContract::Command::ShowContractAjax',
        'edit_term_ajax'     => 'RPS::LabelContract::Command::EditTermAjax',
        'show_term_ajax'     => 'RPS::LabelContract::Command::ShowTermAjax',        
        'delete_term_ajax'   => 'RPS::LabelContract::Command::DeleteTermAjax',
    },

    'label_payee' => {
        'DEFAULT' => 'RPS::LabelPayee::Command::Main',
        'main'    => 'RPS::LabelPayee::Command::Main',
        'list'    => 'RPS::LabelPayee::Command::List',
        'search'  => 'RPS::LabelPayee::Command::Search',
        'show'    => 'RPS::LabelPayee::Command::Show',
        'edit'    => 'RPS::LabelPayee::Command::Edit',
        'account' => 'RPS::LabelPayee::Command::AccountEdit',
    },

    'label_royalty' => {
        'DEFAULT' => 'RPS::LabelRoyalty::Command::List',
        'list'    => 'RPS::LabelRoyalty::Command::List',
        'show'    => 'RPS::LabelRoyalty::Command::Show',
        'editpay' => 'RPS::LabelRoyalty::Command::EditPayments',
        'create'  => 'RPS::LabelRoyalty::Command::Create',
        'commit'  => 'RPS::LabelRoyalty::Command::Commit',
        'delete'  => 'RPS::LabelRoyalty::Command::Delete',
        'invalidate' => 'RPS::LabelRoyalty::Command::Invalidate',
        'pdf'     => 'RPS::LabelRoyalty::Command::DownloadPDF',
    },

    'license' => {
        'DEFAULT'         => 'RPS::License::Command::US::Edit',
        'preedit'         => 'RPS::License::Command::US::PreEdit',
        'edit'            => 'RPS::License::Command::US::Edit',
        'delete'          => 'RPS::License::Command::US::Delete',
        'show'            => 'RPS::License::Command::US::Show',
        'copy'            => 'RPS::License::Command::US::Copy',
        'account'         => 'RPS::License::Command::US::AccountEdit',
        'crossed_account' => 'RPS::License::Command::US::CrossedAccountEdit',
    },

    'log' => {
        'DEFAULT' => 'RPS::Log::Command::Begin',
        'b'       => 'RPS::Log::Command::Begin',
        'e'       => 'RPS::Log::Command::End',
    },

    'main' => {
        'DEFAULT'  => 'RPS::Main::Command::Redirect',
        'redirect' => 'RPS::Main::Command::Redirect',
    },
    
    'mapface' => {
        'DEFAULT' => 'RPS::MapFace::Command::Main',
        'main'    => 'RPS::MapFace::Command::Main',
        'map'     => 'RPS::MapFace::Command::Map',
        'undo'    => 'RPS::MapFace::Command::Undo',
        'approve' => 'RPS::MapFace::Command::Approve',
        'more_sales_ajax' => 'RPS::MapFace::Command::MoreSalesAjax',
    },    

    'master' => {
        'DEFAULT'    => 'RPS::Master::Command::List',
        'list'       => 'RPS::Master::Command::List',
        'show'       => 'RPS::Master::Command::Show',
        'edit'       => 'RPS::Master::Command::Edit',
        'search'     => 'RPS::Master::Command::Search',
        'search_xml' => 'RPS::Master::Command::SearchXML',
    },

    'ca_mechanical' => {
        'DEFAULT'   => 'RPS::Mechanical::CA::Command::List',
        'list'      => 'RPS::Mechanical::CA::Command::List',
        'show'      => 'RPS::Mechanical::CA::Command::Show',
        'payors'    => 'RPS::Mechanical::CA::Command::ListPayors',
        'editpay'   => 'RPS::Mechanical::CA::Command::EditPayments',
        'create'    => 'RPS::Mechanical::CA::Command::Create',
        'commit'    => 'RPS::Mechanical::CA::Command::Commit',
        'delete'    => 'RPS::Mechanical::CA::Command::Delete',
        'pdf'       => 'RPS::Mechanical::CA::Command::DownloadPDF',
        'excel'     => 'RPS::Mechanical::CA::Command::DownloadExcel',
        'text'      => 'RPS::Mechanical::CA::Command::DownloadText',
        'cmrra'     => 'RPS::Mechanical::CA::Command::DownloadCMRRA',
        'label_pdf' => 'RPS::Mechanical::CA::Command::DownloadLabelPDF',
        'invalidate' => 'RPS::Mechanical::CA::Command::Invalidate',
        'export_text' => 'RPS::Mechanical::CA::Command::DownloadExportText',
        'export_excel' => 'RPS::Mechanical::CA::Command::DownloadExportExcel',
    },

    'mechanical' => {
        'DEFAULT'   => 'RPS::Mechanical::US::Command::List',
        'list'      => 'RPS::Mechanical::US::Command::List',
        'show'      => 'RPS::Mechanical::US::Command::Show',
        'payors'    => 'RPS::Mechanical::US::Command::ListPayors',
        'editpay'   => 'RPS::Mechanical::US::Command::EditPayments',
        'create'    => 'RPS::Mechanical::US::Command::Create',
        'commit'    => 'RPS::Mechanical::US::Command::Commit',
        'delete'    => 'RPS::Mechanical::US::Command::Delete',
        'pdf'       => 'RPS::Mechanical::US::Command::DownloadPDF',
        'label_pdf' => 'RPS::Mechanical::US::Command::DownloadLabelPDF',
        'excel'     => 'RPS::Mechanical::US::Command::DownloadExcel',
        'text'      => 'RPS::Mechanical::US::Command::DownloadText',
        'invalidate' => 'RPS::Mechanical::US::Command::Invalidate',
        'export_text' => 'RPS::Mechanical::US::Command::DownloadExportText',
        'export_excel' => 'RPS::Mechanical::US::Command::DownloadExportExcel',
    },

    'new_contract' => {
        'show'   => 'RPS::ArtistContract::Command::Show',
        'edit'   => 'RPS::ArtistContract::Command::Edit',
        'search' => 'RPS::ArtistContract::Command::Search',
    },

    'payee' => {
        'DEFAULT' => 'RPS::Payee::Command::Main',
        'main'    => 'RPS::Payee::Command::Main',
        'list'    => 'RPS::Payee::Command::List',
        'search'  => 'RPS::Payee::Command::Search',
    },

    'payor' => {
        'DEFAULT'     => 'RPS::Payor::Command::Search',
        'search'      => 'RPS::Payor::Command::Search',
        'show'        => 'RPS::Payor::Command::Show',
        'edit'        => 'RPS::Payor::Command::Edit',
        'delete'      => 'RPS::Payor::Command::Delete',
        'set_default' => 'RPS::Payor::Command::MakeDefault',
    },

    'price' => {
        'DEFAULT' => 'RPS::Price::Command::List',
        'list'    => 'RPS::Price::Command::List',
        'edit'    => 'RPS::Price::Command::Edit',
        'delete'  => 'RPS::Price::Command::Delete',
    },

    'product' => {
        'DEFAULT'      => 'RPS::Product::Command::Show',
        'delete'       => 'RPS::Product::Command::Delete',
        'show'         => 'RPS::Product::Command::Show',
        'edit'         => 'RPS::Product::Command::Edit',
        'edit_digital' => 'RPS::Product::Command::EditDigital',
        'edit_service' => 'RPS::Product::Command::EditService',
        'show_digital' => 'RPS::Product::Command::ShowDigital',
        'toggle_distribution' => 'RPS::Product::Command::ToggleDistribution',
        'toggle_price_tier'   => 'RPS::Product::Command::TogglePriceTier',
    },

    'publisher' => {
        'DEFAULT' => 'RPS::Publisher::Command::US::List',
        'list'    => 'RPS::Publisher::Command::US::List',
        'list_licenses' => 'RPS::Publisher::Command::US::ListLicenses',
        'list_direct_licenses' => 'RPS::Publisher::Command::US::ListDirectLicenses',
        'list_indirect_licenses' => 'RPS::Publisher::Command::US::ListIndirectLicenses',
        'search'  => 'RPS::Publisher::Command::US::Search',
        'show'    => 'RPS::Publisher::Command::US::Show',
        'edit'    => 'RPS::Publisher::Command::US::Edit',
        'account' => 'RPS::Publisher::Command::US::AccountEdit',
        'edit_direct' => 'RPS::Publisher::Command::US::EditDirect',
        'edit_indirect' => 'RPS::Publisher::Command::US::EditIndirect',
    },

    'reference' => {
        'statrates' => 'RPS::Reference::Command::StatRateTable',
        'DEFAULT'   => 'RPS::Reference::Command::StatRateTable',
    },

    'region' => {
        'DEFAULT' => 'RPS::Region::Command::List',
        'list'    => 'RPS::Region::Command::List',
        'edit'    => 'RPS::Region::Command::Edit',
        'show'    => 'RPS::Region::Command::Show',
        'delete'  => 'RPS::Region::Command::Delete',
        'search'  => 'RPS::Region::Command::Search',
        'search_all'  => 'RPS::Region::Command::SearchAll',
        'set_default_mech' => 'RPS::Region::Command::MakeDefaultMechanicalLicenseRegion',
    },

    'report' => {
        'DEFAULT'               => 'RPS::Report::Dynamic::Command::List',
        'list'                  => 'RPS::Report::Dynamic::Command::List',
        'show'                  => 'RPS::Report::Dynamic::Command::Show',
        'cancel'                => 'RPS::Report::Dynamic::Command::Cancel',
        'delete'                => 'RPS::Report::Dynamic::Command::Delete',
        'download'              => 'RPS::Report::Dynamic::Command::Download',

        'tracks_no_timings'     => 'RPS::Report::Command::TracksWithoutSongTimings',
        'license_overage'       => 'RPS::Report::Command::LicenseOverage',
        'tracks_no_licenses'    => 'RPS::Report::Command::TracksWithoutLicenses',
        'inactive_licenses'     => 'RPS::Report::Command::InactiveLicenses',
        'albums_no_contracts'   => 'RPS::Report::Command::AlbumsWithoutContracts',
        'products_no_prices'    => 'RPS::Report::Command::ProductsWithoutPrices',
        'missed_sales'          => 'RPS::Report::Command::MissedSales',
        'payee_mailing'         => 'RPS::Report::Command::ArtistPayeeMailing',
        'publisher_mailing'     => 'RPS::Report::Command::PublisherMailing',
        'license_accrual'       => 'RPS::Report::Command::MissingLicenseAccrual',
        'artist_reserve_pipeline' => 'RPS::Report::Command::ArtistReservePipeline',
        'uk_mech_unit_summary'    => 'RPS::Report::Command::UKMechUnitSummary',
        'uk_mech_negative_units'  => 'RPS::Report::Command::UKMechNegativeUnits',
        'uk_mech_current_retentions' => 'RPS::Report::Command::UKMechCurrentRetentions',
        'uk_mech_retention_summary'  => 'RPS::Report::Command::UKMechRetentionSummary',
        'uk_mech_retention_run_summary'  => 'RPS::Report::Command::UKMechRetentionRunSummary',
        'uk_mech_missed_sales'           => 'RPS::Report::Command::UKMechMissedSales',
        'ca_tracks_no_timings'     => 'RPS::Report::Command::CATracksWithoutSongTimings',
        'ca_license_overage'       => 'RPS::Report::Command::CALicenseOverage',
        'ca_tracks_no_licenses'    => 'RPS::Report::Command::CATracksWithoutLicenses',
        'ca_inactive_licenses'     => 'RPS::Report::Command::CAInactiveLicenses',
        'ca_publisher_mailing'     => 'RPS::Report::Command::CAPublisherMailing',
        'ca_license_accrual'       => 'RPS::Report::Command::CAMissingLicenseAccrual',
        'mechanical_reserve_pipeline' => 'RPS::Report::Command::MechanicalReservePipeline',
        'ca_mechanical_reserve_pipeline' => 'RPS::Report::Command::CAMechanicalReservePipeline',
        'labels_no_contracts'      => 'RPS::Report::Command::LabelsWithoutContracts',
        'labels_multiple_contracts' => 'RPS::Report::Command::LabelsWithMultipleContracts',

    },

    'service' => {
        'DEFAULT' => 'RPS::Service::Command::Edit',
        'edit'    => 'RPS::Service::Command::Edit',
        'search'  => 'RPS::Service::Command::Search',
    },

    'song' => {
        'DEFAULT'    => 'RPS::Song::Command::List',
        'list'       => 'RPS::Song::Command::List',
        'show'       => 'RPS::Song::Command::Show',
        'edit'       => 'RPS::Song::Command::Edit',
        'search'     => 'RPS::Song::Command::Search',
        'search_xml' => 'RPS::Song::Command::SearchXML',
    },

    'statement' => {
        'DEFAULT'         => 'RPS::Statement::Command::Main',
        'main'            => 'RPS::Statement::Command::Main',
        'show_mechanical' => 'RPS::Statement::Command::ShowMechanical',
        'show_mechanical_pdf' => 'RPS::Statement::Command::ShowMechanicalPDF',
        'show_ca_mechanical_pdf' => 'RPS::Statement::Command::ShowCAMechanicalPDF',
        'show_ca_mechanical' => 'RPS::Statement::Command::ShowCAMechanical',
        'show_uk_mechanical' => 'RPS::Statement::Command::ShowUKMechanical',
        'show_artist'     => 'RPS::Statement::Command::ShowArtist',
        'show_label' => 'RPS::Statement::Command::ShowLabel',
        'excel_artist'      => 'RPS::Statement::Command::DownloadArtistExcel',
        'pdf_artist'      => 'RPS::Statement::Command::DownloadArtistPDF',
        'pdf_label'      => 'RPS::Statement::Command::DownloadLabelPDF',
        'pdf_mechanical'  => 'RPS::Statement::Command::DownloadMechanicalPDF',
        'pdf_ca_mechanical'  => 'RPS::Statement::Command::DownloadCAMechanicalPDF',
        'pdf_mcps'  => 'RPS::Statement::Command::DownloadMcpsPDF',
        'text_mechanical'  => 'RPS::Statement::Command::DownloadMechanicalText',
        'text_ca_mechanical'  => 'RPS::Statement::Command::DownloadCAMechanicalText',
        'cmrra_ca_mechanical'  => 'RPS::Statement::Command::DownloadCAMechanicalCMRRA',
        'text_mcps'  => 'RPS::Statement::Command::DownloadMcpsText',
        'report_label'  => 'RPS::Statement::Command::DownloadLabelReport',
        'us_mechanical_pdf'  => 'RPS::Statement::Command::USMechanicalPDF',
        'ca_mechanical_pdf'  => 'RPS::Statement::Command::CAMechanicalPDF',
        'cmrra_statement_excel'  => 'RPS::Statement::Command::DownloadCAMechanicalCMRRAExcel',
        'cmrra_summary_excel'    => 'RPS::Statement::Command::DownloadCAMechanicalCMRRASummaryExcel',
    },

    'term' => {
        'DEFAULT' => 'RPS::Term::Command::Edit',
        'edit'    => 'RPS::Term::Command::Edit',
        'show'    => 'RPS::Term::Command::Show',
    },

    'track' => {
        'DEFAULT'        => 'RPS::Track::Command::Edit',
        'edit'           => 'RPS::Track::Command::Edit',
        'show'           => 'RPS::Track::Command::Show',
        'delete'         => 'RPS::Track::Command::Delete',
        'presubmit'      => 'RPS::Track::Command::PreSubmit',
        'mech'           => 'RPS::Track::Command::MechanicalExempt',
        'ca_mech'        => 'RPS::Track::Command::CAMechanicalExempt',
        'attach'         => 'RPS::Track::Command::Attach',
        'detach'         => 'RPS::Track::Command::Detach',
        'advance'        => 'RPS::Track::Command::AdvanceEdit',
        'cc'             => 'RPS::Track::Command::ToggleAdvanceCC',
        'prtc'           => 'RPS::Track::Command::SetProrateTrackCount',
        'expense'        => 'RPS::Track::Command::ExpenseView',
        'expense_edit'   => 'RPS::Track::Command::ExpenseEdit',
        'expense_delete' => 'RPS::Track::Command::ExpenseDelete',
        'up'             => 'RPS::Track::Command::MoveUp',
        'down'           => 'RPS::Track::Command::MoveDown',
        'inactivate_track_contract'   => 'RPS::Track::Command::InactivateTrackContract',
        'reactivate_track_contract'   => 'RPS::Track::Command::ReactivateTrackContract',
    },

    'uk_mech' => {
        'DEFAULT'    => 'RPS::Mechanical::UK::Command::List',
        'list'       => 'RPS::Mechanical::UK::Command::List',
        'show'       => 'RPS::Mechanical::UK::Command::Show',
        'create'     => 'RPS::Mechanical::UK::Command::Create',
        'commit'     => 'RPS::Mechanical::UK::Command::Commit',
        'delete'     => 'RPS::Mechanical::UK::Command::Delete',
        'invalidate' => 'RPS::Mechanical::UK::Command::Invalidate',
        'pdf'        => 'RPS::Mechanical::UK::Command::DownloadPDF',
        'excel'      => 'RPS::Mechanical::UK::Command::DownloadExcel',
        'text'       => 'RPS::Mechanical::UK::Command::DownloadText',

        'edit_mcps_license'    => 'RPS::Mechanical::UK::Command::EditMcpsLicense',
        'show_mcps_license'    => 'RPS::Mechanical::UK::Command::ShowMcpsLicense',
    },

    'workbench' => {
        'DEFAULT' => 'RPS::Workbench::Command::Show',
        'show'    => 'RPS::Workbench::Command::Show',
    },

    'locale' => {
        'validate_number' => 'RPS::Locale::Command::ValidateNumber',
        'format_number' => 'RPS::Locale::Command::FormatNumber',
        'format_money' => 'RPS::Locale::Command::FormatMoney',
    },

    'test' => {
        'DEFAULT' => 'RPS::Test::Command::Test',
    },
);

sub _getCommandMap {
    my ($self) = @_;

    return \%gCommandMap;
}

1;
