mirror of
https://github.com/yacy/yacy_search_server.git
synced 2024-09-19 00:01:41 +02:00
2d36a7eaf5
- no document search this time - adjusted banner and network to not show 'WORDS' but DHT Chunks. This is to avoid confusion for robinson peers which do not create Word Entries
179 lines
6.3 KiB
Java
179 lines
6.3 KiB
Java
package net.yacy.peers.graphics;
|
|
|
|
import java.awt.image.BufferedImage;
|
|
import java.text.DecimalFormat;
|
|
import java.text.DecimalFormatSymbols;
|
|
|
|
import net.yacy.visualization.PrintTool;
|
|
import net.yacy.visualization.RasterPlotter;
|
|
|
|
/**
|
|
* Creates banner which displays dtat about peer and network.
|
|
*/
|
|
public final class Banner {
|
|
|
|
/** Private constructor to avoid instantiation of utility class. */
|
|
private Banner() { }
|
|
|
|
/** Always use dot as decimal separator since
|
|
* banner text is always in English.
|
|
*/
|
|
private static final DecimalFormatSymbols DFS =
|
|
new DecimalFormatSymbols();
|
|
static {
|
|
DFS.setDecimalSeparator('.');
|
|
}
|
|
|
|
private static RasterPlotter bannerPicture = null;
|
|
private static BufferedImage logo = null;
|
|
private static long bannerPictureDate = 0;
|
|
|
|
/**
|
|
* Creates new banner image if max age has been reached,
|
|
* else returns cached version.
|
|
* @param data data to display
|
|
* @param maxAge age in ms since 01.01.1970
|
|
* @return banner image
|
|
*/
|
|
public static RasterPlotter getBannerPicture(
|
|
final BannerData data, final long maxAge) {
|
|
if ((bannerPicture == null)
|
|
|| ((System.currentTimeMillis() - bannerPictureDate) > maxAge)) {
|
|
drawBannerPicture(data, logo);
|
|
}
|
|
return bannerPicture;
|
|
}
|
|
|
|
/**
|
|
* Creates new banner image if max age has been reached,
|
|
* else returns cached version.
|
|
* @param data data to display
|
|
* @param maxAge age in ms since 01.01.1970
|
|
* @param newLogo logo to display
|
|
* @return banner image
|
|
*/
|
|
public static RasterPlotter getBannerPicture(
|
|
final BannerData data,
|
|
final long maxAge,
|
|
final BufferedImage newLogo) {
|
|
if ((bannerPicture == null)
|
|
|| ((System.currentTimeMillis() - bannerPictureDate) > maxAge)) {
|
|
drawBannerPicture(data, newLogo);
|
|
}
|
|
return bannerPicture;
|
|
}
|
|
|
|
private static void drawBannerPicture(
|
|
final BannerData data, final BufferedImage newLogo) {
|
|
|
|
final int exprlength = 16;
|
|
logo = newLogo;
|
|
bannerPicture =
|
|
new RasterPlotter(
|
|
data.getWidth(),
|
|
data.getHeight(),
|
|
RasterPlotter.DrawMode.MODE_REPLACE,
|
|
data.getBgcolor());
|
|
|
|
final int height = data.getHeight();
|
|
final int width = data.getWidth();
|
|
|
|
// draw description
|
|
bannerPicture.setColor(Long.parseLong(data.getTextcolor(), 16));
|
|
PrintTool.print(bannerPicture, 100, 12, 0, "PEER NAME:" + addTrailingBlanks(data.getName(), exprlength), -1);
|
|
PrintTool.print(bannerPicture, 100, 22, 0, "DOCUMENTS:" + addBlanksAndDots(data.getLinks(), exprlength), -1);
|
|
PrintTool.print(bannerPicture, 100, 32, 0, "DHT WORDS:" + addBlanksAndDots(data.getWords(), exprlength), -1);
|
|
PrintTool.print(bannerPicture, 100, 42, 0, "TYPE: " + addTrailingBlanks(data.getType(), exprlength), -1);
|
|
PrintTool.print(bannerPicture, 100, 52, 0, "SPEED: " + addTrailingBlanks(data.getPpm() + " PAGES/MINUTE", exprlength), -1);
|
|
|
|
PrintTool.print(bannerPicture, 290, 12, 0, "NETWORK: " + addTrailingBlanks(data.getNetwork() + " [" + data.getPeers() + "]", exprlength), -1);
|
|
PrintTool.print(bannerPicture, 290, 22, 0, "LINKS: " + addBlanksAndDots(data.getNlinks(), exprlength), -1);
|
|
PrintTool.print(bannerPicture, 290, 32, 0, "WORDS: " + addBlanksAndDots(data.getNwords(), exprlength), -1);
|
|
PrintTool.print(bannerPicture, 290, 42, 0, "QUERIES: " + addTrailingBlanks(formatQpm(data.getNqph()) + " QUERIES/HOUR", exprlength), -1);
|
|
PrintTool.print(bannerPicture, 290, 52, 0, "SPEED: " + addTrailingBlanks(data.getNppm() + " PAGES/MINUTE", exprlength), -1);
|
|
|
|
if (logo != null) {
|
|
final int x = (100 / 2 - logo.getWidth() / 2);
|
|
final int y = (height / 2 - logo.getHeight() / 2);
|
|
bannerPicture.insertBitmap(logo, x, y, 0, 0, RasterPlotter.FilterMode.FILTER_ANTIALIASING);
|
|
}
|
|
|
|
final String bordercolor = data.getBordercolor();
|
|
if (bordercolor != null && !bordercolor.isEmpty()) {
|
|
bannerPicture.setColor(Long.parseLong(bordercolor, 16));
|
|
bannerPicture.line(0, 0, 0, height - 1, 100);
|
|
bannerPicture.line(0, 0, width - 1, 0, 100);
|
|
bannerPicture.line(width - 1, 0, width - 1, height - 1, 100);
|
|
bannerPicture.line(0, height - 1, width - 1, height - 1, 100);
|
|
}
|
|
|
|
// set timestamp
|
|
bannerPictureDate = System.currentTimeMillis();
|
|
}
|
|
|
|
private static String addBlanksAndDots(final long input, final int length) {
|
|
return addBlanksAndDots(Long.toString(input), length);
|
|
}
|
|
|
|
private static String addBlanksAndDots(String input, final int length) {
|
|
input = addDots(input);
|
|
input = addTrailingBlanks(input,length);
|
|
return input;
|
|
}
|
|
|
|
private static String addDots(String word) {
|
|
String tmp = "";
|
|
int len = word.length();
|
|
if (len > 3) {
|
|
while (len > 3) {
|
|
if (tmp.equals("")) {
|
|
tmp = word.substring(len - 3,len);
|
|
} else {
|
|
tmp = word.substring(len - 3,len) + "." + tmp;
|
|
}
|
|
word = word.substring(0,len - 3);
|
|
len = word.length();
|
|
}
|
|
word = word + "." + tmp;
|
|
}
|
|
return word;
|
|
}
|
|
|
|
private static String addTrailingBlanks(String word, int length) {
|
|
if (length > word.length()) {
|
|
String blanks = "";
|
|
length = length - word.length();
|
|
int i = 0;
|
|
while (i++ < length) {
|
|
blanks += " ";
|
|
}
|
|
word = blanks + word;
|
|
}
|
|
return word;
|
|
}
|
|
|
|
private static String formatQpm(final double qpm) {
|
|
final String ret;
|
|
|
|
if (qpm < 10) {
|
|
ret = new DecimalFormat("0.00", DFS).format(qpm);
|
|
} else {
|
|
ret = Long.toString(Math.round(qpm));
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/**
|
|
* Tells if a logo has been set.
|
|
* @return true if logo has been set, else false
|
|
*/
|
|
public static boolean logoIsLoaded() {
|
|
if (logo == null) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
}
|