/*
* Copyright (c) 2016 Fraunhofer IGD
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* Fraunhofer IGD <http://www.igd.fraunhofer.de/>
*/
package de.fhg.igd.mapviewer.server.wms.wizard.pages;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.swt.widgets.Display;
import de.fhg.igd.mapviewer.concurrency.SwtCallback;
import de.fhg.igd.mapviewer.server.wms.capabilities.WMSUtil;
import de.fhg.igd.mapviewer.server.wms.wizard.pages.ConcurrentValidator.Validation;
/**
* WMS location field editor
*
* @author Simon Templer
*/
public class WMSLocationFieldEditor extends StringFieldEditor {
private final ConcurrentValidator validator;
private boolean doValidation = true;
/**
* Default constructor
*
* @param display the display
*/
public WMSLocationFieldEditor(Display display) {
super();
setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
validator = new ConcurrentValidator(new SwtCallback<Boolean>(display) {
@Override
protected void error(Throwable e) {
setErrorMessage(e.getLocalizedMessage());
updateState();
}
@Override
protected void finished(Boolean result) {
updateState();
}
}, false);
}
/**
* @see StringFieldEditor#doCheckState()
*/
@Override
protected boolean doCheckState() {
final String value = getStringValue();
if (doValidation) {
validator.runValidation(new Validation() {
@Override
public boolean validate() throws Exception {
WMSUtil.getCapabilities(value);
return true;
}
});
}
return validator.isValid();
}
private void updateState() {
boolean oldState = isValid();
doValidation = false;
try {
refreshValidState();
} catch (Exception e) {
// ignore
}
doValidation = true;
boolean newState = isValid();
if (oldState != newState) {
fireStateChanged(IS_VALID, oldState, newState);
}
}
}