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; import games.strategy.util.PropertyUtil; /** * Resets the value to the default value. */ class AttachmentPropertyReset extends Change { private static final long serialVersionUID = 9208154387325299072L; private final Attachable m_attachedTo; private final String m_attachmentName; private final Object m_oldValue; private final String m_property; AttachmentPropertyReset(final IAttachment attachment, final String property) { if (attachment == null) { throw new IllegalArgumentException("No attachment, property:" + property); } m_attachedTo = attachment.getAttachedTo(); m_attachmentName = attachment.getName(); m_oldValue = PropertyUtil.getPropertyFieldObject(property, attachment); m_property = property; } AttachmentPropertyReset(final Attachable attachTo, final String attachmentName, final Object oldValue, final String property) { m_attachmentName = attachmentName; m_attachedTo = attachTo; m_oldValue = oldValue; m_property = property; } public Attachable getAttachedTo() { return m_attachedTo; } public String getAttachmentName() { return m_attachmentName; } @Override public void perform(final GameData data) { final IAttachment attachment = m_attachedTo.getAttachment(m_attachmentName); PropertyUtil.reset(m_property, attachment); } @Override public Change invert() { return new AttachmentPropertyResetUndo(m_attachedTo, m_attachmentName, m_oldValue, m_property); } @Override public String toString() { return "AttachmentPropertyClear attached to:" + m_attachedTo + " name:" + m_attachmentName + ", reset old value:" + m_oldValue; } }