* If newEntry has the same id (ignoring case), and doesn't have a conflicting
* file spec or chain code, then update this entry from its file and/or chain
* code.
*
* @param newEntry
* @return true if modifications were made
*/
public boolean updateFrom(PDBEntry newEntry)
{
if (this.equals(newEntry))
{
return true;
}
String newId = newEntry.getId();
if (newId == null || getId() == null)
{
return false; // shouldn't happen
}
boolean idMatches = getId().equalsIgnoreCase(newId);
/*
* Don't update if associated with different structure files
*/
String newFile = newEntry.getFile();
if (newFile != null && getFile() != null)
{
if (!newFile.equals(getFile()))
{
return false;
}
else
{
// files match.
if (!idMatches)
{
// this shouldn't happen, but could do if the id from the
// file is not the same as the id from the authority that provided
// the file
if (!newEntry.fakedPDBId())
{
return false;
} // otherwise we can update
}
}
}
else
{
// one has data, one doesn't ..
if (!idMatches)
{
return false;
} // otherwise maybe can update
}
/*
* Don't update if associated with different chains (ignoring case)
*/
String newChain = newEntry.getChainCode();
if (newChain != null && newChain.length() > 0 && getChainCode() != null
&& getChainCode().length() > 0
&& !getChainCode().equalsIgnoreCase(newChain))
{
return false;
}
/*
* set file path if not already set
*/
String newType = newEntry.getType();
if (getFile() == null && newFile != null)
{
setFile(newFile);
setType(newType);
}
/*
* set file type if new entry has it and we don't
* (for the case where file was not updated)
*/
if (getType() == null && newType != null)
{
setType(newType);
}
/*
* set chain if not already set (we excluded differing
* chains earlier) (ignoring case change only)
*/
if (newChain != null && newChain.length() > 0
&& !newChain.equalsIgnoreCase(getChainCode()))
{
setChainCode(newChain);
}
/*
* copy any new or modified properties
*/
Enumeration