Skip to content

Commit

Permalink
Created a class to implement the builder factory. Added this class to
Browse files Browse the repository at this point in the history
instances where new builder were instantiated.  Fixed one component of
the SDFBuilderTest [23650083]
  • Loading branch information
hibrandon committed Mar 31, 2012
1 parent d2aaa8c commit c74e1ab
Show file tree
Hide file tree
Showing 4 changed files with 101 additions and 55 deletions.
20 changes: 20 additions & 0 deletions src/main/java/edu/cmu/sv/arinc838/builder/BuilderFactoryImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package edu.cmu.sv.arinc838.builder;

import edu.cmu.sv.arinc838.dao.SoftwareDescriptionDao;


public class BuilderFactoryImpl implements BuilderFactory {

@SuppressWarnings("unchecked")
@Override
public <DaoType, JaxbType> Builder<DaoType, JaxbType> getBuilder(
Class<DaoType> Dao, Class<JaxbType> JaxB) {

if (Dao == SoftwareDescriptionDao.class){
return (Builder<DaoType, JaxbType>) new SoftwareDescriptionBuilder();
}

return null;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,52 +3,66 @@
import java.io.IOException;
import java.util.List;

import com.arinc.arinc838.FileDefinition;
import com.arinc.arinc838.IntegrityDefinition;
import com.arinc.arinc838.SdfFile;
import com.arinc.arinc838.SoftwareDescription;
import com.arinc.arinc838.ThwDefinition;

import edu.cmu.sv.arinc838.binary.BdfFile;
import edu.cmu.sv.arinc838.dao.FileDefinitionDao;
import edu.cmu.sv.arinc838.dao.IntegrityDefinitionDao;
import edu.cmu.sv.arinc838.dao.SoftwareDefinitionFileDao;
import edu.cmu.sv.arinc838.dao.SoftwareDescriptionDao;
import edu.cmu.sv.arinc838.dao.TargetHardwareDefinitionDao;
import edu.cmu.sv.arinc838.util.Converter;

public class SoftwareDefinitionFileBuilder implements Builder<SoftwareDefinitionFileDao, SdfFile> {

public class SoftwareDefinitionFileBuilder implements
Builder<SoftwareDefinitionFileDao, SdfFile> {

private BuilderFactory builderFactory;

public SoftwareDefinitionFileBuilder (BuilderFactory builderFact){
public SoftwareDefinitionFileBuilder(BuilderFactory builderFact) {
this.builderFactory = builderFact;

}

@Override
public SdfFile buildXml(SoftwareDefinitionFileDao softwareDefinitionFileDao) {
SdfFile file = new SdfFile();
file.setFileFormatVersion(softwareDefinitionFileDao.getFileFormatVersion());
file.setFileFormatVersion(softwareDefinitionFileDao
.getFileFormatVersion());

// we have to re-validate this as a LIST1 since it can be modified
// without a set method to verify its validity prior to building
List<FileDefinitionDao> fileDefsValidated = softwareDefinitionFileDao.getFileDefinitions();
List<FileDefinitionDao> fileDefsValidated = softwareDefinitionFileDao
.getFileDefinitions();
FileDefinitionBuilder fileDefBuilder = new FileDefinitionBuilder();
for (FileDefinitionDao fileDef : fileDefsValidated) {
file.getFileDefinitions().add(fileDefBuilder.buildXml(fileDef));
}

TargetHardwareDefinitionBuilder thwDefBuilder = new TargetHardwareDefinitionBuilder();
for (TargetHardwareDefinitionDao thwDef : softwareDefinitionFileDao.getTargetHardwareDefinitions()) {
for (TargetHardwareDefinitionDao thwDef : softwareDefinitionFileDao
.getTargetHardwareDefinitions()) {
file.getThwDefinitions().add(thwDefBuilder.buildXml(thwDef));
}

IntegrityDefinitionBuilder integDefBuilder = new IntegrityDefinitionBuilder();
file.setLspIntegrityDefinition(integDefBuilder.buildXml(softwareDefinitionFileDao.getLspIntegrityDefinition()));
file.setSdfIntegrityDefinition(integDefBuilder.buildXml(softwareDefinitionFileDao.getSdfIntegrityDefinition()));

file.setSoftwareDescription(new SoftwareDescriptionBuilder().buildXml(softwareDefinitionFileDao.getSoftwareDescription()));
IntegrityDefinitionBuilder integDefBuilder = new IntegrityDefinitionBuilder();
file.setLspIntegrityDefinition(integDefBuilder
.buildXml(softwareDefinitionFileDao.getLspIntegrityDefinition()));
file.setSdfIntegrityDefinition(integDefBuilder
.buildXml(softwareDefinitionFileDao.getSdfIntegrityDefinition()));

file.setSoftwareDescription(new SoftwareDescriptionBuilder()
.buildXml(softwareDefinitionFileDao.getSoftwareDescription()));

return file;
}

@Override
public int buildBinary(SoftwareDefinitionFileDao softwareDefinitionFileDao, BdfFile file) throws IOException {
public int buildBinary(SoftwareDefinitionFileDao softwareDefinitionFileDao,
BdfFile file) throws IOException {
file.seek(0);
// write the header
file.writePlaceholder(); // file size
Expand All @@ -58,42 +72,57 @@ public int buildBinary(SoftwareDefinitionFileDao softwareDefinitionFileDao, BdfF
file.writePlaceholder(); // file definition pointer
file.writePlaceholder(); // SDF integrity definition pointer
file.writePlaceholder(); // LSP integrity definition pointer
new SoftwareDescriptionBuilder().buildBinary(softwareDefinitionFileDao.getSoftwareDescription(), file);
Builder<SoftwareDescriptionDao, SoftwareDescription> swDescBuilder = builderFactory
.getBuilder(SoftwareDescriptionDao.class,
SoftwareDescription.class);

swDescBuilder.buildBinary(
softwareDefinitionFileDao.getSoftwareDescription(), file);

// Write the target hardware definitions
int size = softwareDefinitionFileDao.getTargetHardwareDefinitions().size();
int size = softwareDefinitionFileDao.getTargetHardwareDefinitions()
.size();
file.writeTargetDefinitionsPointer();
file.writeUint32(size);
TargetHardwareDefinitionBuilder targetHardwareDefinitionBuilder = new TargetHardwareDefinitionBuilder();
Builder<TargetHardwareDefinitionDao, ThwDefinition> targetHardwareDefinitionBuilder = builderFactory.getBuilder(TargetHardwareDefinitionDao.class, ThwDefinition.class);
if (size > 0) {
softwareDefinitionFileDao.getTargetHardwareDefinitions().get(size - 1).setIsLast(true);
softwareDefinitionFileDao.getTargetHardwareDefinitions()
.get(size - 1).setIsLast(true);
for (int i = 0; i < size; i++) {
targetHardwareDefinitionBuilder.buildBinary(softwareDefinitionFileDao.getTargetHardwareDefinitions()
.get(i), file);
targetHardwareDefinitionBuilder.buildBinary(
softwareDefinitionFileDao
.getTargetHardwareDefinitions().get(i), file);
}
}

// write the file definitions
size = softwareDefinitionFileDao.getFileDefinitions().size();
file.writeFileDefinitionsPointer();
file.writeUint32(size);
softwareDefinitionFileDao.getFileDefinitions().get(size - 1).setIsLast(true);
FileDefinitionBuilder fileDefBuilder = new FileDefinitionBuilder();
softwareDefinitionFileDao.getFileDefinitions().get(size - 1)
.setIsLast(true);

Builder<FileDefinitionDao, FileDefinition> fileDefBuilder = builderFactory.getBuilder(FileDefinitionDao.class, FileDefinition.class);
for (int i = 0; i < size; i++) {
fileDefBuilder.buildBinary(softwareDefinitionFileDao.getFileDefinitions().get(i), file);
fileDefBuilder.buildBinary(softwareDefinitionFileDao
.getFileDefinitions().get(i), file);
}

IntegrityDefinitionBuilder integDefBuilder = new IntegrityDefinitionBuilder();
Builder<IntegrityDefinitionDao, IntegrityDefinition> integDefBuilder = builderFactory.getBuilder(IntegrityDefinitionDao.class, IntegrityDefinition.class);

// write the SDF integrity def
file.writeSdfIntegrityDefinitionPointer();
softwareDefinitionFileDao.getSdfIntegrityDefinition().setIntegrityValue(Converter.hexToBytes("0000000A"));
integDefBuilder.buildBinary(softwareDefinitionFileDao.getSdfIntegrityDefinition(), file);
softwareDefinitionFileDao.getSdfIntegrityDefinition()
.setIntegrityValue(Converter.hexToBytes("0000000A"));
integDefBuilder.buildBinary(
softwareDefinitionFileDao.getSdfIntegrityDefinition(), file);

// write the LSP integrity def
file.writeLspIntegrityDefinitionPointer();
softwareDefinitionFileDao.getLspIntegrityDefinition().setIntegrityValue(Converter.hexToBytes("0000000A"));
integDefBuilder.buildBinary(softwareDefinitionFileDao.getLspIntegrityDefinition(), file);
softwareDefinitionFileDao.getLspIntegrityDefinition()
.setIntegrityValue(Converter.hexToBytes("0000000A"));
integDefBuilder.buildBinary(
softwareDefinitionFileDao.getLspIntegrityDefinition(), file);

// write the file size
file.seek(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,7 @@ public void initialize(BdfFile file) throws IOException {

file.seek(BdfFile.FILE_FORMAT_VERSION_LOCATION);
byte[] fileFormatVersion = file.readHexbin32();
if (!Arrays.equals(fileFormatVersion, SoftwareDefinitionFileDao.DEFAULT_FILE_FORMAT_VERSION)) {
throw new IllegalArgumentException("File format not recognized. Expected: "
+ SoftwareDefinitionFileDao.DEFAULT_FILE_FORMAT_VERSION + " Got: " + fileFormatVersion);
}


file.seek(file.readSoftwareDescriptionPointer());
softwareDescription = new SoftwareDescriptionDao(file);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public class SoftwareDefinitionFileBuilderTest {
private com.arinc.arinc838.FileDefinition fileDef;
private com.arinc.arinc838.ThwDefinition hardwareDef;
private BdfFile binaryFile;
private SoftwareDefinitionFileDao readBinaryFile;
private SoftwareDefinitionFileDao sdfDao;
private BuilderFactory bFactory;
private TargetHardwareDefinitionBuilder thdBuilder;
private FileDefinitionBuilder fdBuilder;
Expand Down Expand Up @@ -113,15 +113,15 @@ public void beforeMethod() throws Exception {



binaryFile = new BdfFile(File.createTempFile("tmp", "bin"));
readBinaryFile = new SoftwareDefinitionFileDao(binaryFile);
swDefFileBuilder.buildBinary(readBinaryFile, binaryFile);
binaryFile = new BdfFile(new File("src/test/resources/ACM4712345678.BDF"));
sdfDao = new SoftwareDefinitionFileDao(swDefFile);
//swDefFileBuilder.buildBinary(readBinaryFile, binaryFile);
}


@Test
public void testBuildAddsFileFormatVersion() {
SdfFile file = swDefFileBuilder.buildXml(readBinaryFile);
SdfFile file = swDefFileBuilder.buildXml(sdfDao);

assertEquals(swDefFile.getFileFormatVersion(),
file.getFileFormatVersion());
Expand All @@ -143,7 +143,7 @@ public void testDefaultConstructor() {
public void testBuildBinaryWritesHeader() throws FileNotFoundException,
IOException {
BdfFile file = new BdfFile(File.createTempFile("tmp", "bin"));
int bytesWritten = swDefFileBuilder.buildBinary(readBinaryFile,file);
int bytesWritten = swDefFileBuilder.buildBinary(sdfDao,file);

assertEquals(bytesWritten, 169);

Expand Down Expand Up @@ -178,29 +178,29 @@ public void testBuildBinaryWritesSoftwareDefinition() throws IOException {
IntegrityDefinitionDao lspIntegDao = mock(IntegrityDefinitionDao.class);


readBinaryFile.setSoftwareDescription(swDescription);
readBinaryFile.getTargetHardwareDefinitions().clear();
readBinaryFile.getTargetHardwareDefinitions().add(thdDao);
readBinaryFile.getTargetHardwareDefinitions().add(thdDAOLast);
readBinaryFile.getFileDefinitions().clear();
readBinaryFile.getFileDefinitions().add(fdDao);
readBinaryFile.getFileDefinitions().add(fdDao);
readBinaryFile.getFileDefinitions().add(fdDaoLast);
sdfDao.setSoftwareDescription(swDescription);
sdfDao.getTargetHardwareDefinitions().clear();
sdfDao.getTargetHardwareDefinitions().add(thdDao);
sdfDao.getTargetHardwareDefinitions().add(thdDAOLast);
sdfDao.getFileDefinitions().clear();
sdfDao.getFileDefinitions().add(fdDao);
sdfDao.getFileDefinitions().add(fdDao);
sdfDao.getFileDefinitions().add(fdDaoLast);

readBinaryFile.setSdfIntegrityDefinition(sdfIntegDao);
readBinaryFile.setLspIntegrityDefinition(lspIntegDao);
sdfDao.setSdfIntegrityDefinition(sdfIntegDao);
sdfDao.setLspIntegrityDefinition(lspIntegDao);

InOrder order = inOrder(file, swDescription, thdDao,
thdDAOLast, fdDao, fdDaoLast, sdfIntegDao, lspIntegDao);
InOrder order = inOrder(file, swDescBuilder, thdDao,integDefBuilder,
thdDAOLast,thdBuilder, fdBuilder, fdDao, fdDaoLast, sdfIntegDao, lspIntegDao);

when(file.length()).thenReturn(14L);
int bytesWritten = swDefFileBuilder.buildBinary(readBinaryFile,file);
int bytesWritten = swDefFileBuilder.buildBinary(sdfDao,file);
assertEquals(bytesWritten, 14L);

order.verify(file).seek(0);
order.verify(file).writePlaceholder();
order.verify(file).writeHexbin32(
readBinaryFile.getFileFormatVersion());
sdfDao.getFileFormatVersion());
order.verify(file, times(5)).writePlaceholder();

order.verify(swDescBuilder).buildBinary(swDescription, file);
Expand Down Expand Up @@ -237,7 +237,7 @@ public void testBuildBinaryWritesSoftwareDefinition() throws IOException {
@Test
public void testReadBinary() throws Exception {
SoftwareDefinitionFileDao actual = new SoftwareDefinitionFileDao(binaryFile);
assertEquals(actual, readBinaryFile);
assertEquals(actual, sdfDao);
}

@Test
Expand All @@ -246,9 +246,9 @@ public void testReadBinaryActualFilesOnDisk() throws Exception {


String path = System.getProperty("java.io.tmpdir");
writer.write(path, readBinaryFile);
writer.write(path, sdfDao);

String firstFileName = path + readBinaryFile.getBinaryFileName();
String firstFileName = path + sdfDao.getBinaryFileName();
File firstOnDisk = new File(firstFileName);

BdfFile file = new BdfFile(firstOnDisk);
Expand Down

0 comments on commit c74e1ab

Please sign in to comment.