package wordcloud;
import org.apache.log4j.Logger;
import wordcloud.bg.Background;
import wordcloud.font.CloudFont;
import wordcloud.font.scale.FontScalar;
import wordcloud.image.AngleGenerator;
import wordcloud.palette.ColorPalette;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by kenny on 7/5/14.
*/
public class LayeredWordCloud {
private static final Logger LOGGER = Logger.getLogger(LayeredWordCloud.class);
private final int width;
private final int height;
private final List<WordCloud> wordClouds = new ArrayList<>();
private Color backgroundColor = Color.BLACK;
public LayeredWordCloud(int layers, int width, int height, CollisionMode collisionMode) {
this.width = width;
this.height = height;
for(int i = 0; i < layers; i++) {
final WordCloud wordCloud = new WordCloud(width, height, collisionMode);
wordCloud.setBackgroundColor(null);
wordClouds.add(wordCloud);
}
}
public void build(int layer, List<WordFrequency> wordFrequencies) {
wordClouds.get(layer).build(wordFrequencies);
}
public void setPadding(int layer, int padding) {
this.wordClouds.get(layer).setPadding(padding);
}
public void setColorPalette(int layer, ColorPalette colorPalette) {
this.wordClouds.get(layer).setColorPalette(colorPalette);
}
public void setBackground(int layer, Background background) {
this.wordClouds.get(layer).setBackground(background);
}
public void setFontScalar(int layer, FontScalar fontScalar) {
this.wordClouds.get(layer).setFontScalar(fontScalar);
}
public void setFontOptions(int layer, CloudFont cloudFont) {
this.wordClouds.get(layer).setCloudFont(cloudFont);
}
public void setBackgroundColor(Color backgroundColor) {
this.backgroundColor = backgroundColor;
}
public BufferedImage getBufferedImage() {
final BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
final Graphics graphics = bufferedImage.getGraphics();
graphics.setColor(backgroundColor);
graphics.fillRect(0, 0, width, height);
for(WordCloud wordCloud : wordClouds) {
graphics.drawImage(wordCloud.getBufferedImage(), 0, 0, null);
}
return bufferedImage;
}
public void writeToFile(final String outputFileName) {
String extension = "";
int i = outputFileName.lastIndexOf('.');
if (i > 0) {
extension = outputFileName.substring(i + 1);
}
try {
LOGGER.info("Saving Layered WordCloud to " + outputFileName);
ImageIO.write(getBufferedImage(), extension, new File(outputFileName));
} catch (IOException e) {
LOGGER.error(e.getMessage(), e);
}
}
}