@VisibleForTesting File createAvatarFile(Avatar avatar, String flag) throws IOException { final File base = getAvatarBaseDirectory(); createDirectoryIfAbsent(base); return new File(base, avatar.getId() + "_" + flag + avatar.getFileName()); }
public boolean delete(Long avatarId) { return delete(avatarId, true); }
private File getOrGenerateAvatarFile(final Avatar avatar, final ImageSize size) throws IOException { final File file = getAvatarFile(avatar, size.getFilenameFlag()); //if this file doesn't exist and we requested something other than the largest size lets //try to generate a smaller image. if (!file.exists()) { File largeFile = getOrGenerateLargerAvatarFile(avatar, size); //generate a smaller image file for the avatar requested and return that! if (largeFile != null && largeFile.exists()) { return processImage(avatar, FileUtils.openInputStream(largeFile), null, size); } } return file; }
void processAvatarData(final Avatar avatar, final Consumer<InputStream> dataAccessor, final ImageSize imageSize) throws IOException final Option<Avatar> jiraAvatar = transformToJIRAAvatar(avatar); final String path = getAvatarPath(jiraAvatar.get(), imageSize); data = getClasspathStream(path); final File file = getOrGenerateAvatarFile(jiraAvatar.get(), imageSize); data = new FileInputStream(file);
try final Avatar created = create(avatar); final File largeAvatarFile = avatarFile = processImage(created, imageData, croppingSelection, ImageSize.largest()); for (ImageSize size : ImageSize.values()) avatarFile = processImage(created, FileUtils.openInputStream(largeAvatarFile), null, size); handleCreationFailure(avatarFile); throw failedCreate;
File avatarFile = getAvatarFile(avatar, imageSize.getFilenameFlag()); if (avatarFile.exists()) newFile = processImage(avatar, FileUtils.openInputStream(largestFileOnHand), null, sizeToGet);
public boolean delete(Long avatarId, boolean alsoDeleteAvatarFile) { Assertions.notNull("avatarId", avatarId); final Avatar avatar = store.getById(avatarId); if (avatar == null) { return false; } if (alsoDeleteAvatarFile) { final ImageSize[] imageSizes = ImageSize.values(); final File[] avatarFiles = new File[imageSizes.length]; for (int i = 0; i < imageSizes.length; i++) { avatarFiles[i] = getAvatarFile(avatar, imageSizes[i].getFilenameFlag()); deleteFile(avatarFiles[i]); } eventPublisher.publish(new JiraHomeChangeEvent(JiraHomeChangeEvent.Action.FILE_DELETED, JiraHomeChangeEvent.FileType.AVATAR, avatarFiles)); } return store.delete(avatarId); }
@Override @Nonnull public Avatar create(String fileName, String contentType, ApplicationUser owner, InputStream imageData, Selection croppingSelection) throws DataAccessException, IOException { Assertions.notNull("fileName", fileName); Assertions.notNull("avatar", contentType); Assertions.notNull("owner", owner); Assertions.notNull("imageData", imageData); return create(AvatarImpl.createCustomAvatar(fileName, owner), imageData, croppingSelection); }
File getAvatarFile(final Avatar avatar, final String sizeFlag) { final File base = getAvatarBaseDirectory(); return new File(base, avatar.getId() + "_" + sizeFlag + avatar.getFileName()); }
private Option<Avatar> transformToJIRAAvatar(final Avatar avatar) { final Option<Long> avatarId = Option.option(avatar.getId()); if (avatarId.isEmpty()) { //this could happen if for some reason we try to process avatar data via this (old) API for a new //pluggable avatar. In theory we should never hit this method since 'new' avatars should simply be //included via a URL or use the {@code com.atlassian.plugins.avatar.PluginAvatar#getBytes()} method. return Option.none(); } return option(getByIdTagged(avatarId.get())); }
File processImage(final Avatar created, final InputStream imageData, final Selection croppingSelection, final ImageSize size) throws IOException { RenderedImage image = scaler.getSelectedImageData(new Thumber().getImage(imageData), croppingSelection, size.getPixels()); File file = createAvatarFile(created, size.getFilenameFlag()); avatarTagger.saveTaggedAvatar(image, AVATAR_IMAGE_FORMAT_FULL.getName(), file); eventPublisher.publish(new JiraHomeChangeEvent(JiraHomeChangeEvent.Action.FILE_ADD, JiraHomeChangeEvent.FileType.AVATAR, file)); return file; }
@Override @Nonnull public Avatar create(String fileName, String contentType, Project owner, InputStream imageData, Selection croppingSelection) throws DataAccessException, IOException { Assertions.notNull("fileName", fileName); Assertions.notNull("avatar", contentType); Assertions.notNull("owner", owner); Assertions.notNull("imageData", imageData); return create(AvatarImpl.createCustomAvatar(fileName, contentType, owner), imageData, croppingSelection); }