/* * Created on 03/lug/2010 * * Copyright 2010 by Andrea Vacondio (andrea.vacondio@gmail.com). * * This file is part of the Sejda source code * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.sejda.core.support.prefix.processor; import static org.apache.commons.lang3.StringUtils.isNotBlank; import java.util.HashSet; import java.util.Set; import org.sejda.core.support.prefix.model.NameGenerationRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Holds information about the {@link PrefixType}s contained in the input prefix string. Expose methods to apply the processors {@link PrefixType} chain to an input prefix and * request. * * @author Andrea Vacondio * */ public class PrefixTypesChain { private static final Logger LOG = LoggerFactory.getLogger(PrefixTypesChain.class); private Set<PrefixType> prefixesChanin = new HashSet<>(); private boolean ensureUniqueness = false; private PrefixProcessor prefixPrepend = new LoggingPrefixProcessorDecorator(new PrependPrefixProcessor()); private PrefixProcessor pageNumberPrepend = new LoggingPrefixProcessorDecorator( new PrependPageNumberPrefixProcessor()); private PrefixProcessor extensionProcessor = new LoggingPrefixProcessorDecorator( new AppendExtensionPrefixProcessor()); public PrefixTypesChain(String prefix) { if (isNotBlank(prefix)) { for (PrefixType type : PrefixType.values()) { if (type.isFoundIn(prefix)) { prefixesChanin.add(type); if (!ensureUniqueness && type.isEnsureUniqueNames()) { ensureUniqueness = true; } } } } } /** * the chain process the input prefix and the request * * @param prefix * input prefix to be processed * @param request * process request * @return the processed string */ public String process(String prefix, NameGenerationRequest request) { LOG.trace("Performing prefix processing with first level prefix chain"); String retVal = processChain(prefix, request, prefixesChanin); if (prefixesChanin.isEmpty()) { retVal = prefixPrepend.process(retVal, request); } if (!ensureUniqueness) { retVal = pageNumberPrepend.process(retVal, request); } return extensionProcessor.process(retVal, request); } private String processChain(String prefix, NameGenerationRequest request, Set<PrefixType> chain) { String retVal = prefix; for (PrefixType type : chain) { retVal = new LoggingPrefixProcessorDecorator(type.getProcessor()).process(retVal, request); } return retVal; } }