All Downloads are FREE. Search and download functionalities are using the official Maven repository.

xy.reflect.ui.undo.AbstractModification Maven / Gradle / Ivy

package xy.reflect.ui.undo;

import xy.reflect.ui.info.IInfo;

public abstract class AbstractModification implements IModification {

	protected String title;
	protected Runnable doJob;
	protected Runnable undoJob;
	protected IInfo target;
	protected static final String UNDO_TITLE_PREFIX = "(Revert) ";

	protected abstract Runnable createDoJob();

	protected abstract Runnable createUndoJob();

	protected AbstractModification(IInfo target) {
		this.target = target;
	}

	@Override
	public IInfo getTarget() {
		return target;
	}

	@Override
	public boolean isNull() {
		return false;
	}

	@Override
	public IModification applyAndGetOpposite() {
		if (doJob == null) {
			doJob = createDoJob();
		}
		if (undoJob == null) {
			undoJob = createUndoJob();
		}

		doJob.run();

		return new OppositeModification();
	}

	@Override
	public String toString() {
		return "Modification [title=" + getTitle() + "]";
	}

	public static String getUndoTitle(String title) {
		String result;
		if (title == null) {
			result = null;
		} else if (title.startsWith(AbstractModification.UNDO_TITLE_PREFIX)) {
			result = title.substring(AbstractModification.UNDO_TITLE_PREFIX.length());
		} else {
			result = AbstractModification.UNDO_TITLE_PREFIX + title;
		}
		return result;
	}

	public class OppositeModification implements IModification {

		@Override
		public boolean isNull() {
			return false;
		}

		@Override
		public String getTitle() {
			return AbstractModification.getUndoTitle(AbstractModification.this.getTitle());
		}

		public AbstractModification getSourceModification() {
			return AbstractModification.this;
		}

		@Override
		public IInfo getTarget() {
			return getSourceModification().target;
		}

		@Override
		public IModification applyAndGetOpposite() {
			undoJob.run();
			return getSourceModification();
		}

		@Override
		public int hashCode() {
			final int prime = 31;
			int result = 1;
			result = prime * result + getSourceModification().hashCode();
			return result;
		}

		@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			OppositeModification other = (OppositeModification) obj;
			if (!getSourceModification().equals(other.getSourceModification()))
				return false;
			return true;
		}

		@Override
		public String toString() {
			return "OppositeModification [soure=" + getSourceModification() + "]";
		}

	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy