package fr.openwide.core.wicket.more.rendering; import java.util.Locale; /** * A renderer that shortens Java names, such as package names, class names or fully-qualified attribute names, * by replacing the least-significant (e.g. leftmost) components by their first letter. */ public class ShortenedJavaNameRenderer extends Renderer<String> { private static final long serialVersionUID = 1L; private static final String JAVA_SEPARATOR_REGEXP = "\\."; private static final String JAVA_SEPARATOR = "."; private static final ShortenedJavaNameRenderer INSTANCE = new ShortenedJavaNameRenderer(5); public static Renderer<String> get() { return INSTANCE; } private final int maximumFullComponents; /** * @param maximumFullComponents Maximum number of components in the package name that will be * displayed in their full form. */ public ShortenedJavaNameRenderer(int maximumFullComponents) { this.maximumFullComponents = maximumFullComponents; } @Override public String render(String value, Locale locale) { String[] packages = value.split(JAVA_SEPARATOR_REGEXP); StringBuilder displayStringBuilder = new StringBuilder(); int packagesCount = packages.length; for (int cpt=0; cpt < packagesCount; cpt++) { if (cpt > 0) { displayStringBuilder.append(JAVA_SEPARATOR); } String p = packages[cpt]; if (cpt < packagesCount - maximumFullComponents) { displayStringBuilder.append(p, 0, 1); } else { displayStringBuilder.append(p); } } return displayStringBuilder.toString(); } }