001/*
002 *   Licensed to the Apache Software Foundation (ASF) under one
003 *   or more contributor license agreements.  See the NOTICE file
004 *   distributed with this work for additional information
005 *   regarding copyright ownership.  The ASF licenses this file
006 *   to you under the Apache License, Version 2.0 (the
007 *   "License"); you may not use this file except in compliance
008 *   with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 *   Unless required by applicable law or agreed to in writing,
013 *   software distributed under the License is distributed on an
014 *   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 *   KIND, either express or implied.  See the License for the
016 *   specific language governing permissions and limitations
017 *   under the License.
018 *
019 */
020
021package org.apache.directory.api.ldap.model.ldif.anonymizer;
022
023
024import java.util.Map;
025
026
027/**
028 * An anonymizer for the TelephoneNumber attribute. We simply replace the digits by random digits.
029 *
030 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
031 */
032public class TelephoneNumberAnonymizer extends IntegerAnonymizer
033{
034
035    /**
036     * Creates a new instance of TelephoneNumberAnonymizer.
037     */
038    public TelephoneNumberAnonymizer()
039    {
040        super();
041    }
042
043    
044    /**
045     * Creates a new instance of TelephoneNumberAnonymizer.
046     * 
047     * @param latestIntegerMap The map containing the latest integer value for each length 
048     */
049    public TelephoneNumberAnonymizer( Map<Integer, String> latestIntegerMap )
050    {
051        super( latestIntegerMap );
052    }
053
054    /**
055     * Anonymize an attribute using pure random values (either chars of bytes, depending on the Attribute type)
056     *
057    public Attribute anonymize( Map<Value<String>, Value<String>> valueMap, Set<Value<String>> valueSet, Attribute attribute )
058    {
059        Attribute result = new DefaultAttribute( attribute.getAttributeType() );
060
061        for ( Value<?> value : attribute )
062        {
063            Value<String> anonymized =  valueMap.get( value );
064            
065            if ( anonymized != null )
066            {
067                try
068                {
069                    result.add( anonymized.getString() );
070                }
071                catch ( LdapInvalidAttributeValueException e )
072                {
073                    // TODO : handle that
074                }
075            }
076            else
077            {
078                if ( value instanceof StringValue )
079                {
080                    String strValue = value.getNormValue().toString();
081                    int length = strValue.length();
082    
083                    // Same size
084                    char[] newValue = new char[length];
085    
086                    for ( int i = 0; i < length; i++ )
087                    {
088                        char c = ( strValue.charAt( i ) );
089                        
090                        if ( Character.isDigit( c ) )
091                        {
092                            newValue[i] = ( char ) ( random.nextInt( '9' - '0' ) + '0' );
093                        }
094                        else
095                        {
096                            newValue[i] = c;
097                        }
098                    }
099    
100                    try
101                    {
102                        String newValueStr = new String( newValue );
103                        result.add( newValueStr );
104                        
105                        Value<String> anonValue = new StringValue( attribute.getAttributeType(), newValueStr );
106                        valueMap.put( ( Value<String> ) value, anonValue );
107                    }
108                    catch ( LdapInvalidAttributeValueException e )
109                    {
110                        // TODO : handle that
111                    }
112                }
113                else
114                {
115                    byte[] byteValue = value.getBytes();
116    
117                    // Same size
118                    byte[] newValue = new byte[byteValue.length];
119    
120                    for ( int i = 0; i < byteValue.length; i++ )
121                    {
122                        newValue[i] = ( byte ) random.nextInt();
123                    }
124    
125                    try
126                    {
127                        result.add( newValue );
128                    }
129                    catch ( LdapInvalidAttributeValueException e )
130                    {
131                        // TODO : handle that
132                    }
133                }
134            }
135        }
136
137        return result;
138    }*/
139}