/*
* This file is part of ADDIS (Aggregate Data Drug Information System).
* ADDIS is distributed from http://drugis.org/.
* Copyright © 2009 Gert van Valkenhoef, Tommi Tervonen.
* Copyright © 2010 Gert van Valkenhoef, Tommi Tervonen, Tijs Zwinkels,
* Maarten Jacobs, Hanno Koeslag, Florin Schimbinschi, Ahmad Kamal, Daniel
* Reid.
* Copyright © 2011 Gert van Valkenhoef, Ahmad Kamal, Daniel Reid, Florin
* Schimbinschi.
* Copyright © 2012 Gert van Valkenhoef, Daniel Reid, Joël Kuiper, Wouter
* Reckman.
* Copyright © 2013 Gert van Valkenhoef, Joël Kuiper.
*
* This program 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.
*
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.drugis.addis.util.jaxb;
import static org.drugis.addis.entities.AssertEntityEquals.assertEntityEquals;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.xml.bind.JAXBException;
import javax.xml.transform.TransformerException;
import org.drugis.addis.ExampleData;
import org.drugis.addis.entities.Arm;
import org.drugis.addis.entities.Domain;
import org.drugis.addis.entities.DomainImpl;
import org.drugis.addis.entities.Study;
import org.drugis.addis.entities.analysis.NetworkMetaAnalysis;
import org.drugis.addis.entities.treatment.TreatmentDefinition;
import org.drugis.addis.util.jaxb.JAXBConvertor;
import org.drugis.addis.util.jaxb.NetworkMetaAnalysisConverter;
import org.drugis.addis.util.jaxb.JAXBConvertor.ConversionException;
import org.drugis.addis.util.jaxb.JAXBConvertorTest.MetaAnalysisWithStudies;
import org.junit.Before;
import org.junit.Test;
import org.xml.sax.SAXException;
public class NetworkMetaAnalysisConverterTest {
private JAXBConvertorTest d_jaxbConverterTest;
private static final String TEST_DATA_WITH_RESULTS = JAXBConvertorTest.TEST_DATA_PATH + "testDataSavedResults.addis"; // note: saved results in Dizziness MA
@Before
public void setUp() throws JAXBException {
d_jaxbConverterTest = new JAXBConvertorTest();
d_jaxbConverterTest.setup();
}
@Test
public void testConvertNetworkMetaAnalysis() throws Exception,
InstantiationException, InvocationTargetException,
NoSuchMethodException {
Domain domain = new DomainImpl();
ExampleData.initDefaultData(domain);
String name = "CGI network meta-analysis";
MetaAnalysisWithStudies ma = d_jaxbConverterTest.buildNetworkMetaAnalysis(name);
List<Study> studies = new ArrayList<Study>();
for (org.drugis.addis.entities.data.Study study : ma.d_studies) {
Study studyEnt = JAXBConvertor.convertStudy(study, domain);
domain.getStudies().add(studyEnt);
studies.add(studyEnt);
}
TreatmentDefinition combi = TreatmentDefinition.createTrivial(Arrays.asList(
ExampleData.buildDrugFluoxetine(),
ExampleData.buildDrugSertraline()));
TreatmentDefinition parox = TreatmentDefinition.createTrivial(ExampleData.buildDrugParoxetine());
TreatmentDefinition sertr = TreatmentDefinition.createTrivial(ExampleData.buildDrugSertraline());
SortedSet<TreatmentDefinition> alternatives = new TreeSet<TreatmentDefinition>();
alternatives.add(combi);
alternatives.add(parox);
alternatives.add(sertr);
Map<Study, Map<TreatmentDefinition, Arm>> armMap = new HashMap<Study, Map<TreatmentDefinition, Arm>>();
Map<TreatmentDefinition, Arm> study1map = new HashMap<TreatmentDefinition, Arm>();
study1map.put(combi, studies.get(0).getArms().get(0));
study1map.put(sertr, studies.get(0).getArms().get(1));
armMap.put(studies.get(0), study1map);
Map<TreatmentDefinition, Arm> study2map = new HashMap<TreatmentDefinition, Arm>();
study2map.put(parox, studies.get(1).getArms().get(0));
study2map.put(sertr, studies.get(1).getArms().get(1));
armMap.put(studies.get(1), study2map);
Map<TreatmentDefinition, Arm> study3map = new HashMap<TreatmentDefinition, Arm>();
study3map.put(sertr, studies.get(2).getArms().get(0));
study3map.put(parox, studies.get(2).getArms().get(1));
study3map.put(combi, studies.get(2).getArms().get(2));
armMap.put(studies.get(2), study3map);
Collections.sort(studies); // So the reading *by definition* puts the studies in their natural order
NetworkMetaAnalysis expected = new NetworkMetaAnalysis(name,
ExampleData.buildIndicationDepression(),
ExampleData.buildEndpointCgi(), studies, alternatives, armMap);
assertEntityEquals(expected,
NetworkMetaAnalysisConverter.load(ma.d_nwma, domain));
assertEquals(ma.d_nwma,
NetworkMetaAnalysisConverter.save(expected));
}
@Test
public void testRoundTrip() throws JAXBException, ConversionException, TransformerException, IOException, SAXException {
d_jaxbConverterTest.doRoundTripTest(getTransformedSavedResultsData(), false);
}
private static InputStream getTransformedSavedResultsData() throws TransformerException, IOException {
return JAXBConvertorTest.getTestData(TEST_DATA_WITH_RESULTS);
}
}