package org.jolokia.converter.json;
/*
* Copyright 2009-2011 Roland Huss
*
* 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.
*/
import java.lang.reflect.InvocationTargetException;
import java.util.*;
import javax.management.AttributeNotFoundException;
import org.jolokia.converter.object.StringToObjectConverter;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
/**
* @author roland
* @since 13.08.11
*/
abstract public class AbstractExtractorTest {
protected Extractor extractor;
protected ObjectToJsonConverter converter;
protected StringToObjectConverter stringToObjectConverter;
@BeforeMethod
public void setup() {
extractor = createExtractor();
stringToObjectConverter = new StringToObjectConverter();
converter = new ObjectToJsonConverter(stringToObjectConverter,null);
converter.setupContext(new JsonConvertOptions.Builder().useAttributeFilter(true).build());
}
@AfterMethod
public void teardown() {
converter.clearContext();
}
protected Object extractJson(Object pValue,String ... extraArgs) throws AttributeNotFoundException {
return extract(pValue, extraArgs, true);
}
protected Object extractObject(Object pValue,String ... extraArgs) throws AttributeNotFoundException {
return extract(pValue, extraArgs, false);
}
protected Object setObject(Object pInner,String pAttribute,Object pValue) throws InvocationTargetException, IllegalAccessException {
return extractor.setObjectValue(stringToObjectConverter,pInner,pAttribute,pValue);
}
private Object extract(Object pValue, String[] extraArgs, boolean pJsonify) throws AttributeNotFoundException {
Stack<String> args = new Stack<String>();
args.addAll(Arrays.asList(extraArgs));
Collections.reverse(args);
return extractor.extractObject(converter,pValue,args, pJsonify);
}
abstract Extractor createExtractor();
}