Skip to content

Commit

Permalink
Finished refactoring to use BuilderFactory [23650083]
Browse files Browse the repository at this point in the history
  • Loading branch information
lyahdav committed Apr 11, 2012
1 parent 811ea08 commit a658328
Show file tree
Hide file tree
Showing 10 changed files with 65 additions and 22 deletions.
39 changes: 35 additions & 4 deletions src/main/java/edu/cmu/sv/arinc838/builder/BuilderFactory.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,39 @@
package edu.cmu.sv.arinc838.builder;

public interface BuilderFactory {
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;


public class BuilderFactory {

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

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

if (Dao == FileDefinitionDao.class){
return (Builder<DaoType, JaxbType>) new FileDefinitionBuilder(this);
}

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

if (Dao == SoftwareDefinitionFileDao.class){
return (Builder<DaoType, JaxbType>) new SoftwareDefinitionFileBuilder(this);
}

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

throw new IllegalArgumentException();
}


<DaoType, JaxbType> Builder<DaoType, JaxbType> getBuilder(Class<DaoType> Dao, Class<JaxbType> JaxB);

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,19 @@
import java.io.IOException;

import com.arinc.arinc838.FileDefinition;
import com.arinc.arinc838.IntegrityDefinition;

import edu.cmu.sv.arinc838.binary.BdfFile;
import edu.cmu.sv.arinc838.dao.FileDefinitionDao;
import edu.cmu.sv.arinc838.dao.IntegrityDefinitionDao;

public class FileDefinitionBuilder implements Builder<FileDefinitionDao, FileDefinition> {
private BuilderFactory builderFactory;

public FileDefinitionBuilder(BuilderFactory builderFactory) {
this.builderFactory = builderFactory;
}

@Override
public FileDefinition buildXml(FileDefinitionDao fileDefinitionDao) {
FileDefinition retDef = new FileDefinition();
Expand All @@ -16,7 +24,7 @@ public FileDefinition buildXml(FileDefinitionDao fileDefinitionDao) {
retDef.setFileName(fileDefinitionDao.getFileName());
retDef.setFileSize(fileDefinitionDao.getFileSize());

retDef.setFileIntegrityDefinition(new IntegrityDefinitionBuilder().buildXml(fileDefinitionDao.getFileIntegrityDefinition()));
retDef.setFileIntegrityDefinition(builderFactory.getBuilder(IntegrityDefinitionDao.class, IntegrityDefinition.class).buildXml(fileDefinitionDao.getFileIntegrityDefinition()));

return retDef;
}
Expand All @@ -30,7 +38,7 @@ public int buildBinary(FileDefinitionDao fileDefinitionDao, BdfFile bdfFile) thr
bdfFile.writeBoolean(fileDefinitionDao.isFileLoadable());
bdfFile.writeStr64k(fileDefinitionDao.getFileName());
bdfFile.writeUint32(fileDefinitionDao.getFileSize());
new IntegrityDefinitionBuilder().buildBinary(fileDefinitionDao.getFileIntegrityDefinition(), bdfFile);
builderFactory.getBuilder(IntegrityDefinitionDao.class, IntegrityDefinition.class).buildBinary(fileDefinitionDao.getFileIntegrityDefinition(), bdfFile);

int finalPosition = (int) bdfFile.getFilePointer();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,24 +36,24 @@ public SdfFile buildXml(SoftwareDefinitionFileDao softwareDefinitionFileDao) {
// without a set method to verify its validity prior to building
List<FileDefinitionDao> fileDefsValidated = softwareDefinitionFileDao
.getFileDefinitions();
FileDefinitionBuilder fileDefBuilder = new FileDefinitionBuilder();
Builder<FileDefinitionDao, FileDefinition> fileDefBuilder = builderFactory.getBuilder(FileDefinitionDao.class, FileDefinition.class);
for (FileDefinitionDao fileDef : fileDefsValidated) {
file.getFileDefinitions().add(fileDefBuilder.buildXml(fileDef));
}

TargetHardwareDefinitionBuilder thwDefBuilder = new TargetHardwareDefinitionBuilder();
Builder<TargetHardwareDefinitionDao, ThwDefinition> thwDefBuilder = builderFactory.getBuilder(TargetHardwareDefinitionDao.class, ThwDefinition.class);
for (TargetHardwareDefinitionDao thwDef : softwareDefinitionFileDao
.getTargetHardwareDefinitions()) {
file.getThwDefinitions().add(thwDefBuilder.buildXml(thwDef));
}

IntegrityDefinitionBuilder integDefBuilder = new IntegrityDefinitionBuilder();
Builder<IntegrityDefinitionDao, IntegrityDefinition> integDefBuilder = builderFactory.getBuilder(IntegrityDefinitionDao.class, IntegrityDefinition.class);
file.setLspIntegrityDefinition(integDefBuilder
.buildXml(softwareDefinitionFileDao.getLspIntegrityDefinition()));
file.setSdfIntegrityDefinition(integDefBuilder
.buildXml(softwareDefinitionFileDao.getSdfIntegrityDefinition()));

file.setSoftwareDescription(new SoftwareDescriptionBuilder()
file.setSoftwareDescription(builderFactory.getBuilder(SoftwareDescriptionDao.class, SoftwareDescription.class)
.buildXml(softwareDefinitionFileDao.getSoftwareDescription()));

return file;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import com.arinc.arinc838.FileDefinition;

import edu.cmu.sv.arinc838.binary.BdfFile;
import edu.cmu.sv.arinc838.validation.DataValidator;

/**
* The builder paradigm is that all the fields will be extracted and stored in
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/edu/cmu/sv/arinc838/writer/BdfWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import java.io.File;

import edu.cmu.sv.arinc838.binary.BdfFile;
import edu.cmu.sv.arinc838.builder.BuilderFactoryImpl;
import edu.cmu.sv.arinc838.builder.BuilderFactory;
import edu.cmu.sv.arinc838.builder.SoftwareDefinitionFileBuilder;
import edu.cmu.sv.arinc838.dao.SoftwareDefinitionFileDao;

Expand All @@ -22,7 +22,7 @@ public void write(String path, SoftwareDefinitionFileDao sdfDao) throws Exceptio
File fileOnDisk = new File(path + sdfDao.getBinaryFileName());
BdfFile file = new BdfFile(fileOnDisk);

SoftwareDefinitionFileBuilder builder = new SoftwareDefinitionFileBuilder(new BuilderFactoryImpl());
SoftwareDefinitionFileBuilder builder = new SoftwareDefinitionFileBuilder(new BuilderFactory());
write (file, builder, sdfDao);

}
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/edu/cmu/sv/arinc838/writer/XdfWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@
import com.arinc.arinc838.SdfFile;
import com.sun.xml.bind.marshaller.NamespacePrefixMapper;

import edu.cmu.sv.arinc838.builder.BuilderFactoryImpl;
import edu.cmu.sv.arinc838.builder.BuilderFactory;
import edu.cmu.sv.arinc838.builder.SoftwareDefinitionFileBuilder;
import edu.cmu.sv.arinc838.dao.SoftwareDefinitionFileDao;

public class XdfWriter implements SdfWriter {
@Override
public void write(String path, SoftwareDefinitionFileDao sdfDao) throws Exception {
File file = new File(path + sdfDao.getXmlFileName());
SoftwareDefinitionFileBuilder builder = new SoftwareDefinitionFileBuilder(new BuilderFactoryImpl());
SoftwareDefinitionFileBuilder builder = new SoftwareDefinitionFileBuilder(new BuilderFactory());

SdfFile sdfFile = builder.buildXml(sdfDao);
write(file, sdfFile);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import com.arinc.arinc838.FileDefinition;

import edu.cmu.sv.arinc838.binary.BdfFile;
import edu.cmu.sv.arinc838.dao.FileDefinitionDao;
import edu.cmu.sv.arinc838.dao.IntegrityDefinitionDao;
Expand All @@ -18,9 +20,12 @@
public class FileDefinitionBuilderBinaryTest {

private FileDefinitionDao fileDefDao;
private BuilderFactory builderFactory;

@BeforeMethod
public void setup() {
builderFactory = new BuilderFactory();

fileDefDao = new FileDefinitionDao();
fileDefDao.setFileLoadable(true);
fileDefDao.setFileName("someFile.bin");
Expand All @@ -35,7 +40,7 @@ public void setup() {
@Test
public void buildBinary() throws FileNotFoundException, IOException {
BdfFile bdfFile = new BdfFile(File.createTempFile("tmpFile", ".bdf"));
int bytesWritten = new FileDefinitionBuilder().buildBinary(fileDefDao, bdfFile);
int bytesWritten = builderFactory.getBuilder(FileDefinitionDao.class, FileDefinition.class).buildBinary(fileDefDao, bdfFile);

// 4 ptr to next + 1 is loadable + 14 file name + 4 file size + 10 CRC32 integrity
// 4 + 1 + 14 + 4 + 14 = 37
Expand All @@ -59,7 +64,7 @@ public void buildBinary() throws FileNotFoundException, IOException {
public void buildBinaryIsLast() throws FileNotFoundException, IOException {
fileDefDao.setIsLast(true);
BdfFile bdfFile = new BdfFile(File.createTempFile("tmpFile", ".bdf"));
int bytesWritten = new FileDefinitionBuilder().buildBinary(fileDefDao, bdfFile);
int bytesWritten = builderFactory.getBuilder(FileDefinitionDao.class, FileDefinition.class).buildBinary(fileDefDao, bdfFile);

// 4 ptr to next + 1 is loadable + 14 file name + 4 file size + 10 CRC32 integrity
// 4 + 1 + 14 + 4 + 14 = 37
Expand All @@ -74,7 +79,7 @@ public void buildBinaryIsLast() throws FileNotFoundException, IOException {
@Test
public void fileDefinitionBuilderBdfFile() throws FileNotFoundException, IOException {
BdfFile bdfFile = new BdfFile(File.createTempFile("tmpFile", ".bdf"));
new FileDefinitionBuilder().buildBinary(fileDefDao, bdfFile);
builderFactory.getBuilder(FileDefinitionDao.class, FileDefinition.class).buildBinary(fileDefDao, bdfFile);

bdfFile.seek(0); //return to start of file
bdfFile.readUint32(); //parent object reads the pointers
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public void setUp() {
@Test
public void testBuilder() {
FileDefinitionDao fdDao = new FileDefinitionDao(xmlFileDef);
FileDefinition built = new FileDefinitionBuilder().buildXml(fdDao);
FileDefinition built = new FileDefinitionBuilder(new BuilderFactory()).buildXml(fdDao);

assertNotEquals(null, built);
assertNotEquals(built, xmlFileDef,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ public void testDefaultConstructor() {
@Test
public void testBuildBinaryWritesHeader() throws FileNotFoundException,
IOException {
swDefFileBuilder = new SoftwareDefinitionFileBuilder(new BuilderFactoryImpl());
swDefFileBuilder = new SoftwareDefinitionFileBuilder(new BuilderFactory());
BdfFile file = new BdfFile(File.createTempFile("tmp", "bin"));
int bytesWritten = swDefFileBuilder.buildBinary(sdfDao,file);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import com.arinc.arinc838.ThwDefinition;

import edu.cmu.sv.arinc838.binary.BdfFile;
import edu.cmu.sv.arinc838.builder.BuilderFactoryImpl;
import edu.cmu.sv.arinc838.builder.BuilderFactory;
import edu.cmu.sv.arinc838.builder.SoftwareDefinitionFileBuilder;
import edu.cmu.sv.arinc838.dao.IntegrityDefinitionDao.IntegrityType;
import edu.cmu.sv.arinc838.util.Converter;
Expand Down Expand Up @@ -90,7 +90,7 @@ public void beforeMethod() throws Exception {
swDefFile);
binaryFile = new BdfFile(File.createTempFile("tmp", "bin"));
SoftwareDefinitionFileBuilder swDefFileBuilder = new SoftwareDefinitionFileBuilder(
new BuilderFactoryImpl());
new BuilderFactory());
swDefFileBuilder.buildBinary(swDefFileDao, binaryFile);
readBinaryFile = new SoftwareDefinitionFileDao(binaryFile);
}
Expand Down

0 comments on commit a658328

Please sign in to comment.