/*
* Copyright (c) 2014 Data Harmonisation Panel
*
* 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:
* Data Harmonisation Panel <http://www.dhpanel.eu>
*/
package eu.esdihumboldt.hale.io.gml.ui;
import java.net.URI;
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.fieldassist.FieldDecoration;
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import eu.esdihumboldt.hale.common.core.io.Value;
import eu.esdihumboldt.hale.common.core.io.project.model.IOConfiguration;
import eu.esdihumboldt.hale.io.gml.writer.InspireDatasetFeedWriter;
import eu.esdihumboldt.hale.io.gml.writer.InspireInstanceWriter;
import eu.esdihumboldt.hale.io.gml.writer.internal.StreamGmlWriter;
import eu.esdihumboldt.hale.ui.io.IOWizard;
import eu.esdihumboldt.hale.ui.io.config.AbstractConfigurationPage;
/**
* Configuration page for the INSPIRE dataset feed writer.
*
* @author Kai Schwierczek
*/
@SuppressWarnings("restriction")
public class InspireDatasetFeedConfigurationPage extends
AbstractConfigurationPage<StreamGmlWriter, IOWizard<StreamGmlWriter>> {
private Composite parent;
private BooleanFieldEditor create;
private StringFieldEditor title;
private StringFieldEditor subTitle;
private StringFieldEditor rights;
private StringFieldEditor authorName;
private StringFieldEditor authorMail;
private StringFieldEditor selfLink;
private StringFieldEditor gmlLink;
private URI lastGMLTarget;
/**
* Default constructor.
*/
public InspireDatasetFeedConfigurationPage() {
super("inspire.feed");
setTitle("Dataset feed creation");
setDescription("Create an INSPIRE dataset feed for use in an INSPIRE Download Service.");
setPageComplete(true);
}
@Override
protected void onShowPage(boolean firstShow) {
// update defaults for self+gml uri
if (getWizard().getProvider().getTarget() != null) {
// may be null when creating custom export configuration
URI gmlTarget = getWizard().getProvider().getTarget().getLocation();
if (!gmlTarget.equals(lastGMLTarget)) {
lastGMLTarget = gmlTarget;
selfLink.setStringValue(getFeedURIDefault());
gmlLink.setStringValue(getGMLURIDefault());
}
}
}
@Override
public void enable() {
// do nothing
}
@Override
public void disable() {
// do nothing
}
private String getFileName(URI uri) {
String s = uri.toString();
return s.substring(s.lastIndexOf('/') + 1);
}
private String getFeedURIDefault() {
URI gmlTarget = getWizard().getProvider().getTarget().getLocation();
URI feedTarget = InspireInstanceWriter.getDatasetFeedTarget(gmlTarget);
return getFileName(feedTarget);
}
private String getGMLURIDefault() {
URI gmlTarget = getWizard().getProvider().getTarget().getLocation();
return getFileName(gmlTarget);
}
@Override
protected void createContent(Composite page) {
parent = page;
GridLayoutFactory.swtDefaults().numColumns(2).equalWidth(false).spacing(6, 12)
.applyTo(page);
// TODO "intro" explanation
FieldDecoration fieldDec = FieldDecorationRegistry.getDefault().getFieldDecoration(
FieldDecorationRegistry.DEC_INFORMATION);
Image infoImage = fieldDec.getImage();
create = new BooleanFieldEditor("create", "Create feed", BooleanFieldEditor.SEPARATE_LABEL,
page);
create.setPropertyChangeListener(new IPropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
updateStatus();
}
});
title = new StringFieldEditor("title", "Feed title", page);
subTitle = new StringFieldEditor("subtitle", "Feed sub title", page);
rights = new StringFieldEditor("rights", "Rights", page); // e
ControlDecoration rightsExplanation = new ControlDecoration(rights.getTextControl(page),
SWT.LEFT | SWT.TOP);
rightsExplanation.setImage(infoImage);
rightsExplanation
.setDescriptionText("Any information about rights or restrictions to the dataset.");
authorName = new StringFieldEditor("name", "Author name", page);
authorMail = new StringFieldEditor("mail", "Author mail", page);
selfLink = new StringFieldEditor("self", "Feed URI", page); // e
ControlDecoration selfLinkExplanation = new ControlDecoration(
selfLink.getTextControl(page), SWT.LEFT | SWT.TOP);
selfLinkExplanation.setImage(infoImage);
selfLinkExplanation
.setDescriptionText("The address under which the feed will be accessible.\n"
+ "Changes do not affect the location of the created file.");
gmlLink = new StringFieldEditor("gml", "GML URI", page);// e
ControlDecoration gmlLinkExplanation = new ControlDecoration(gmlLink.getTextControl(page),
SWT.LEFT | SWT.TOP);
gmlLinkExplanation.setImage(infoImage);
gmlLinkExplanation
.setDescriptionText("The address under which the gml data will be accessible.\n"
+ "Changes do not affect the location of the created file.");
updateStatus();
}
private void updateStatus() {
// enable/disable input fields
boolean createFeed = create.getBooleanValue();
title.setEnabled(createFeed, parent);
subTitle.setEnabled(createFeed, parent);
rights.setEnabled(createFeed, parent);
authorName.setEnabled(createFeed, parent);
authorMail.setEnabled(createFeed, parent);
selfLink.setEnabled(createFeed, parent);
gmlLink.setEnabled(createFeed, parent);
}
@Override
public boolean updateConfiguration(StreamGmlWriter provider) {
// ATOM allows basically anything (well, mail must match '.+@.+')
// so no validation here...
boolean createFeed = create.getBooleanValue();
provider.setParameter(InspireInstanceWriter.PARAM_SPATIAL_DATA_SET_CREATE_FEED,
Value.of(createFeed));
if (createFeed) {
provider.setParameter(InspireDatasetFeedWriter.PARAM_FEED_TITLE,
Value.of(title.getStringValue()));
provider.setParameter(InspireDatasetFeedWriter.PARAM_FEED_SUBTITLE,
Value.of(subTitle.getStringValue()));
provider.setParameter(InspireDatasetFeedWriter.PARAM_FEED_RIGHTS,
Value.of(rights.getStringValue()));
provider.setParameter(InspireDatasetFeedWriter.PARAM_FEED_AUTHOR_NAME,
Value.of(authorName.getStringValue()));
provider.setParameter(InspireDatasetFeedWriter.PARAM_FEED_AUTHOR_MAIL,
Value.of(authorMail.getStringValue()));
provider.setParameter(InspireDatasetFeedWriter.PARAM_FEED_SELFLINK,
Value.of(selfLink.getStringValue()));
provider.setParameter(InspireDatasetFeedWriter.PARAM_FEED_GMLLINK,
Value.of(gmlLink.getStringValue()));
}
else {
// this is not really necessary, but for the sake of tidiness
provider.setParameter(InspireDatasetFeedWriter.PARAM_FEED_TITLE, null);
provider.setParameter(InspireDatasetFeedWriter.PARAM_FEED_SUBTITLE, null);
provider.setParameter(InspireDatasetFeedWriter.PARAM_FEED_RIGHTS, null);
provider.setParameter(InspireDatasetFeedWriter.PARAM_FEED_AUTHOR_NAME, null);
provider.setParameter(InspireDatasetFeedWriter.PARAM_FEED_AUTHOR_MAIL, null);
provider.setParameter(InspireDatasetFeedWriter.PARAM_FEED_SELFLINK, null);
provider.setParameter(InspireDatasetFeedWriter.PARAM_FEED_GMLLINK, null);
}
return true;
}
@Override
public void loadPreSelection(IOConfiguration conf) {
Value createValue = conf.getProviderConfiguration().get(
InspireInstanceWriter.PARAM_SPATIAL_DATA_SET_CREATE_FEED);
Value titleValue = conf.getProviderConfiguration().get(
InspireDatasetFeedWriter.PARAM_FEED_TITLE);
Value subTitleValue = conf.getProviderConfiguration().get(
InspireDatasetFeedWriter.PARAM_FEED_SUBTITLE);
Value rightsValue = conf.getProviderConfiguration().get(
InspireDatasetFeedWriter.PARAM_FEED_RIGHTS);
Value authorNameValue = conf.getProviderConfiguration().get(
InspireDatasetFeedWriter.PARAM_FEED_AUTHOR_NAME);
Value authorMailValue = conf.getProviderConfiguration().get(
InspireDatasetFeedWriter.PARAM_FEED_AUTHOR_MAIL);
Value selfLinkValue = conf.getProviderConfiguration().get(
InspireDatasetFeedWriter.PARAM_FEED_SELFLINK);
Value gmlLinkValue = conf.getProviderConfiguration().get(
InspireDatasetFeedWriter.PARAM_FEED_GMLLINK);
if (create != null && createValue != null) {
// there is no other way to set the selection for the button except
// using the preference store
IPreferenceStore store = new PreferenceStore();
store.setValue(create.getPreferenceName(), createValue.as(Boolean.class, false));
create.setPreferenceStore(store);
create.load();
updateStatus();
}
if (title != null && titleValue != null) {
title.setStringValue(titleValue.as(String.class));
}
if (subTitle != null && subTitleValue != null) {
subTitle.setStringValue(subTitleValue.as(String.class));
}
if (rights != null && rightsValue != null) {
rights.setStringValue(rightsValue.as(String.class));
}
if (authorName != null && authorNameValue != null) {
authorName.setStringValue(authorNameValue.as(String.class));
}
if (authorMail != null && authorMailValue != null) {
authorMail.setStringValue(authorMailValue.as(String.class));
}
if (selfLink != null && selfLinkValue != null) {
selfLink.setStringValue(selfLinkValue.as(String.class));
}
if (gmlLink != null && gmlLinkValue != null) {
gmlLink.setStringValue(gmlLinkValue.as(String.class));
}
}
}