// Path: aliyun-ecs/src/main/java/org/jclouds/aliyun/ecs/compute/ECSComputeService.java
// @Singleton
// public class ECSComputeService extends BaseComputeService {
// 
//    private final JCloudsNativeComputeServiceAdapter client;
// 
//    @Inject
//    protected ECSComputeService(
//          ComputeServiceContext context,
//          ECSComputeServiceAdapter client,
//          Map<String, Credentials> credentialStore,
//          @Memoized Supplier<Set<? extends Image>> images,
//          Supplier<Set<? extends Hardware>> hardwareProfiles,
//          @Memoized Supplier<Set<? extends Location>> locations,
//          ListNodesStrategy listNodesStrategy,
//          GetImageStrategy getImageStrategy,
//          GetNodeMetadataStrategy getNodeMetadataStrategy,
//          CreateNodesInGroupThenAddToSet runNodesAndAddToSetStrategy,
//          RebootNodeStrategy rebootNodeStrategy,
//          DestroyNodeStrategy destroyNodeStrategy,
//          ResumeNodeStrategy resumeNodeStrategy,
//          SuspendNodeStrategy suspendNodeStrategy,
//          @Named("ECS") Provider<TemplateBuilder> templateBuilderProvider,
//          @Named("ECS") Provider<TemplateOptions> templateOptionsProvider,
//          @Named(TIMEOUT_NODE_RUNNING) Predicate<AtomicReference<NodeMetadata>> nodeRunning,
//          @Named(TIMEOUT_NODE_TERMINATED) Predicate<AtomicReference<NodeMetadata>> nodeTerminated,
//          @Named(TIMEOUT_NODE_SUSPENDED) Predicate<AtomicReference<NodeMetadata>> nodeSuspended,
//          Factory initScriptRunnerFactory,
//          InitAdminAccess initAdminAccess,
//          org.jclouds.compute.callables.RunScriptOnNode.Factory runScriptOnNodeFactory,
//          PersistNodeCredentials persistNodeCredentials,
//          Timeouts timeouts,
//          @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor,
//          Optional<ImageExtension> imageExtension,
//          Optional<SecurityGroupExtension> securityGroupExtension) {
//       super(context, credentialStore, images, hardwareProfiles, locations, listNodesStrategy, getImageStrategy,
//             getNodeMetadataStrategy, runNodesAndAddToSetStrategy, rebootNodeStrategy, destroyNodeStrategy, resumeNodeStrategy,
//             suspendNodeStrategy, templateBuilderProvider, templateOptionsProvider, nodeRunning, nodeTerminated, nodeSuspended,
//             initScriptRunnerFactory, initAdminAccess, runScriptOnNodeFactory, persistNodeCredentials, timeouts, userExecutor,
//             imageExtension, securityGroupExtension);
//       this.client = client;
//    }
// 
//    @Override
//    public Set<? extends NodeMetadata> listNodesByIds(Iterable<String> ids) {
//       return ImmutableSet.<NodeMetadata> builder()
//             .addAll(client.listNodesByIds(ids))
//             .build();
//    }
// 
//    @Override
//    public Set<? extends NodeMetadata> createNodesInGroup(String group, int count, Template template) throws RunNodesException {
//       return super.createNodesInGroup(group, count, template);
//    }
// 
//    @Override
//    public Set<? extends NodeMetadata> createNodesInGroup(String group, int count, TemplateOptions templateOptions) throws RunNodesException {
//       return this.createNodesInGroup(group, count, templateBuilder().options(templateOptions).build());
//    }
// 
//    @Override
//    public Set<? extends NodeMetadata> createNodesInGroup(String group, int count) throws RunNodesException {
//       return super.createNodesInGroup(group, count);
//    }
// }
// 
// Path: aliyun-ecs/src/main/java/org/jclouds/aliyun/ecs/compute/ECSComputeServiceContext.java
// @ImplementedBy(ECSComputeServiceContextImpl.class)
// public interface ECSComputeServiceContext extends ComputeServiceContext {
// 
//    @Override
//    ECSComputeService getComputeService();
// }


import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.Context;
import org.jclouds.aliyun.ecs.compute.ECSComputeService;
import org.jclouds.aliyun.ecs.compute.ECSComputeServiceContext;
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.Utils;
import org.jclouds.compute.internal.ComputeServiceContextImpl;
import org.jclouds.location.Provider;
import com.google.common.reflect.TypeToken;
package org.jclouds.aliyun.ecs.compute.internal;




@Singleton
public class ECSComputeServiceContextImpl extends ComputeServiceContextImpl implements ECSComputeServiceContext {

   @Inject
   public ECSComputeServiceContextImpl(
         @Provider Context backend,
         @Provider TypeToken<? extends Context> backendType,
         ComputeService computeService,
         Utils utils) {
      super(backend, backendType, computeService, utils);
   }

