001package net.sf.logdistiller.util; 002 003/* 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017import java.util.Arrays; 018import java.util.Iterator; 019import java.util.List; 020import java.util.Locale; 021import java.util.Set; 022 023public class FormatUtil 024{ 025 private FormatUtil() 026 { 027 } 028 029 public static String formatPeriod( final long periodMs ) 030 { 031 long base = ( periodMs < 60000 ) ? periodMs : ( periodMs + 500 ); 032 int milliseconds = (int) ( base % 1000 ); 033 long remainder = base / 1000; 034 int seconds = (int) ( remainder % 60 ); 035 remainder /= 60; 036 int minutes = (int) ( remainder % 60 ); 037 remainder /= 60; 038 int hours = (int) ( remainder % 24 ); 039 remainder /= 24; 040 int days = (int) remainder; 041 StringBuffer buffer = new StringBuffer(); 042 int fieldCount = 0; 043 if ( days > 0 ) 044 { 045 fieldCount++; 046 buffer.append( days + " d" ); 047 } 048 if ( ( fieldCount > 0 ) || ( hours > 0 ) ) 049 { 050 buffer.append( ( ( fieldCount > 0 ) ? " " : "" ) + hours + " h" ); 051 fieldCount++; 052 } 053 if ( ( fieldCount > 0 ) || ( minutes > 0 ) ) 054 { 055 buffer.append( ( ( fieldCount > 0 ) ? " " : "" ) + minutes + " m" ); 056 fieldCount++; 057 } 058 if ( ( fieldCount > 0 ) || ( seconds > 0 ) ) 059 { 060 buffer.append( ( ( fieldCount > 0 ) ? " " : "" ) + seconds + " s" ); 061 fieldCount++; 062 } 063 if ( fieldCount < 2 ) 064 { 065 buffer.append( ( ( fieldCount > 0 ) ? " " : "" ) + milliseconds + " ms" ); 066 } 067 return buffer.toString(); 068 } 069 070 public static String formatSize( final long size ) 071 { 072 if ( size < 1024 ) 073 { 074 return String.valueOf( size ) + " b"; 075 } 076 long sizeKb = size / 1024; 077 if ( sizeKb < 1024 ) 078 { 079 return String.valueOf( sizeKb ) + '.' + String.valueOf( ( size % 1024 ) * 10 / 1024 ) + " kb"; 080 } 081 long sizeMb = sizeKb / 1024; 082 return String.valueOf( sizeMb ) + '.' + String.valueOf( ( sizeKb % 1024 ) * 10 / 1024 ) + " Mb"; 083 } 084 085 /** 086 * Formats a fraction as a "xx.x%" string. 087 * 088 * @param part int the portion of the total 089 * @param total int the total 090 * @return String the value of (fraction / total) as "xx.x%" 091 */ 092 public static String formatFraction( long part, long total ) 093 { 094 int fraction = Math.round( (float) ( part * 1000 ) / total ); 095 return String.valueOf( fraction / 10 ) + '.' + ( fraction % 10 ) + '%'; 096 } 097 098 public static String join( String separator, Iterator<? extends Object> iter ) 099 { 100 StringBuffer buff = new StringBuffer(); 101 while ( iter.hasNext() ) 102 { 103 if ( buff.length() > 0 ) 104 { 105 buff.append( separator ); 106 } 107 buff.append( iter.next() ); 108 } 109 return buff.toString(); 110 } 111 112 public static String join( String separator, Object[] values ) 113 { 114 return join( separator, Arrays.asList( values ).iterator() ); 115 } 116 117 public static String join( String separator, List<? extends Object> list ) 118 { 119 return join( separator, list.iterator() ); 120 } 121 122 public static String join( String separator, Set<? extends Object> set ) 123 { 124 return join( separator, set.iterator() ); 125 } 126 127 public static Locale parseLocale( String locale ) 128 { 129 int len = locale.length(); 130 if ( ( len != 2 ) && ( len != 5 ) && ( len != 8 ) ) 131 { 132 throw new RuntimeException( "bad locale format: '" + locale + "', sould be xx?yy?zz" ); 133 } 134 String lang = locale.substring( 0, 2 ); 135 if ( len == 2 ) 136 { 137 return new Locale( lang ); 138 } 139 String country = locale.substring( 3, 5 ); 140 if ( len == 5 ) 141 { 142 return new Locale( lang, country ); 143 } 144 String variant = locale.substring( 6 ); 145 return new Locale( lang, country, variant ); 146 } 147}