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.triplea.attachments.TechAttachment; class GenericTechChange extends Change { private static final long serialVersionUID = -2439447526511535571L; private final Attachable m_attachedTo; private final String m_attachmentName; private final boolean m_newValue; private final boolean m_oldValue; private final String m_property; public Attachable getAttachedTo() { return m_attachedTo; } public String getAttachmentName() { return m_attachmentName; } GenericTechChange(final TechAttachment attachment, final boolean newValue, final String property) { if (attachment == null) { throw new IllegalArgumentException("No attachment, newValue:" + newValue + " property:" + property); } m_attachedTo = attachment.getAttachedTo(); m_attachmentName = attachment.getName(); m_oldValue = attachment.hasGenericTech(property); m_newValue = newValue; m_property = property; } public GenericTechChange(final Attachable attachTo, final String attachmentName, final boolean newValue, final boolean oldValue, final String property) { m_attachmentName = attachmentName; m_attachedTo = attachTo; m_newValue = newValue; m_oldValue = oldValue; m_property = property; } @Override public void perform(final GameData data) { final TechAttachment attachment = (TechAttachment) m_attachedTo.getAttachment(m_attachmentName); attachment.setGenericTech(m_property, m_newValue); } @Override public Change invert() { return new GenericTechChange(m_attachedTo, m_attachmentName, m_oldValue, m_newValue, m_property); } @Override public String toString() { return "GenericTechChange attached to:" + m_attachedTo + " name:" + m_attachmentName + " new value:" + m_newValue + " old value:" + m_oldValue; } }