/*
|
* Copyright 2011-17 Fraunhofer ISE, energy & meteo Systems GmbH and other contributors
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*
|
*/
|
package org.openmuc.openiec61850.clientgui.databind;
|
|
import javax.swing.JComponent;
|
import javax.swing.JTextField;
|
import javax.swing.text.AttributeSet;
|
import javax.swing.text.BadLocationException;
|
import javax.swing.text.Document;
|
import javax.swing.text.DocumentFilter;
|
import javax.swing.text.PlainDocument;
|
|
import org.openmuc.openiec61850.BasicDataAttribute;
|
import org.openmuc.openiec61850.BdaType;
|
import org.openmuc.openiec61850.clientgui.BasicDataBind;
|
|
public abstract class TextFieldDataBind<E extends BasicDataAttribute> extends BasicDataBind<E> {
|
|
private final DocumentFilter filter;
|
protected JTextField inputField;
|
|
public TextFieldDataBind(E data, BdaType type, AbstractFilter filter) {
|
super(data, type);
|
this.filter = filter;
|
}
|
|
@Override
|
protected JComponent init() {
|
inputField = new JTextField();
|
PlainDocument doc = (PlainDocument) inputField.getDocument();
|
doc.setDocumentFilter(filter);
|
resetImpl();
|
return inputField;
|
}
|
|
protected static abstract class AbstractFilter extends DocumentFilter {
|
@Override
|
public final void insertString(FilterBypass fb, int offset, String string, AttributeSet attr)
|
throws BadLocationException {
|
|
Document doc = fb.getDocument();
|
StringBuilder sb = new StringBuilder();
|
sb.append(doc.getText(0, doc.getLength()));
|
sb.insert(offset, string);
|
|
if (test(sb.toString())) {
|
super.insertString(fb, offset, string, attr);
|
}
|
}
|
|
@Override
|
public final void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs)
|
throws BadLocationException {
|
|
Document doc = fb.getDocument();
|
StringBuilder sb = new StringBuilder();
|
sb.append(doc.getText(0, doc.getLength()));
|
sb.replace(offset, offset + length, text);
|
|
if (test(sb.toString())) {
|
super.replace(fb, offset, length, text, attrs);
|
}
|
}
|
|
@Override
|
public final void remove(FilterBypass fb, int offset, int length) throws BadLocationException {
|
Document doc = fb.getDocument();
|
StringBuilder sb = new StringBuilder();
|
sb.append(doc.getText(0, doc.getLength()));
|
sb.delete(offset, offset + length);
|
|
if (test(sb.toString())) {
|
super.remove(fb, offset, length);
|
}
|
}
|
|
protected abstract boolean test(String text);
|
}
|
}
|