@Override
 public void execute() {
   ProjectRootNode projectRootNode = Ode.getInstance().getCurrentYoungAndroidProjectRootNode();
   if (projectRootNode != null) {
     String target = YoungAndroidProjectNode.YOUNG_ANDROID_TARGET_ANDROID;
     ChainableCommand cmd =
         new SaveAllEditorsCommand(
             new GenerateYailCommand(
                 new BuildCommand(
                     target,
                     new ShowProgressBarCommand(
                         target,
                         new WaitForBuildResultCommand(
                             target, new DownloadProjectOutputCommand(target)),
                         "DownloadAction"))));
     //        updateBuildButton(true);
     cmd.startExecuteChain(
         Tracking.PROJECT_ACTION_BUILD_DOWNLOAD_YA,
         projectRootNode,
         new Command() {
           @Override
           public void execute() {
             //                updateBuildButton(false);
           }
         });
   }
 }
 @Override
 public void execute() {
   ProjectRootNode projectRootNode = Ode.getInstance().getCurrentYoungAndroidProjectRootNode();
   if (projectRootNode != null) {
     ChainableCommand cmd = new SaveAllEditorsCommand(new CopyYoungAndroidProjectCommand(true));
     cmd.startExecuteChain(Tracking.PROJECT_ACTION_CHECKPOINT_YA, projectRootNode);
   }
 }
 @Override
 public void execute() {
   ProjectRootNode projectRootNode = Ode.getInstance().getCurrentYoungAndroidProjectRootNode();
   if (projectRootNode != null) {
     ChainableCommand cmd = new AddFormCommand();
     cmd.startExecuteChain(Tracking.PROJECT_ACTION_ADDFORM_YA, projectRootNode);
   }
 }
 @Override
 public void execute() {
   ProjectRootNode projectRootNode = Ode.getInstance().getCurrentYoungAndroidProjectRootNode();
   if (projectRootNode != null) {
     String target = YoungAndroidProjectNode.YOUNG_ANDROID_TARGET_ANDROID;
     ChainableCommand cmd = new SaveAllEditorsCommand(new GenerateYailCommand(null));
     // updateBuildButton(true);
     cmd.startExecuteChain(
         Tracking.PROJECT_ACTION_BUILD_YAIL_YA,
         projectRootNode,
         new Command() {
           @Override
           public void execute() {
             // updateBuildButton(false);
           }
         });
   }
 }
 @Override
 public void execute() {
   YoungAndroidSourceNode sourceNode = Ode.getInstance().getCurrentYoungAndroidSourceNode();
   if (sourceNode != null && !sourceNode.isScreen1()) {
     // DeleteFileCommand handles the whole operation, including displaying the confirmation
     // message dialog, closing the form editor and the blocks editor,
     // deleting the files in the server's storage, and deleting the
     // corresponding client-side nodes (which will ultimately trigger the
     // screen deletion in the DesignToolbar).
     final String deleteConfirmationMessage =
         MESSAGES.reallyDeleteForm(sourceNode.getFormName());
     ChainableCommand cmd =
         new DeleteFileCommand() {
           @Override
           protected boolean deleteConfirmation() {
             return Window.confirm(deleteConfirmationMessage);
           }
         };
     cmd.startExecuteChain(Tracking.PROJECT_ACTION_REMOVEFORM_YA, sourceNode);
   }
 }