001/*
002 *  Copyright (c) 2022-2025, Mybatis-Flex (fuhai999@gmail.com).
003 *  <p>
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 *  <p>
008 *  http://www.apache.org/licenses/LICENSE-2.0
009 *  <p>
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 */
016package com.mybatisflex.core.mask;
017
018import org.apache.ibatis.type.JdbcType;
019import org.apache.ibatis.type.TypeHandler;
020
021import java.sql.CallableStatement;
022import java.sql.PreparedStatement;
023import java.sql.ResultSet;
024import java.sql.SQLException;
025
026public class CompositeMaskTypeHandler implements TypeHandler<Object> {
027
028    private final String maskType;
029    private final TypeHandler<Object> typeHandler;
030
031    public CompositeMaskTypeHandler(String maskType, TypeHandler<Object> typeHandler) {
032        this.maskType = maskType;
033        this.typeHandler = typeHandler;
034    }
035
036    @Override
037    public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
038        typeHandler.setParameter(ps, i, parameter, jdbcType);
039    }
040
041    @Override
042    public Object getResult(ResultSet rs, String columnName) throws SQLException {
043        return MaskManager.mask(maskType, typeHandler.getResult(rs, columnName));
044    }
045
046    @Override
047    public Object getResult(ResultSet rs, int columnIndex) throws SQLException {
048        return MaskManager.mask(maskType, typeHandler.getResult(rs, columnIndex));
049    }
050
051    @Override
052    public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
053        return MaskManager.mask(maskType, typeHandler.getResult(cs, columnIndex));
054    }
055}