/* * Copyright (c) 2016 wetransform GmbH * * 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: * wetransform GmbH <http://www.wetransform.to> */ package eu.esdihumboldt.hale.io.schematron.ui; import java.io.File; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.preference.FileFieldEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import eu.esdihumboldt.hale.io.schematron.validator.SchematronInstanceValidator; import eu.esdihumboldt.hale.ui.io.config.AbstractConfigurationDialog; import eu.esdihumboldt.hale.ui.util.io.OpenFileFieldEditor; /** * Configuration dialog for {@link SchematronInstanceValidator} * * @author Florian Esser */ public class SchematronValidatorConfigurationDialog extends AbstractConfigurationDialog<SchematronInstanceValidator> { private OpenFileFieldEditor schematronRulesFile; /** * Creates a configuration dialog instance that uses the currently active * {@link Shell}. */ public SchematronValidatorConfigurationDialog() { super(); } /** * Creates a configuration dialog instance. * * @param parentShell the parent shell, or <code>null</code> to create a * top-level shell */ public SchematronValidatorConfigurationDialog(Shell parentShell) { super(parentShell); } /** * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) */ @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText("Configure schematron validator"); } @Override protected Control createDialogArea(Composite parent) { // create composite Composite composite = (Composite) super.createDialogArea(parent); Composite container = new Composite(composite, SWT.NONE); GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER); data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH); container.setLayoutData(data); schematronRulesFile = new OpenFileFieldEditor("metadataFile", "Schematron schema file", true, FileFieldEditor.VALIDATE_ON_KEY_STROKE, container); schematronRulesFile.setEmptyStringAllowed(false); schematronRulesFile.setFilterNames(new String[] { "Schematron schema (*.xml, *.sch)" }); schematronRulesFile.setFileExtensions(new String[] { "*.xml; *.sch" }); SchematronInstanceValidator validator = this.getProvider(); if (validator != null && validator.getSchematronLocation() != null && validator.getSchematronLocation().getScheme().equals("file")) { File file = new File(validator.getSchematronLocation().getPath()); schematronRulesFile.setStringValue(file.getAbsolutePath()); } else { // isValid starts with false even if emptyStringAllowed is true. // -> force validation hack schematronRulesFile.setStringValue(" "); schematronRulesFile.setStringValue(""); } return composite; } /** * @return The selected file or null */ public String getSchematronRulesFile() { if (schematronRulesFile == null) { return null; } return schematronRulesFile.getStringValue(); } /** * @see eu.esdihumboldt.hale.ui.io.config.AbstractConfigurationDialog#configureProvider(eu.esdihumboldt.hale.common.core.io.IOProvider) */ @Override protected boolean configureProvider(SchematronInstanceValidator provider) { String rulesFileName = schematronRulesFile.getStringValue(); if (rulesFileName == null || rulesFileName.trim().isEmpty()) { return false; } File rules = new File(schematronRulesFile.getStringValue()); if (!rules.exists()) { return false; } provider.setSchematronLocation(rules.toURI()); return true; } }