/* * Copyright (c) 2012 Chris Ellison, Mike Deats, Liron Yahdav, Ryan Neal, * Brandon Sutherlin, Scott Griffin * * This software is released under the MIT license * (http://www.opensource.org/licenses/mit-license.php) * * Created on Feb 7, 2012 */ package edu.cmu.sv.arinc838.dao; import java.io.IOException; import com.arinc.arinc838.FileDefinition; import edu.cmu.sv.arinc838.binary.BdfFile; /** * The builder paradigm is that all the fields will be extracted and stored in * their native data types and then stuffed back in at build time. This means * that all the fields will map. The reason to extract the fields is so that * modifications to the builder after the construction does NOT effect the * original xml container. * * This allows for the code to be de-coupled like so: * FileDefinition someDef = new .. * someDef.set... * // more setters * FileDefinitionBuilder someBuilder = new FileDefinitionBuilder (someDef) * ^ * someBuilder.set... <-- Does not effect the values in someDef | * * Complex data objects (e.g. IntegrityDefinition) are stored as references (according to Java) * and then at build time a NEW version is created. This means that the 'get' of these * will be equal (same object) and but the equals will not match in the built version * * For example: * FileDefinition someDef = new .. * IntegrityDefinition someInteg = someDef.get... * * FileDefinitionBuilder someBuilder = new FileDefinitionBuilder (someDef) * // someBuilder.getIntegrity... WILL be the same object as someInteg * * FileDefinition builtDef = someBuilder.build (); * // the builtDef.getIntegrityDefinition () WILL NOT be the same object as someDef.getIntegrityDefinition () * * @author ryan * */ public class FileDefinitionDao { private IntegrityDefinitionDao integDef; private boolean loadable; private String fileName; private long fileSize; private boolean isLast; public FileDefinitionDao() { ; } public FileDefinitionDao(FileDefinition fileDef) { setFileLoadable (fileDef.isFileLoadable()); setFileName(fileDef.getFileName()); setFileSize (fileDef.getFileSize()); setFileIntegrityDefinition (new IntegrityDefinitionDao(fileDef.getFileIntegrityDefinition())); } public FileDefinitionDao(BdfFile bdfFile) throws IOException { setFileLoadable(bdfFile.readBoolean()); setFileName(bdfFile.readStr64k()); setFileSize(bdfFile.readUint32()); setFileIntegrityDefinition(new IntegrityDefinitionDao(bdfFile)); } public IntegrityDefinitionDao getFileIntegrityDefinition() { return integDef; } public void setFileIntegrityDefinition(IntegrityDefinitionDao value) { this.integDef = value; } public boolean isFileLoadable() { return loadable; } public void setFileLoadable(boolean loadable) { this.loadable = loadable; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public long getFileSize() { return fileSize; } public void setFileSize(long fileSize) { this.fileSize = fileSize; } public boolean isLast() { return isLast; } public void setIsLast(boolean value) { isLast = value; } @Override public int hashCode() { if(this.getFileIntegrityDefinition() != null){ return this.getFileIntegrityDefinition().hashCode(); } return 0; } @Override public boolean equals(Object obj) { return obj != null && this == obj || (obj instanceof FileDefinitionDao && equals((FileDefinitionDao)obj)); } public boolean equals(FileDefinitionDao obj){ return obj != null && (this == obj || (this.getFileIntegrityDefinition().equals(obj.getFileIntegrityDefinition()) && ((this.isFileLoadable() && obj.isFileLoadable() || (!this.isFileLoadable() && !obj.isFileLoadable()))) && this.getFileName().equals(obj.getFileName()) && (this.getFileSize() == obj.getFileSize()))); } }