1
package org.hisp.dhis.system.util;
4
* Copyright (c) 2004-2007, University of Oslo
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions are met:
9
* * Redistributions of source code must retain the above copyright notice, this
10
* list of conditions and the following disclaimer.
11
* * Redistributions in binary form must reproduce the above copyright notice,
12
* this list of conditions and the following disclaimer in the documentation
13
* and/or other materials provided with the distribution.
14
* * Neither the name of the HISP project nor the names of its contributors may
15
* be used to endorse or promote products derived from this software without
16
* specific prior written permission.
18
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
import java.util.ArrayList;
31
import java.util.HashMap;
32
import java.util.List;
35
import org.apache.commons.logging.Log;
36
import org.apache.commons.logging.LogFactory;
39
* @author Lars Helge Overland
42
public class DebugUtils
44
private static final Log log = LogFactory.getLog( DebugUtils.class );
46
public static final String SEPARATOR = "-";
48
private static ThreadLocal<Map<String, List<String>>> duplicateMapPeg = new ThreadLocal<Map<String,List<String>>>();
50
public static String logDuplicates( String key, Integer... values )
52
StringBuffer buffer = new StringBuffer();
54
for ( Integer value : values )
56
buffer.append( value + SEPARATOR );
59
String value = buffer.toString();
61
value = value.substring( 0, value.length() - 1 );
63
return log( key, value );
66
public static String logDuplicates( String key, String... values )
68
StringBuffer buffer = new StringBuffer();
70
for ( String value : values )
72
buffer.append( value + SEPARATOR );
75
String value = buffer.toString();
77
value = value.substring( 0, value.length() - 1 );
79
return log( key, value );
82
private static String log( String key, String value )
84
Map<String, List<String>> duplicateMap = duplicateMapPeg.get();
86
if ( duplicateMap == null )
88
duplicateMap = new HashMap<String, List<String>>();
91
List<String> list = duplicateMap.get( key );
95
list = new ArrayList<String>();
98
String duplicate = null;
100
if ( list.contains( value ) )
102
log.warn( "Duplicate found: '" + value + "' for key: '" + key + "'" );
109
duplicateMap.put( key, list );
111
duplicateMapPeg.set( duplicateMap );
116
public static boolean resetDuplicates( String key )
118
Map<String, List<String>> duplicateMap = duplicateMapPeg.get();
120
if ( duplicateMap != null )
122
duplicateMap.remove( key );
124
duplicateMapPeg.set( duplicateMap );
126
log.info( "Reset duplicate for key: '" + key + "'" );