package com.epam.wilma.stubconfig.dom.parser;
/*==========================================================================
Copyright 2013-2017 EPAM Systems
This file is part of Wilma.
Wilma is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Wilma 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Wilma. If not, see <http://www.gnu.org/licenses/>.
===========================================================================*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.w3c.dom.Document;
import com.epam.wilma.domain.stubconfig.StubResourceHolder;
import com.epam.wilma.domain.stubconfig.TemporaryStubResourceHolder;
import com.epam.wilma.domain.stubconfig.helper.InternalResourceHolder;
import com.epam.wilma.domain.stubconfig.interceptor.RequestInterceptor;
import com.epam.wilma.domain.stubconfig.interceptor.ResponseInterceptor;
/**
* Updates the {@link StubResourceHolder} from the {@link TemporaryStubResourceHolder}.
* @author Tunde_Kovacs
*
*/
@Component
public class StubResourceHolderUpdater {
@Autowired
private StubResourceHolder stubResourceHolder;
@Autowired
private TemporaryStubResourceHolder temporaryStubResourceHolder;
@Autowired
private InternalResourceHolder internalResourceHolder;
/**
* Copies the resources from the {@link TemporaryStubResourceHolder} to the {@link StubResourceHolder}.
*/
public void updateResourceHolder() {
stubResourceHolder.setConditionChekers(new ArrayList<>(temporaryStubResourceHolder.getConditionCheckers()));
stubResourceHolder.setTemplateFormatters(new ArrayList<>(temporaryStubResourceHolder.getTemplateFormatters()));
stubResourceHolder.setTemplates(new HashMap<>(temporaryStubResourceHolder.getTemplates()));
updateRequestInterceptors();
updateResponseInterceptors();
stubResourceHolder.setSequenceHandlers(new ArrayList<>(temporaryStubResourceHolder.getSequenceHandlers()));
}
private void updateRequestInterceptors() {
List<RequestInterceptor> requestInterceptors = temporaryStubResourceHolder.getRequestInterceptors();
if (requestInterceptors != null) {
stubResourceHolder.setRequestInterceptors(new ArrayList<>(requestInterceptors));
}
}
private void updateResponseInterceptors() {
List<ResponseInterceptor> responseInterceptors = temporaryStubResourceHolder.getResponseInterceptors();
if (responseInterceptors != null) {
stubResourceHolder.setResponseInterceptors(new ArrayList<>(responseInterceptors));
}
}
/**
* Clears the resources in the {@link TemporaryStubResourceHolder}.
*/
public void clearTemporaryResourceHolder() {
temporaryStubResourceHolder.clearConditionCheckers();
temporaryStubResourceHolder.clearTemplateFormatters();
temporaryStubResourceHolder.clearTemplates();
temporaryStubResourceHolder.clearRequestInterceptors();
temporaryStubResourceHolder.clearResponseInterceptors();
temporaryStubResourceHolder.clearSequenceHandlers();
}
/**
* Add the XML document to {@link StubResourceHolder}.
* @param groupName is the groupname attribute of stub configuration
* @param document is the XML document
*/
public void addDocumentToResourceHolder(final String groupName, final Document document) {
stubResourceHolder.setActualStubConfigDocument(groupName, document);
}
/**
* Copies internal condition checker, template formatter classes
* and request/response interceptors
* into the {@link TemporaryStubResourceHolder}.
*/
public void initializeTemporaryResourceHolder() {
temporaryStubResourceHolder.setConditionCheckers(new ArrayList<>(internalResourceHolder.getConditionCheckers()));
temporaryStubResourceHolder.setTemplateFormatters(new ArrayList<>(internalResourceHolder.getTemplateFormatters()));
initializeRequestInterceptors();
initializeResponseInterceptors();
temporaryStubResourceHolder.setSequenceHandlers(new ArrayList<>(internalResourceHolder.getSequenceHandlers()));
}
private void initializeRequestInterceptors() {
List<RequestInterceptor> requestInterceptors = internalResourceHolder.getRequestInterceptors();
if (requestInterceptors != null) {
temporaryStubResourceHolder.setRequestInterceptors(new ArrayList<>(requestInterceptors));
}
}
private void initializeResponseInterceptors() {
List<ResponseInterceptor> responseInterceptors = internalResourceHolder.getResponseInterceptors();
if (responseInterceptors != null) {
temporaryStubResourceHolder.setResponseInterceptors(new ArrayList<>(responseInterceptors));
}
}
}