package games.strategy.engine.data.changefactory;
import games.strategy.engine.data.Attachable;
import games.strategy.engine.data.Change;
import games.strategy.engine.data.GameData;
import games.strategy.engine.data.IAttachment;
class RemoveAttachmentChange extends Change {
private static final long serialVersionUID = 6365648682759047674L;
private final IAttachment m_attachment;
private final String m_originalAttachmentName;
private final Attachable m_originalAttachable;
private final Attachable m_attachable;
private final String m_name;
public RemoveAttachmentChange(final IAttachment attachment, final Attachable attachable, final String name) {
m_attachment = attachment;
m_originalAttachmentName = attachment.getName();
m_originalAttachable = attachment.getAttachedTo();
m_attachable = attachable;
m_name = name;
}
@Override
protected void perform(final GameData data) {
m_originalAttachable.removeAttachment(m_originalAttachmentName);
m_attachment.setAttachedTo(m_attachable);
m_attachment.setName(m_name);
if (m_attachable != null && m_name != null) {
m_attachable.addAttachment(m_name, m_attachment);
}
}
@Override
public Change invert() {
return new AddAttachmentChange(m_attachment, m_originalAttachable, m_originalAttachmentName);
}
}