   @Override
// Path: aliyun-ecs/src/main/java/org/jclouds/aliyun/ecs/compute/ECSComputeService.java
// @Singleton
// public class ECSComputeService extends BaseComputeService {
// 
//    private final JCloudsNativeComputeServiceAdapter client;
// 
//    @Inject
//    protected ECSComputeService(
//          ComputeServiceContext context,
//          ECSComputeServiceAdapter client,
//          Map<String, Credentials> credentialStore,
//          @Memoized Supplier<Set<? extends Image>> images,
//          Supplier<Set<? extends Hardware>> hardwareProfiles,
//          @Memoized Supplier<Set<? extends Location>> locations,
//          ListNodesStrategy listNodesStrategy,
//          GetImageStrategy getImageStrategy,
//          GetNodeMetadataStrategy getNodeMetadataStrategy,
//          CreateNodesInGroupThenAddToSet runNodesAndAddToSetStrategy,
//          RebootNodeStrategy rebootNodeStrategy,
//          DestroyNodeStrategy destroyNodeStrategy,
//          ResumeNodeStrategy resumeNodeStrategy,
//          SuspendNodeStrategy suspendNodeStrategy,
//          @Named("ECS") Provider<TemplateBuilder> templateBuilderProvider,
//          @Named("ECS") Provider<TemplateOptions> templateOptionsProvider,
//          @Named(TIMEOUT_NODE_RUNNING) Predicate<AtomicReference<NodeMetadata>> nodeRunning,
//          @Named(TIMEOUT_NODE_TERMINATED) Predicate<AtomicReference<NodeMetadata>> nodeTerminated,
//          @Named(TIMEOUT_NODE_SUSPENDED) Predicate<AtomicReference<NodeMetadata>> nodeSuspended,
//          Factory initScriptRunnerFactory,
//          InitAdminAccess initAdminAccess,
//          org.jclouds.compute.callables.RunScriptOnNode.Factory runScriptOnNodeFactory,
//          PersistNodeCredentials persistNodeCredentials,
//          Timeouts timeouts,
//          @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor,
//          Optional<ImageExtension> imageExtension,
//          Optional<SecurityGroupExtension> securityGroupExtension) {
//       super(context, credentialStore, images, hardwareProfiles, locations, listNodesStrategy, getImageStrategy,
//             getNodeMetadataStrategy, runNodesAndAddToSetStrategy, rebootNodeStrategy, destroyNodeStrategy, resumeNodeStrategy,
//             suspendNodeStrategy, templateBuilderProvider, templateOptionsProvider, nodeRunning, nodeTerminated, nodeSuspended,
//             initScriptRunnerFactory, initAdminAccess, runScriptOnNodeFactory, persistNodeCredentials, timeouts, userExecutor,
//             imageExtension, securityGroupExtension);
//       this.client = client;
//    }
// 
//    @Override
//    public Set<? extends NodeMetadata> listNodesByIds(Iterable<String> ids) {
//       return ImmutableSet.<NodeMetadata> builder()
//             .addAll(client.listNodesByIds(ids))
//             .build();
//    }
// 
//    @Override
//    public Set<? extends NodeMetadata> createNodesInGroup(String group, int count, Template template) throws RunNodesException {
//       return super.createNodesInGroup(group, count, template);
//    }
// 
//    @Override
//    public Set<? extends NodeMetadata> createNodesInGroup(String group, int count, TemplateOptions templateOptions) throws RunNodesException {
//       return this.createNodesInGroup(group, count, templateBuilder().options(templateOptions).build());
//    }
// 
//    @Override
//    public Set<? extends NodeMetadata> createNodesInGroup(String group, int count) throws RunNodesException {
//       return super.createNodesInGroup(group, count);
//    }
// }
// 
// Path: aliyun-ecs/src/main/java/org/jclouds/aliyun/ecs/compute/ECSComputeServiceContext.java
// @ImplementedBy(ECSComputeServiceContextImpl.class)
// public interface ECSComputeServiceContext extends ComputeServiceContext {
// 
//    @Override
//    ECSComputeService getComputeService();
// }


// Path: aliyun-ecs/src/main/java/org/jclouds/aliyun/ecs/compute/internal/ECSComputeServiceContextImpl.java
import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.Context;
import org.jclouds.aliyun.ecs.compute.ECSComputeService;
import org.jclouds.aliyun.ecs.compute.ECSComputeServiceContext;
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.Utils;
import org.jclouds.compute.internal.ComputeServiceContextImpl;
import org.jclouds.location.Provider;
import com.google.common.reflect.TypeToken;

package org.jclouds.aliyun.ecs.compute.internal;




@Singleton
public class ECSComputeServiceContextImpl extends ComputeServiceContextImpl implements ECSComputeServiceContext {

   @Inject
   public ECSComputeServiceContextImpl(
         @Provider Context backend,
         @Provider TypeToken<? extends Context> backendType,
         ComputeService computeService,
         Utils utils) {
      super(backend, backendType, computeService, utils);
   }

   @Override
   public ECSComputeService getComputeService() {