// Path: api/src/main/java/com/github/chrisprice/phonegapbuild/api/data/Platform.java
// public enum Platform {
// 
//   ANDROID("android") {
//     public <T> T get(HasAllPlatforms<T> hasAllPlatforms) {
//       return hasAllPlatforms.getAndroid();
//     }
//   },
// 
//   BLACKBERRY("blackberry") {
//     public <T> T get(HasAllPlatforms<T> hasAllPlatforms) {
//       return hasAllPlatforms.getBlackberry();
//     }
//   },
//   IOS("ios") {
//     public <T> T get(HasAllPlatforms<T> hasAllPlatforms) {
//       return hasAllPlatforms.getIos();
//     }
//   },
//   SYMBIAN("symbian") {
//     public <T> T get(HasAllPlatforms<T> hasAllPlatforms) {
//       return hasAllPlatforms.getSymbian();
//     }
//   },
//   WEBOS("webos") {
//     public <T> T get(HasAllPlatforms<T> hasAllPlatforms) {
//       return hasAllPlatforms.getWebos();
//     }
//   },
//   WINPHONE("winphone") {
//     public <T> T get(HasAllPlatforms<T> hasAllPlatforms) {
//       return hasAllPlatforms.getWinphone();
//     }
//   };
// 
//   private static final Map<String, Platform> LOOKUP = new HashMap<String, Platform>();
// 
//   static {
//     for (Platform s : EnumSet.allOf(Platform.class))
//       LOOKUP.put(s.value, s);
//   }
// 
//   private final String value;
// 
//   private Platform(String value) {
//     this.value = value;
//   }
// 
//   public abstract <T> T get(HasAllPlatforms<T> hasAllPlatforms);
//   
//   public static Platform get(String value) {
//     return LOOKUP.get(value);
//   }
// 
//   public static Platform[] get(String... values) {
//     Platform[] platforms = new Platform[values.length];
//     for (int i = 0; i < values.length; i++) {
//       String value = values[i];
//       Platform platform = Platform.get(value);
//       if (platform == null) {
//         throw new RuntimeException("Unknown platform specified " + value);
//       }
//       platforms[i] = platform;
//     }
//     return platforms;
//   }
// 
//   public String getValue() {
//     return value;
//   }
// }
// 
// Path: api/src/main/java/com/github/chrisprice/phonegapbuild/api/data/ResourcePath.java
// public class ResourcePath<T extends AbstractResource> {
// 
//   private final String path;
// 
//   @JsonCreator
//   public ResourcePath(String path) {
//     this.path = path;
//   }
// 
//   public String getPath() {
//     return path;
//   }
// 
//   @Override
//   public String toString() {
//     return path;
//   }
// 
//   @Override
//   public int hashCode() {
//     final int prime = 31;
//     int result = 1;
//     result = prime * result + ((path == null) ? 0 : path.hashCode());
//     return result;
//   }
// 
//   @SuppressWarnings("rawtypes")
//   @Override
//   public boolean equals(Object obj) {
//     if (this == obj)
//       return true;
//     if (obj == null)
//       return false;
//     if (getClass() != obj.getClass())
//       return false;
//     ResourcePath other = (ResourcePath) obj;
//     if (path == null) {
//       if (other.path != null)
//         return false;
//     } else if (!path.equals(other.path))
//       return false;
//     return true;
//   }
// 
// }
// 
// Path: api/src/main/java/com/github/chrisprice/phonegapbuild/api/data/resources/App.java
// public class App extends AbstractResource {
// 
// }
// 
// Path: api/src/main/java/com/github/chrisprice/phonegapbuild/api/managers/AppsManager.java
// public interface AppsManager {
// 
//   AppsResponse getApps(WebResource resource, ResourcePath<Apps> appsResponsePath);
// 
//   AppResponse postNewApp(WebResource resource, ResourcePath<Apps> appsResponsePath,
//       AppDetailsRequest appsRequest, File file);
// 
//   AppResponse getApp(WebResource resource, ResourcePath<App> appResourcePath);
// 
//   AppResponse putApp(WebResource resource, ResourcePath<App> appResourcePath, AppDetailsRequest appsRequest,
//       File file);
// 
//   SuccessResponse deleteApp(WebResource resource, ResourcePath<App> appResourcePath);
// 
//   File downloadApp(WebResource resource, ResourcePath<App> appResourcePath, Platform platform,
//       File targetDirectory);
// 
//   AppResponse updateAppDetails(WebResource resource, ResourcePath<App> keyResourcePath,
// 	      AppDetailsRequest appDetailsRequest);
// 
// }


import java.io.File;
import org.apache.commons.io.FilenameUtils;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectHelper;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import com.github.chrisprice.phonegapbuild.api.data.Platform;
import com.github.chrisprice.phonegapbuild.api.data.ResourcePath;
import com.github.chrisprice.phonegapbuild.api.data.resources.App;
import com.github.chrisprice.phonegapbuild.api.managers.AppsManager;
import com.sun.jersey.api.client.WebResource;
package com.github.chrisprice.phonegapbuild.plugin.utils;




@Component(role = AppDownloader.class)
public class AppDownloaderImpl implements AppDownloader {

  @Requirement
  private MavenProjectHelper mavenProjectHelper;
  @Requirement
  private AppsManager appsManager;

  private MavenProject project;
  private File workingDirectory;

