рдмрджрд▓рддреЗ рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ Enums рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж

рдпрд╣ рдкреЛрд╕реНрдЯ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ рдпрд╛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХреЛрдб рдХреЗ рджреЛрд╣рд░рд╛рд╡ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИред рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЖрдорддреМрд░ рдкрд░ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИред







рдЬрд╛рд╡рд╛ рдореЗрдВ Enums рдХрд╛ рд╡рд┐рд╡рд░рдг



рдЬрд╛рд╡рд╛ рдореЗрдВ, рд╕рдВрд╕реНрдХрд░рдг 1.5 рд╕реЗ рд╢реБрд░реВ, рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдмреАрдЪ, рддрдерд╛рдХрдерд┐рдд рдПрдирдо рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдирд╛рдорд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдирдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рд▓рд╛рдн рд╣реИрдВ:



рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдореЗрдВ, рдХрд╣рддреЗ рд╣реИрдВ, рд╕реА ++, рдЬрд╛рд╡рд╛ рдореЗрдВ enums рдкреВрд░реНрдг рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ, рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди рджреЗрддрд╛ рд╣реИред



рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рдпрд╣ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЕрдм рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░рд╛рдВрдХ (рдпрд╛рдиреА рдбреЗрдЯрд╛) рдирд╣реАрдВ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдкреВрд░реНрдг рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ, рдЬрд┐рдирд╕реЗ рд╣рдо рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред



рд╕рд╛рджрдЧреА рд╢рдХреНрддрд┐ рд╣реИ!



рдиреАрдЪреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдпрд╣ рдЬрдЯрд┐рд▓ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред



рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдореБрд╢реНрдХрд┐рд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдЙрдиреНрдореБрдЦ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдирд╛ рд╣реИ, рдЬреИрд╕реЗ:





рдЗрди рд▓рдХреНрд╖рдгреЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЖрд╡реЗрджрди рд╕рдВрджрд┐рдЧреНрдз рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЦрддрд░рдирд╛рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХреА рдмрдврд╝реА рд╣реБрдИ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЧрд╣рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдмрджрд▓рддреЗ рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рдЧрдгрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛



рдЕрдм, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рд░ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рдореИрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред



рдЧрдгрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд▓рд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреВрдБрдХрд┐ рдЧрдгрдирд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕реНрд╡рд┐рдЪ рд╢рд╛рдЦрд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд╕рднреА рддрд░реНрдХ рдЧрдгрди рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рдбрд╛рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдПрдХ рддрдереНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛рдж рд░рдЦреЗрдВ, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред



рдЧрдгрдирд╛рдУрдВ рдХреА рд╕реНрдкрд╖реНрдЯ рд╕рд╛рджрдЧреА рдХреЗ рдХрд╛рд░рдг, рд╕рд╛рде рд╣реА рд╕рд╛рде рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ C ++ рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЕрдиреБрднрд╡ рд╕реЗ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдиреНрдпреВрдорд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдХрдордЬреЛрд░ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рд╣рдо рд╕рднреА рд╕рд╢рд░реНрдд рддрд░реНрдХ рдХреЛ рдЧрдгрдирд╛ рдХреЗ рддрд░реАрдХреЛрдВ (рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП) рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рддрд░реНрдХ рдХреА рд╕рдВрддреГрдкреНрддрд┐ рдФрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╣реИред рдЗрд╕рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреА рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рднреА рдмрдврд╝ рдЬрд╛рддреА рд╣реИред



рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  1. рд╣рдо рд╕рдВрдЪрдп рдХреЗ рд╡рд░реНрдЧ рдХреЛ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рддреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рд╣рдо рдПрдиреНрдпреВрдорд░реЗрд╢рди рдХреНрд▓рд╛рд╕ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рднреАрдбрд╝ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред
  2. рдпрд╣ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдлреИрдХреНрдЯреНрд░реА рд╕реНрд╡рдпрдВ рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЕрд░реНрдерд╛рддред рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рд╕реНрддрд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реЛрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, xml рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд▓рд╕рд╕ рдФрд░ minuses рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ:



