/* * Copyright (c) 2019-2020. Developed by Hedgecode. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.hedgecode.chess.scanner.regex; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import org.hedgecode.chess.scanner.ChessHogScannerConstants; /** * RegexBuilder * * @author Dmitry Samoshin aka gotty */ public class RegexBuilder { public static String build(Type type, String target, RegexParams params) { return type.format( target, params ); } public enum Type { TOURNAMENT { @Override public String format(String target, RegexParams params) { if (params.getPageId() != null) { target = target.replace( RegexParams.PAGE_ID, params.getPageId() ); } return target.replace( RegexParams.TOURNAMENT_ID, params.getTournamentId() ); } }, GAME { @Override public String format(String target, RegexParams params) { return target.replace( RegexParams.GAME_ID, params.getGameId() ); } }, QUERY { @Override public String format(String target, RegexParams params) { return target.replace( RegexParams.QUERY, params.isUrlEncode() ? urlEncode(params.getQuery()) : params.getQuery() ); } }; public abstract String format(String target, RegexParams params); private static String urlEncode(String query) throws RuntimeException { String encodeQuery; try { encodeQuery = URLEncoder.encode( query, ChessHogScannerConstants.CHARSET.name() ); } catch (UnsupportedEncodingException cause) { throw new RuntimeException( String.format("Unsupported encoding: %s", ChessHogScannerConstants.CHARSET.name()), cause ); } return encodeQuery; } } }