mylyn-gitea/io.gitea.mylyn.ui/src/io/gitea/mylyn/ui/GiteaRepositorySettingsPage...

151 lines
4.4 KiB
Java

// Copyright (c) 2021, Fr.Terrot. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package io.gitea.mylyn.ui;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import io.gitea.mylyn.core.GiteaConnector;
import io.gitea.mylyn.core.GiteaPluginCore;
/** Mylyn Gitea repository configuration page. */
public class GiteaRepositorySettingsPage extends AbstractRepositorySettingsPage {
private Button useToken;
private Text giteaBaseUrl;
public GiteaRepositorySettingsPage(String title, String description, TaskRepository taskRepository) {
super(title, description, taskRepository);
setNeedsValidateOnFinish(true);
}
@Override
protected void createAdditionalControls(final Composite composite) {
savePasswordButton.setSelection(true);
useToken = new Button(composite, SWT.CHECK);
useToken.setText("Use private token instead of username/password");
GridDataFactory.fillDefaults().span(2, 1).applyTo(useToken);
useToken.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setUsernameFieldEnabled(!useToken.getSelection());
getWizard().getContainer().updateButtons();
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
Label l = new Label(composite, SWT.NONE);
l.setText("Gitea base URL");
giteaBaseUrl = new Text(composite, SWT.SINGLE | SWT.BORDER);
GridDataFactory.fillDefaults().span(1, 1).applyTo(giteaBaseUrl);
/**
* Set widget texts and check boxes if necessary.
*/
if (serverUrlCombo.getText().length() == 0) {
// This means, that there the user is *not* editing an existing repository
// configuration
serverUrlCombo.setText("https://your-host.org/namespace/repository.git");
serverUrlCombo.setText(Labels.SAMPLE_URL);
}
if (getRepository() != null) {
if ("true".equals(getRepository().getProperty("usePrivateToken"))) {
useToken.setSelection(true);
setUsernameFieldEnabled(false);
}
if (getRepository().getProperty("giteaBaseUrl") != null) {
giteaBaseUrl.setText(getRepository().getProperty("giteaBaseUrl"));
}
} else {
// Default is to use token
useToken.setSelection(true); // Let select use token by default
setUsernameFieldEnabled(false);
}
}
private void setUsernameFieldEnabled(boolean enabled) {
if (enabled) {
repositoryUserNameEditor.getTextControl(compositeContainer).setEnabled(true);
repositoryUserNameEditor.setEmptyStringAllowed(false);
repositoryPasswordEditor.setLabelText(LABEL_PASSWORD);
compositeContainer.layout();
} else {
repositoryUserNameEditor.setStringValue("");
repositoryUserNameEditor.getTextControl(compositeContainer).setEnabled(false);
repositoryUserNameEditor.setEmptyStringAllowed(true);
repositoryPasswordEditor.setLabelText("Private token:");
compositeContainer.layout();
}
}
@Override
public String getConnectorKind() {
return GiteaPluginCore.CONNECTOR_KIND;
}
@Override
public TaskRepository createTaskRepository() {
TaskRepository repo = super.createTaskRepository();
return repo;
}
@Override
public void applyTo(TaskRepository repository) {
repository.setCategory(TaskRepository.CATEGORY_BUGS);
super.applyTo(repository);
if (useToken.getSelection()) {
repository.setProperty("usePrivateToken", "true");
} else {
repository.setProperty("usePrivateToken", "false");
}
repository.setProperty("giteaBaseUrl", giteaBaseUrl.getText());
}
@Override
protected boolean isMissingCredentials() {
if (useToken != null && useToken.getSelection()) {
return repositoryPasswordEditor.getStringValue().trim().equals("");
} else {
return super.isMissingCredentials();
}
}
@Override
protected Validator getValidator(final TaskRepository repository) {
return new Validator() {
@Override
public void run(IProgressMonitor monitor) throws CoreException {
GiteaConnector.validate(repository);
}
};
}
}