/**
* Copyright 2008-2016 Qualogy Solutions B.V.
*
* 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 com.qualogy.qafe.business.action;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.qualogy.qafe.bind.commons.type.In;
import com.qualogy.qafe.bind.core.application.ApplicationContext;
import com.qualogy.qafe.bind.integration.service.ServiceRef;
import com.qualogy.qafe.bind.item.Item;
import com.qualogy.qafe.business.integration.IntegrationProcessorFactory;
import com.qualogy.qafe.core.datastore.DataIdentifier;
import com.qualogy.qafe.core.datastore.DataStore;
import com.qualogy.qafe.core.errorhandling.ExternalException;
import com.qualogy.qafe.core.framework.business.IntegrationProcessor;
public class ServiceRefExecuter extends ItemExecuter{
public void execute(ApplicationContext context, DataIdentifier id, Item item) throws ExternalException{
ServiceRef serviceRef = (ServiceRef)item;
if(serviceRef.getRef()==null)
throw new NullPointerException("service isn't referencing to an item");
processIn(context, id, serviceRef.getInput());
IntegrationProcessor processor = IntegrationProcessorFactory.create(serviceRef.getRef().getResourceRef().getRef());
processor.process(context, id, serviceRef);
processOut(context, id, serviceRef.getOutput());
collectUpdatedModels(id, serviceRef);
}
private void collectUpdatedModels(DataIdentifier id, ServiceRef serviceRef) {
if (DataStore.contains(id, DataStore.KEY_SERVICE_MODIFY)) {
DataStore.getDataStore(id).remove(DataStore.KEY_SERVICE_MODIFY);
String methodId = serviceRef.getMethod().getId();
List<String> modifiedModels = new ArrayList<String>();
if (serviceRef.getInput() != null) {
for (Object input : serviceRef.getInput()) {
if (input instanceof In) {
In in = (In)input;
if (in.getRef() != null) {
String model = in.getRef().getRefWithoutRoot();
if (modifiedModels.contains(model)) {
continue;
}
modifiedModels.add(model);
}
}
}
}
Map<String,List> serviceModifiedModels = null;
if (!DataStore.contains(id, DataStore.KEY_SERVICE_MODIFIED_MODELS)) {
serviceModifiedModels = new HashMap<String, List>();
DataStore.store(id, DataStore.KEY_SERVICE_MODIFIED_MODELS, serviceModifiedModels);
}
serviceModifiedModels = (Map<String,List>)DataStore.getValue(id, DataStore.KEY_SERVICE_MODIFIED_MODELS);
serviceModifiedModels.put(methodId, modifiedModels);
}
}
}