рдЗрди рд╕рднреА рдиреБрдХрд╕рд╛рдиреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдП рдЧрдП рдЖрдИрдбреАрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╕рдорд░реНрдерди рд▓рд┐рдЦрдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдХреБрдЫ рд▓рд╛рдЧрддреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрдВрджреНрд░ рдФрд░ рдПрдХ рдмрд╛рд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдФрд░ рд╣рд░ рдЬрдЧрд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ





рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯ рд╣реИ (рд╡рд┐рднрд┐рдиреНрди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ):



 рдкрдмреНрд▓рд┐рдХ рдПрдиреБрдо рдбреЙрдХреНрдпреВрдореЗрдВрдЯрд╕реНрдЯреИрдЯрд╕ {
	 рдирдпрд╛ (0),
	 DRAFT (1),
	 рдкреНрд░рдХрд╛рд╢рд┐рдд (2),
	 ARCHIVED (3);

	 рдирд┐рдЬреА рдбреЙрдХреНрдпреВрдореЗрдВрдЯрд╕реНрдЯреИрдЯрд╕ (int statusCode) {
		 this.statusCode = statusCode;
	 }

	 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int getStatusCode () {
		 рд╕реНрдЯреЗрдЯрд╕рдХреЛрдб рд╡рд╛рдкрд╕ рдХрд░реЗрдВ;
	 }

	 рдирд┐рдЬреА рдЗрдВрдЯ рд╕реНрдЯреЗрдЯрд╕рдХреЛрдб;
 }

 // рд╡реЗрдм
 рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рдбреЙрдХреНрдпреВрдореЗрдВрдЯрд╡рд░реНрдХреНрд╕рдлреНрд▓реЛрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ {
	 ...

	 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реВрдЪреА <рдСрдкрд░реЗрд╢рди> getAvailableOperations (DocumentStatus рд╕реНрдерд┐рддрд┐) {
		 рд╕реВрдЪреА <рдСрдкрд░реЗрд╢рди> рд╕рдВрдЪрд╛рд▓рди;

		 рд╕реНрд╡рд┐рдЪ (рд╕реНрдерд┐рддрд┐) {
		 рдорд╛рдорд▓рд╛ рдирдпрд╛:
			 рд╕рдВрдЪрд╛рд▓рди = ...;
			 рддреЛрдбрд╝;
		 рдорд╛рдорд▓рд╛ DRAFT:
			 рд╕рдВрдЪрд╛рд▓рди = ...;
			 рддреЛрдбрд╝;
		 рдорд╛рдорд▓рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд:
			 рд╕рдВрдЪрд╛рд▓рди = ...;
			 рддреЛрдбрд╝;
		 рдорд╛рдорд▓рд╛ ARCHIVED:
			 рд╕рдВрдЪрд╛рд▓рди = ...;
			 рддреЛрдбрд╝;
		 }

		 рд╡рд╛рдкрд╕реА рдХреЗ рд╕рдВрдЪрд╛рд▓рди;
	 }

	 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп doOperation (DocumentStatus рд╕реНрдерд┐рддрд┐, рдСрдкрд░реЗрд╢рди рд╕реЗрд╢рди) APIException рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ {
		 рд╕реНрд╡рд┐рдЪ (рд╕реНрдерд┐рддрд┐) {
		 рдорд╛рдорд▓рд╛ рдирдпрд╛:
			 // рдСрдкрд░реЗрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ
			 рддреЛрдбрд╝;
		 рдорд╛рдорд▓рд╛ DRAFT:
			 // рдСрдкрд░реЗрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдПрдХ рдФрд░ рд╕реЗрдЯ
			 рддреЛрдбрд╝;
		 рдорд╛рдорд▓рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд:
			 // рдСрдкрд░реЗрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рддреАрд╕рд░рд╛ рд╕реЗрдЯ
			 рддреЛрдбрд╝;
		 рдорд╛рдорд▓рд╛ ARCHIVED:
			 // рдЖрджрд┐ред
			 рддреЛрдбрд╝;
		 }
	 }
 }


 // рдЕрдиреБрд╕реВрдЪрд┐рдд рдХрд╛рд░реНрдп
 рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ ReportGenerationProcessor {
	 ...

	 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдЬреЗрдирд░реЗрдЯрдкреЛрд░реНрдЯ (рд░рд┐рдкреЛрд░реНрдЯ рд░рд┐рдкреЛрд░реНрдЯ) {
		 DocumentStatus рд╕реНрдерд┐рддрд┐ = report.getDocument ()ред GetStatus ();
		 рд░рд┐рдкреЛрд░реНрдЯрдкрд╛рд░реНрдореНрд╕ рдкрд░рдореЗрд╕;

		 рд╕реНрд╡рд┐рдЪ (рд╕реНрдерд┐рддрд┐) {
		 рдорд╛рдорд▓рд╛ рдирдпрд╛:
		 рдорд╛рдорд▓рд╛ DRAFT:
			 // params = рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪрдпрди рдорд╛рдирджрдВрдб
			 рддреЛрдбрд╝;
		 рдорд╛рдорд▓рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд:
			 // params = рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдЪрдпрди рдорд╛рдирджрдВрдб
			 рддреЛрдбрд╝;
		 рдорд╛рдорд▓рд╛ ARCHIVED:
			 // рдЖрджрд┐ред
			 рддреЛрдбрд╝;
		 }

		 // рд░рд┐рдкреЛрд░реНрдЯ рдЬрдирд░реЗрд╢рди
	 }
 }




рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХрдордЬреЛрд░ рд░реВрдк рд╕реЗ рдкрд░рд╕реНрдкрд░ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред

рдорд╛рди рд▓реАрдЬрд┐рдП, рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реНрдерд┐рддрд┐ рд╣реИ - рдкреБрд╖реНрдЯрд┐ (VERIFY) рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЧрдпрд╛ред

рдПрдХ рдирдИ рд╕реНрдерд┐рддрд┐ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╕рднреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдПрдХ рдирдпрд╛ рдорд╛рдорд▓рд╛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рдХрд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЬрд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдмреЗрд╢рдХ, рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ-рдмреНрд▓реЙрдХ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдмрдбрд╝реА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рдореНрди рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ:



 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ IReportGeneratorProcessor {
	 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░рд┐рдкреЛрд░реНрдЯрдкрд╛рд░реНрдореНрд╕ getReportParams ();
 }

 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ IDocumentWorklfowProcessor {
	 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реВрдЪреА <рдСрдкрд░реЗрд╢рди> getAvailableOperations ();

	 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп doOperation (рдСрдкрд░реЗрд╢рди рдСрдк) APIException рдлреЗрдВрдХрддрд╛ рд╣реИ;
 }

 рдкрдмреНрд▓рд┐рдХ рдПрдиреБрдо рдбреЙрдХреНрдпреВрдореЗрдВрдЯрд╕реНрдЯреИрдЯрд╕ {
	 // рдпрд╣рд╛рдВ, рдирдП рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдХрд╛рд░рдЦрд╛рдиреЗ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрд▓рд╕реА рдЖрд░рдВрднрд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
	 рдирдпрд╛ (0, рдирдпрд╛ NewDocReportGeneratorProcessor (), рдирдпрд╛ NewDocWorklfowProcessor ()),
	 DRAFT (1, рдирдпрд╛ DraftDocReportGeneratorProcessor (), рдирдпрд╛ DraftDocWorklfowProcessor ())
	 рдкреНрд░рдХрд╛рд╢рд┐рдд (2, ...),
	 ARCHIVED (3, ...);

	 рдирд┐рдЬреА рдбреЙрдХреНрдпреВрдореЗрдВрдЯрд╕реНрдЯреИрдЯрд╕ (int statusCode, IReportGeneratorProcessor рд░рд┐рдкреЛрд░реНрдЯрдкреНрд░рдХрд╛рд╢,
			 IDocumentWorklfowProcessor docProc) {
		 this.statusCode = statusCode;
		 this.reportProc = reportProc;
		 this.docProc = docProc;
	 }

	 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ int getStatusCode () {
		 рд╕реНрдЯреЗрдЯрд╕рдХреЛрдб рд╡рд╛рдкрд╕ рдХрд░реЗрдВ;
	 }

	 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IReportGeneratorProcessor getReportGeneratorProcessor () {
		 рд╡рд╛рдкрд╕реА рд░рд┐рдкреЛрд░реНрдЯрдкреНрд░рдХрд╛рд╢;
	 }

	 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IDocumentWorklfowProcessor getDocumentWorklfowProcessor () {
		 рд╡рд╛рдкрд╕реА docProc;
	 }

	 рдирд┐рдЬреА рдЗрдВрдЯ рд╕реНрдЯреЗрдЯрд╕рдХреЛрдб;
	 рдирд┐рдЬреА IReportGeneratorProcessor рд░рд┐рдкреЛрд░реНрдЯрдкреНрд░рдХрд╛рд╢;
	 рдирд┐рдЬреА IDocumentWorklfowProcessor docProc;
 }

 // рд╡реЗрдм
 рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рдбреЙрдХреНрдпреВрдореЗрдВрдЯрд╡рд░реНрдХреНрд╕рдлреНрд▓реЛрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ {
	 ...

	 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реВрдЪреА <рдСрдкрд░реЗрд╢рди> getAvailableOperations (DocumentStatus рд╕реНрдерд┐рддрд┐) {
		 рд╡рд╛рдкрд╕реА рдХреА рд╕реНрдерд┐рддрд┐ред рд╡рд┐рдЬреЗрдЯрдбрд╛рдХреНрдпреВрдорд░рд╡реЙрдХ рд╢реЗрд▓реНрдлрдкреНрд░реЛрд╕реЗрд╕рд░ ()ред getAvailableOperations ();
	 }

	 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп doOperation (DocumentStatus рд╕реНрдерд┐рддрд┐, рдСрдкрд░реЗрд╢рди рд╕реЗрд╢рди) APIException рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ {
		 status.getDocumentWorklfowProcessor ()ред doOperation (op);
	 }
 }


 // рдЕрдиреБрд╕реВрдЪрд┐рдд рдХрд╛рд░реНрдп
 рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ ReportGenerationProcessor {
	 ...

	 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдЬреЗрдирд░реЗрдЯрдкреЛрд░реНрдЯ (рд░рд┐рдкреЛрд░реНрдЯ рд░рд┐рдкреЛрд░реНрдЯ) {
		 DocumentStatus рд╕реНрдерд┐рддрд┐ = report.getDocument ()ред GetStatus ();
		 ReportParams params = status.getReportGeneratorProcessor ()ред GetReportParams ();

		 // рд░рд┐рдкреЛрд░реНрдЯ рдЬрдирд░реЗрд╢рди
	 }
 }




рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб рдмрд╣реБрдд рдХрдо рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдмреЗрд╢рдХ, рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╕реНрд╡рдпрдВ рдЕрднреА рднреА рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдм рдПрдХ рдирдП рдПрдиреНрдпреВрдорд░реЗрд╢рди рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░, рдЗрд╕рдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рдХреЛрдИ рдЦрддрд░рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдПрдВрдЧреЗ (рдЬрд╛рдирдмреВрдЭрдХрд░ рддреЛрдбрд╝рдлреЛрдбрд╝ рдФрд░ "рдмрд╛рдж рдХреЗ рд▓рд┐рдП рддреНрдпрд╛рдЧ" рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ), рдХрдо рд╕реЗ рдХрдо рд╡реЗ рд╕реЛрдЪреЗрдВрдЧреЗред рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк рд╣рдореЗрд╢рд╛ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИрдВрдбрд▓рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



	 рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ IDocumentWorklfowProcessor getDocumentWorklfowProcessor () {
		 рд╡рд╛рдкрд╕реА (docProc! = null)  docProc: DEFAULT_WORKFLOW_PROCESSOR;
	 }




рдкреАрдПрд╕ рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╡реИрдзрддрд╛ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдмреНрд░реЛрд╕реИрдХреНрд╡рд┐рдЯреА рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╡реЛрдЯ рдорд┐рд▓рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ IntelliJ IDEA, Eclipse рдФрд░ NetBeans рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред



рдпреБрдкреАрдбреАред рдЦрдВрдб "рд╕рд░рд▓рддрд╛ рд╢рдХреНрддрд┐ рд╣реИ!" рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдЕрдкрдиреА рдЬрдЧрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдкреЛрд╕реНрдЯ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред



UPD 2. рд▓реЛрдХрдкреНрд░рд┐рдп рдорд╛рдВрдЧ рд╕реЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рд╛ред рдкреЛрд╕реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рднреА рдЬреЛрдбрд╝рд╛ред



All Articles