/*******************************************************************************
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* All rights reserved. This program and the accompanying materials are made available under
* the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package gov.redhawk.ide.dcd.generator.newnode.tests;
import gov.redhawk.ide.dcd.generator.newdevice.SpdFileTemplate;
import gov.redhawk.ide.dcd.generator.newnode.DcdFileTemplate;
import gov.redhawk.ide.dcd.tests.TestUtils;
import java.io.File;
import java.io.IOException;
import org.junit.Assert;
import mil.jpeojtrs.sca.dcd.DeviceConfiguration;
import mil.jpeojtrs.sca.spd.SoftPkg;
import mil.jpeojtrs.sca.spd.SpdPackage;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.junit.Test;
/**
* A class to test {@link DcdFileTemplate}
*/
public class DcdFileTemplateTest {
/**
* Tests generating a DCD file.
*
* @throws IOException
*/
@Test
public void test() throws IOException {
// Generate XML using the template
final SpdFileTemplate spdTemplate = SpdFileTemplate.create(null);
final gov.redhawk.ide.dcd.generator.newdevice.GeneratorArgs args1 = new gov.redhawk.ide.dcd.generator.newdevice.GeneratorArgs();
args1.setAuthorName("MyName");
args1.setSoftPkgId("MyIdentifier");
args1.setSoftPkgName("MyResource");
args1.setProjectName("MyProject");
final String spdContent = spdTemplate.generate(args1);
// Create an XML file with the content
final File spdFile = TestUtils.createFile(spdContent, SpdPackage.FILE_EXTENSION);
// Create a model for the device
final ResourceSet resourceSet = new ResourceSetImpl();
final SoftPkg softpkg = SoftPkg.Util.getSoftPkg(resourceSet.getResource(URI.createFileURI(spdFile.toString()), true));
// Now generate XML for a DCD
final gov.redhawk.ide.dcd.generator.newnode.GeneratorArgs args2 = new gov.redhawk.ide.dcd.generator.newnode.GeneratorArgs();
args2.setAuthorName(args1.getAuthorName());
args2.setDevices(new SoftPkg[] { softpkg });
args2.setDomainManagerName("MyDomain");
args2.setNodeName("MyNodeName");
args2.setNodeId("MyNodeID");
args2.setProjectName(args1.getProjectName());
final DcdFileTemplate dcdTemplate = DcdFileTemplate.create(null);
final String dcdContent = dcdTemplate.generate(args2);
// Create an XML file with the content
final File dcdFile = TestUtils.createFile(dcdContent, ".dcd.xml");
// Try to create a model from the file and test some of the fields
// that should have been filled in
final DeviceConfiguration devcfg = DeviceConfiguration.Util.getDeviceConfiguration(
resourceSet.getResource(URI.createFileURI(dcdFile.toString()), true));
Assert.assertEquals("MyNodeName", devcfg.getName());
Assert.assertEquals(args2.getNodeId(), devcfg.getId());
Assert.assertEquals("/mgr/DeviceManager.spd.xml", devcfg.getDeviceManagerSoftPkg().getLocalFile().getName());
Assert.assertEquals("SPD", devcfg.getComponentFiles().getComponentFile().get(0).getType());
Assert.assertTrue(devcfg.getComponentFiles().getComponentFile().get(0).getId().startsWith(args1.getSoftPkgName() + "_"));
Assert.assertEquals(spdFile.getAbsolutePath(), devcfg.getComponentFiles().getComponentFile().get(0).getLocalFile().getName());
Assert.assertEquals(devcfg.getPartitioning().getComponentPlacement().get(0).getComponentInstantiation().get(0).getId(), args2.getNodeName() + ":" + args1.getSoftPkgName() + "_1");
Assert.assertTrue(devcfg.getPartitioning().getComponentPlacement().get(0).getComponentFileRef().getRefid().startsWith(args1.getSoftPkgName() + "_"));
Assert.assertEquals(args1.getSoftPkgName() + "_1", devcfg.getPartitioning().getComponentPlacement().get(0).getComponentInstantiation().get(0).getUsageName());
Assert.assertEquals(args2.getDomainManagerName() + "/" + args2.getDomainManagerName(), devcfg.getDomainManager().getNamingService().getName());
}
}