  @Override
// Path: api/src/main/java/com/github/chrisprice/phonegapbuild/api/data/Platform.java
// public enum Platform {
// 
//   ANDROID("android") {
//     public <T> T get(HasAllPlatforms<T> hasAllPlatforms) {
//       return hasAllPlatforms.getAndroid();
//     }
//   },
// 
//   BLACKBERRY("blackberry") {
//     public <T> T get(HasAllPlatforms<T> hasAllPlatforms) {
//       return hasAllPlatforms.getBlackberry();
//     }
//   },
//   IOS("ios") {
//     public <T> T get(HasAllPlatforms<T> hasAllPlatforms) {
//       return hasAllPlatforms.getIos();
//     }
//   },
//   SYMBIAN("symbian") {
//     public <T> T get(HasAllPlatforms<T> hasAllPlatforms) {
//       return hasAllPlatforms.getSymbian();
//     }
//   },
//   WEBOS("webos") {
//     public <T> T get(HasAllPlatforms<T> hasAllPlatforms) {
//       return hasAllPlatforms.getWebos();
//     }
//   },
//   WINPHONE("winphone") {
//     public <T> T get(HasAllPlatforms<T> hasAllPlatforms) {
//       return hasAllPlatforms.getWinphone();
//     }
//   };
// 
//   private static final Map<String, Platform> LOOKUP = new HashMap<String, Platform>();
// 
//   static {
//     for (Platform s : EnumSet.allOf(Platform.class))
//       LOOKUP.put(s.value, s);
//   }
// 
//   private final String value;
// 
//   private Platform(String value) {
//     this.value = value;
//   }
// 
//   public abstract <T> T get(HasAllPlatforms<T> hasAllPlatforms);
//   
//   public static Platform get(String value) {
//     return LOOKUP.get(value);
//   }
// 
//   public static Platform[] get(String... values) {
//     Platform[] platforms = new Platform[values.length];
//     for (int i = 0; i < values.length; i++) {
//       String value = values[i];
//       Platform platform = Platform.get(value);
//       if (platform == null) {
//         throw new RuntimeException("Unknown platform specified " + value);
//       }
//       platforms[i] = platform;
//     }
//     return platforms;
//   }
// 
//   public String getValue() {
//     return value;
//   }
// }
// 
// Path: api/src/main/java/com/github/chrisprice/phonegapbuild/api/data/ResourcePath.java
// public class ResourcePath<T extends AbstractResource> {
// 
//   private final String path;
// 
//   @JsonCreator
//   public ResourcePath(String path) {
//     this.path = path;
//   }
// 
//   public String getPath() {
//     return path;
//   }
// 
//   @Override
//   public String toString() {
//     return path;
//   }
// 
//   @Override
//   public int hashCode() {
//     final int prime = 31;
//     int result = 1;
//     result = prime * result + ((path == null) ? 0 : path.hashCode());
//     return result;
//   }
// 
//   @SuppressWarnings("rawtypes")
//   @Override
//   public boolean equals(Object obj) {
//     if (this == obj)
//       return true;
//     if (obj == null)
//       return false;
//     if (getClass() != obj.getClass())
//       return false;
//     ResourcePath other = (ResourcePath) obj;
//     if (path == null) {
//       if (other.path != null)
//         return false;
//     } else if (!path.equals(other.path))
//       return false;
//     return true;
//   }
// 
// }
// 
// Path: api/src/main/java/com/github/chrisprice/phonegapbuild/api/data/resources/App.java
// public class App extends AbstractResource {
// 
// }
// 
// Path: api/src/main/java/com/github/chrisprice/phonegapbuild/api/managers/AppsManager.java
// public interface AppsManager {
// 
//   AppsResponse getApps(WebResource resource, ResourcePath<Apps> appsResponsePath);
// 
//   AppResponse postNewApp(WebResource resource, ResourcePath<Apps> appsResponsePath,
//       AppDetailsRequest appsRequest, File file);
// 
//   AppResponse getApp(WebResource resource, ResourcePath<App> appResourcePath);
// 
//   AppResponse putApp(WebResource resource, ResourcePath<App> appResourcePath, AppDetailsRequest appsRequest,
//       File file);
// 
//   SuccessResponse deleteApp(WebResource resource, ResourcePath<App> appResourcePath);
// 
//   File downloadApp(WebResource resource, ResourcePath<App> appResourcePath, Platform platform,
//       File targetDirectory);
// 
//   AppResponse updateAppDetails(WebResource resource, ResourcePath<App> keyResourcePath,
// 	      AppDetailsRequest appDetailsRequest);
// 
// }


// Path: plugin/src/main/java/com/github/chrisprice/phonegapbuild/plugin/utils/AppDownloaderImpl.java
import java.io.File;
import org.apache.commons.io.FilenameUtils;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectHelper;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import com.github.chrisprice.phonegapbuild.api.data.Platform;
import com.github.chrisprice.phonegapbuild.api.data.ResourcePath;
import com.github.chrisprice.phonegapbuild.api.data.resources.App;
import com.github.chrisprice.phonegapbuild.api.managers.AppsManager;
import com.sun.jersey.api.client.WebResource;

package com.github.chrisprice.phonegapbuild.plugin.utils;




@Component(role = AppDownloader.class)
public class AppDownloaderImpl implements AppDownloader {

  @Requirement
  private MavenProjectHelper mavenProjectHelper;
  @Requirement
  private AppsManager appsManager;

  private MavenProject project;
  private File workingDirectory;

  @Override
  public void downloadArtifacts(WebResource webResource, ResourcePath<App> appResourcePath,