package com.nomixer.pivot.wtk;

import org.apache.pivot.wtk.TextInput;
import org.apache.pivot.wtk.validation.Validator;

public class LockableTextInput extends TextInput {

	private LockedValidator lockedValidator = new LockedValidator();
	private boolean locked;

    private boolean previousStrict;
    private Validator previousValidator;

    public LockableTextInput() {
    	super();
	}

    @Override
    public boolean isFocusable() {
    	return !locked && super.isFocusable();
    }


    public boolean isLocked() {
        return locked;
    }

    public void setLocked(boolean locked) {
        this.locked = locked;
        if (locked) {
        	previousStrict = isStrictValidation();
            previousValidator = getValidator();
            lockedValidator.setText(getText());
        	setValidator(lockedValidator);
        	setStrictValidation(true);
        } else {
            setValidator(previousValidator);
            setStrictValidation(previousStrict);
            previousValidator = null;
        }
    }

    @Override
    public void setText(final String text) {
    	setLocked(false);
    	super.setText(text);
    	setLocked(true);
    }


    private static class LockedValidator implements Validator {
        private String text;
		public void setText(String text) {
			this.text = text;
		}
		public String getText() {
			return text;
		}

        @Override
        public boolean isValid(final String text) {
            return this.text.equals(text);
        }
    };
}
