/*
* Copyright (c) 2017 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.haleconnect.ui.projects;
import java.net.URI;
import java.net.URL;
import java.text.MessageFormat;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Link;
import org.eclipse.ui.PlatformUI;
import de.fhg.igd.slf4jplus.ALogger;
import de.fhg.igd.slf4jplus.ALoggerFactory;
import eu.esdihumboldt.hale.io.haleconnect.HaleConnectService;
import eu.esdihumboldt.hale.io.haleconnect.project.HaleConnectProjectWriter;
import eu.esdihumboldt.hale.ui.HaleUI;
import eu.esdihumboldt.hale.ui.io.ExportWizard;
import eu.esdihumboldt.hale.ui.io.IOWizard;
import eu.esdihumboldt.hale.ui.io.config.AbstractConfigurationPage;
/**
* Wizard for sharing projects on hale connect
*
* @author Florian Esser
*/
public class ShareProjectWizard extends ExportWizard<HaleConnectProjectWriter> {
private static final ALogger log = ALoggerFactory.getLogger(ShareProjectWizard.class);
private final HaleConnectService haleConnect;
/**
* Create the wizard
*/
public ShareProjectWizard() {
super(HaleConnectProjectWriter.class);
this.haleConnect = HaleUI.getServiceProvider().getService(HaleConnectService.class);
}
@Override
public void addPages() {
super.addPages();
addPage(new ShareProjectDetailsPage());
for (AbstractConfigurationPage<? extends HaleConnectProjectWriter, ? extends IOWizard<HaleConnectProjectWriter>> confPage : getConfigurationPages()) {
confPage.setPageComplete(false);
}
}
@Override
public boolean performFinish() {
boolean result = super.performFinish();
if (result) {
try {
URI clientAccessUrl = this.getProvider().getClientAccessUrl();
MessageDialog successDialog = new MessageDialog(getShell(),
"Project upload successful", null,
"Project was successfully uploaded to hale connect.",
MessageDialog.INFORMATION, new String[] { IDialogConstants.OK_LABEL }, 0) {
@Override
protected Control createCustomArea(Composite parent) {
Link link = new Link(parent, SWT.WRAP);
link.setText(MessageFormat.format(
"To access this project online, please visit the following URL (login may be required):\n<a href=\"{0}\">{0}</a>.",
clientAccessUrl));
link.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
try {
// Open default external browser
PlatformUI.getWorkbench().getBrowserSupport()
.getExternalBrowser().openURL(new URL(e.text));
} catch (Exception ex) {
log.error(MessageFormat.format("Error opening browser: {0}",
ex.getMessage()), e);
}
}
});
return link;
}
};
successDialog.open();
log.info(MessageFormat.format(
"Project was successfully uploaded to hale connect and is available online at \"{0}\"",
clientAccessUrl));
} catch (IllegalArgumentException e) {
// bad base path?
log.error(MessageFormat.format("Error creating client access URL: {0}",
e.getMessage()), e);
log.userInfo("Project was successfully uploaded to hale connect.");
}
}
return result;
}
}