// Path: cloud-vmware-server/src/main/java/jetbrains/buildServer/clouds/base/connector/AsyncCloudTask.java
// public interface AsyncCloudTask {
// 
//   /**
//    * Consecutive execution of this method will makes no effect. Only first call of this method starts the executing.
//    * All next calls just return the result
//    * @return result
//    */
//   CloudTaskResult executeOrGetResult();
// 
//   @NotNull
//   String getName();
// 
//   long getStartTime();
// 
//   boolean isDone();
// }
// 
// Path: cloud-vmware-server/src/main/java/jetbrains/buildServer/clouds/base/connector/CloudTaskResult.java
// public class CloudTaskResult {
//   private final boolean myHasErrors;
//   private final String myDescription;
//   private final Throwable myThrowable;
// 
// 
// 
//   public CloudTaskResult() {
//     this(false, null, null);
//   }
// 
//   public CloudTaskResult(@Nullable final String description) {
//     this(false, description, null);
//   }
// 
//   public CloudTaskResult(final boolean hasErrors, @Nullable final String description, @Nullable final Throwable throwable) {
//     myHasErrors = hasErrors;
//     myDescription = description;
//     myThrowable = throwable;
//   }
// 
//   public boolean isHasErrors() {
//     return myHasErrors;
//   }
// 
//   public String getDescription() {
//     return myDescription;
//   }
// 
//   public Throwable getThrowable() {
//     return myThrowable;
//   }
// }


import com.vmware.vim25.LocalizedMethodFault;
import com.vmware.vim25.TaskInfo;
import com.vmware.vim25.TaskInfoState;
import com.vmware.vim25.mo.Task;
import java.util.Date;
import java.util.concurrent.Callable;
import java.util.concurrent.atomic.AtomicBoolean;
import jetbrains.buildServer.clouds.base.connector.AsyncCloudTask;
import jetbrains.buildServer.clouds.base.connector.CloudTaskResult;
import jetbrains.buildServer.log.LogUtil;
import jetbrains.buildServer.util.impl.Lazy;
import org.jetbrains.annotations.NotNull;
/*
 * Copyright 2000-2022 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package jetbrains.buildServer.clouds.vmware.connector;


/**
 * @author Sergey.Pak
 *         Date: 7/29/2014
 *         Time: 6:22 PM
 */
public class VmwareTaskWrapper implements AsyncCloudTask {

  private final Callable<Task> myVmwareTask;
  private final String myTaskName;
  private volatile long myStartTime;
// Path: cloud-vmware-server/src/main/java/jetbrains/buildServer/clouds/base/connector/AsyncCloudTask.java
// public interface AsyncCloudTask {
// 
//   /**
//    * Consecutive execution of this method will makes no effect. Only first call of this method starts the executing.
//    * All next calls just return the result
//    * @return result
//    */
//   CloudTaskResult executeOrGetResult();
// 
//   @NotNull
//   String getName();
// 
//   long getStartTime();
// 
//   boolean isDone();
// }
// 
// Path: cloud-vmware-server/src/main/java/jetbrains/buildServer/clouds/base/connector/CloudTaskResult.java
// public class CloudTaskResult {
//   private final boolean myHasErrors;
//   private final String myDescription;
//   private final Throwable myThrowable;
// 
// 
// 
//   public CloudTaskResult() {
//     this(false, null, null);
//   }
// 
//   public CloudTaskResult(@Nullable final String description) {
//     this(false, description, null);
//   }
// 
//   public CloudTaskResult(final boolean hasErrors, @Nullable final String description, @Nullable final Throwable throwable) {
//     myHasErrors = hasErrors;
//     myDescription = description;
//     myThrowable = throwable;
//   }
// 
//   public boolean isHasErrors() {
//     return myHasErrors;
//   }
// 
//   public String getDescription() {
//     return myDescription;
//   }
// 
//   public Throwable getThrowable() {
//     return myThrowable;
//   }
// }


// Path: cloud-vmware-server/src/main/java/jetbrains/buildServer/clouds/vmware/connector/VmwareTaskWrapper.java
import com.vmware.vim25.LocalizedMethodFault;
import com.vmware.vim25.TaskInfo;
import com.vmware.vim25.TaskInfoState;
import com.vmware.vim25.mo.Task;
import java.util.Date;
import java.util.concurrent.Callable;
import java.util.concurrent.atomic.AtomicBoolean;
import jetbrains.buildServer.clouds.base.connector.AsyncCloudTask;
import jetbrains.buildServer.clouds.base.connector.CloudTaskResult;
import jetbrains.buildServer.log.LogUtil;
import jetbrains.buildServer.util.impl.Lazy;
import org.jetbrains.annotations.NotNull;

/*
 * Copyright 2000-2022 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package jetbrains.buildServer.clouds.vmware.connector;


/**
 * @author Sergey.Pak
 *         Date: 7/29/2014
 *         Time: 6:22 PM
 */
public class VmwareTaskWrapper implements AsyncCloudTask {

  private final Callable<Task> myVmwareTask;
  private final String myTaskName;
  private volatile long myStartTime;
  private final Lazy<CloudTaskResult> myResultLazy;