package eu.doppel_helix.netbeans.mantisintegration.issue.serialization;
import java.math.BigInteger;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class IssueInfos {
private final Set<IssueInfo> issueInfoBuffer = new HashSet<>();
private final Map<BigInteger,IssueInfo> issueInfos = new HashMap<>();
@XmlElement
private Collection<IssueInfo> getIssueInfo() {
return issueInfoBuffer;
}
private void beforeMarshal(final Marshaller marshaller) {
issueInfoBuffer.addAll(issueInfos.values());
}
private void afterMarshal(final Marshaller marshaller) {
issueInfoBuffer.clear();
}
private void beforeUnmarshal(final Unmarshaller unmarshaller,
final Object parent) {
issueInfoBuffer.clear();
}
private void afterUnmarshal(final Unmarshaller unmarshaller,
final Object parent) {
issueInfos.clear();
for (IssueInfo i : issueInfoBuffer) {
this.issueInfos.put(i.getId(), i);
}
}
public IssueInfo getIssueInfo(BigInteger id) {
return this.issueInfos.get(id);
}
public boolean putIssueInfo(IssueInfo i) {
boolean isEmpty = i.isEmpty();
if(isEmpty) {
if(issueInfos.get(i.getId()) != null) {
issueInfos.remove(i.getId());
return true;
}
return false;
}
IssueInfo oldInfo = this.issueInfos.put(i.getId(), i);
return (oldInfo == null || (! oldInfo.equals(i)));
}
}