package com.dubture.composer.ui.dialogs;
import org.apache.commons.collections.BidiMap;
import org.apache.commons.collections.bidimap.DualHashBidiMap;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.window.IShellProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import com.dubture.composer.ui.ComposerUIPluginConstants;
import com.dubture.composer.ui.ComposerUIPluginImages;
import com.dubture.getcomposer.core.repositories.Repository;
import com.dubture.getcomposer.core.repositories.RepositoryFactory;
public class RepositoryDialog extends Dialog {
private Repository repository;
private String url;
private String name;
private String type;
private BidiMap repos = new DualHashBidiMap() {
private static final long serialVersionUID = 2864558369860037123L;
{
put("composer", "Composer");
put("package", "Package");
put("git", "Git");
put("svn", "Subversion");
put("hg", "Mercurial");
put("pear", "Pear");
}
};
public RepositoryDialog(Shell parentShell, Repository repository) {
super(parentShell);
this.repository = repository;
}
public RepositoryDialog(IShellProvider parentShell, Repository repository) {
super(parentShell);
this.repository = repository;
}
/**
* @wbp.parser.constructor
*/
public RepositoryDialog(Shell parentShell) {
super(parentShell);
}
public RepositoryDialog(IShellProvider parentShell) {
super(parentShell);
}
@SuppressWarnings("unchecked")
@Override
protected Control createDialogArea(Composite parent) {
getShell().setText("Repository");
getShell().setImage(ComposerUIPluginImages.REPO_GENERIC.createImage());
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(new GridLayout(2, false));
Label lblType = new Label(container, SWT.NONE);
GridData gd_lblType = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
gd_lblType.widthHint = ComposerUIPluginConstants.DIALOG_LABEL_WIDTH;
lblType.setLayoutData(gd_lblType);
lblType.setText("Type");
final Combo typeControl = new Combo(container, SWT.READ_ONLY);
GridData gd_type = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
gd_type.widthHint = ComposerUIPluginConstants.DIALOG_CONTROL_WIDTH;
typeControl.setLayoutData(gd_type);
typeControl.setItems((String[]) repos.values().toArray(new String[]{}));
if (repository != null) {
String type = repository.getType();
if (repos.containsKey(type)) {
typeControl.setText((String) repos.get(type));
}
typeControl.setEnabled(false);
}
typeControl.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
type = typeControl.getText();
}
});
Label lblUrl = new Label(container, SWT.NONE);
lblUrl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
lblUrl.setText("URL");
final Text urlControl = new Text(container, SWT.BORDER);
urlControl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
if (repository != null && repository.has("url")) {
urlControl.setText(repository.getUrl());
}
urlControl.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
if (repository != null) {
repository.setUrl(urlControl.getText());
}
url = urlControl.getText();
}
});
Label lblName = new Label(container, SWT.NONE);
lblName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
lblName.setText("Name");
final Text nameControl = new Text(container, SWT.BORDER);
nameControl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
if (repository != null && repository.has("name")) {
nameControl.setText(repository.getName());
}
nameControl.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
if (repository != null) {
repository.setName(nameControl.getText());
}
name = nameControl.getText();
}
});
return container;
}
public Repository getRepository() {
if (repository != null) {
return repository;
}
Repository repo = RepositoryFactory.create((String) repos.getKey(type));
repo.setUrl(url);
repo.setName(name);
return repo;
}
}