| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod ValidateInput ( | 
|   output String feedback_o, | 
|   MacroPlan owner_i, | 
|   OptimizerPuzzleWIP optimizerpuzzlewip_i, | 
|   String optimizerpuzzlename_i | 
| ) declarative remote as Boolean | 
| { | 
|   Description: | 
|   [* | 
|     Verify if optimizer puzzle is valid | 
|     - empty name | 
|     - unique name | 
|   *] | 
|   TextBody: | 
|   [* | 
|     // Check if the values commited are valid | 
|     feedback_o := ''; | 
|      | 
|     // Check if name is empty | 
|     // First check for performance reason | 
|     if( optimizerpuzzlename_i = '' ) | 
|     { | 
|       feedback_o := Translations::MP_OptimizerPuzzle_ValidateInput_IsNameEmpty();  | 
|     } | 
|     // Check if opimizer is World | 
|     else if( optimizerpuzzlewip_i.IsWorld() ) | 
|     { | 
|       feedback_o := Translations::MP_OptimizerPuzzleBase_CannotEditWorld();  | 
|     } | 
|      | 
|     // Check if name is unique | 
|     else if( exists( owner_i, | 
|                      OptimizerPuzzle, | 
|                      op, | 
|                      optimizerpuzzlewip_i.CreateAsNew() or         // CreateAsNew = copy (versus edit), we always want consider all puzzle for name unique check | 
|                      op <> optimizerpuzzlewip_i.OptimizerPuzzle(), // not preventing user from editing and keeping the same name | 
|                      op.Name() = optimizerpuzzlename_i ) ) | 
|     { | 
|       feedback_o := Translations::MP_OptimizerPuzzle_ValidateInput_IsNameUnique(); | 
|     } | 
|          | 
|     return feedback_o = ''; | 
|   *] | 
| } |