package org.jboss.tools.seam.ui.pages.editor.figures.xpl; /** based on code in JavaElementLabel */ public class CompressNameUtil { /* * Package name compression */ private static String fgNamePattern= ""; //$NON-NLS-1$ private static String fgNamePrefix; private static String fgNamePostfix; private static int fgNameChars; private static int fgNameLength= -1; public static String getCompressedName(String className) { StringBuffer result = new StringBuffer(); refreshPackageNamePattern(); if (fgNameLength == 0) { result.append(className); return result.toString(); } String name= className; int start= 0; int dot= name.indexOf('.', start); while (dot > 0) { if (dot - start > fgNameLength-1) { result.append(fgNamePrefix); if (fgNameChars > 0) result.append(name.substring(start, Math.min(start+ fgNameChars, dot))); result.append(fgNamePostfix); } else result.append(name.substring(start, dot + 1)); start= dot + 1; dot= name.indexOf('.', start); } result.append(name.substring(start)); return result.toString(); } private static void refreshPackageNamePattern() { String pattern= "1.";//getPkgNamePatternForPackagesView(); TODO: put in a preference somewhere final String EMPTY_STRING= ""; //$NON-NLS-1$ if (pattern.equals(fgNamePattern)) return; else if (pattern.length() == 0) { fgNamePattern= EMPTY_STRING; fgNameLength= -1; return; } fgNamePattern= pattern; int i= 0; fgNameChars= 0; fgNamePrefix= EMPTY_STRING; fgNamePostfix= EMPTY_STRING; while (i < pattern.length()) { char ch= pattern.charAt(i); if (Character.isDigit(ch)) { fgNameChars= ch-48; if (i > 0) fgNamePrefix= pattern.substring(0, i); if (i >= 0) fgNamePostfix= pattern.substring(i+1); fgNameLength= fgNamePrefix.length() + fgNameChars + fgNamePostfix.length(); return; } i++; } fgNamePrefix= pattern; fgNameLength= pattern.length(); } }