View Javadoc

1   package com.atlassian.marketplace.client.impl;
2   
3   import java.io.File;
4   import java.io.FileInputStream;
5   import java.io.IOException;
6   import java.io.InputStream;
7   import java.net.URI;
8   
9   import com.atlassian.marketplace.client.MpacException;
10  import com.atlassian.marketplace.client.api.ArtifactId;
11  import com.atlassian.marketplace.client.api.Assets;
12  import com.atlassian.marketplace.client.api.ImageId;
13  import com.atlassian.marketplace.client.api.ImagePurpose;
14  import com.atlassian.marketplace.client.api.UriTemplate;
15  import com.atlassian.marketplace.client.model.Links;
16  import com.atlassian.marketplace.client.util.UriBuilder;
17  
18  import com.google.common.collect.ImmutableMap;
19  
20  final class AssetsImpl extends ApiImplBase implements Assets
21  {
22      AssetsImpl(ApiHelper apiHelper, InternalModel.MinimalLinks root) throws MpacException
23      {
24          super(apiHelper, root, "assets");
25      }
26  
27      @Override
28      public ArtifactId uploadAddonArtifact(File artifactFile) throws MpacException
29      {
30          URI uri = apiHelper.requireLinkUri(getLinksOnly(getApiRoot()), "artifact", Assets.class);
31          return ArtifactId.fromUri(uploadAssetFromFile(uri, artifactFile));
32      }
33  
34      @Override
35      public ImageId uploadImage(File imageFile, ImagePurpose imageType) throws MpacException
36      {
37          UriTemplate ut = ApiHelper.requireLinkUriTemplate(getLinksOnly(getApiRoot()), "imageByType", Assets.class);
38          URI uri = apiHelper.resolveLink(ut.resolve(ImmutableMap.of("imageType", imageType.getKey())));
39          return ImageId.fromUri(uploadAssetFromFile(uri, imageFile));
40      }
41      
42      private URI uploadAssetFromFile(URI collectionUri, File file) throws MpacException
43      {
44          try
45          {
46              FileInputStream fis = new FileInputStream(file);
47              try
48              {
49                  return uploadAssetFromStream(collectionUri, fis, file.length(), file.getName());
50              }
51              finally
52              {
53                  fis.close();
54              }
55          }
56          catch (IOException e)
57          {
58              throw new MpacException(e);
59          }
60      }
61      
62      private URI uploadAssetFromStream(URI collectionUri, InputStream stream, long length, String logicalFileName) throws MpacException
63      {
64          URI uri = UriBuilder.fromUri(collectionUri).queryParam("file", logicalFileName).build();
65          InternalModel.MinimalLinks result =
66              apiHelper.postContent(uri, stream, length, "application/binary", InternalModel.MinimalLinks.class);
67          return ApiHelper.requireLink(result.getLinks(), "self", Links.class).getUri();
68      }
69  }