/*******************************************************************************
* Copyright (c) 2008 Pierre-Antoine Grégoire.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Pierre-Antoine Grégoire - initial API and implementation
*******************************************************************************/
package org.org.eclipse.dws.ui.internal.wizards.pages;
import java.util.ArrayList;
import java.util.Set;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.org.eclipse.core.utils.platform.dialogs.selection.IListDialogField;
import org.org.eclipse.core.utils.platform.fields.IDialogField;
import org.org.eclipse.core.utils.platform.fields.StringDialogField;
import org.org.eclipse.core.utils.platform.wizards.StatusInfo;
import org.org.eclipse.core.utils.platform.wizards.page.WizardContentsHelper;
import org.org.eclipse.dws.core.internal.bridges.RepositoryModelPersistence;
import org.org.eclipse.dws.ui.internal.wizards.NewRepositoryWizard;
import org.org.eclipse.dws.ui.internal.wizards.WizardsMessages;
import org.org.repository.crawler.items.IFileSystemCrawledRepositorySetup;
import org.org.repository.crawler.items.mutable.AbstractCrawledRepositorySetup;
import org.org.repository.crawler.items.mutable.FileSystemCrawledRepositorySetup;
/**
* The Class FileSystemRepositoryInfosWizardPage.
*
* @author pagregoire
*/
public class FileSystemRepositoryInfosWizardPage extends AbstractRepositoryInfosWizardPage<IFileSystemCrawledRepositorySetup> {
/** The name dialog field. */
private StringDialogField nameDialogField;
/** The path dialog field. */
private StringDialogField pathDialogField;
/**
* Instantiates a new file system repository infos wizard page.
*/
public FileSystemRepositoryInfosWizardPage() {
super(WizardsMessages.FileSystemBrowsedRepositoryInfosWizardPage_id, WizardsMessages.FileSystemBrowsedRepositoryInfosWizardPage_title, WizardsMessages.FileSystemBrowsedRepositoryInfosWizardPage_description);
setColumnsNumber(1);
}
/**
* Instantiates a new file system repository infos wizard page.
*
* @param label
* the label
* @param repositorySetup
* the repository setup
*/
public FileSystemRepositoryInfosWizardPage(String label, IFileSystemCrawledRepositorySetup repositorySetup) {
this();
this.label = label;
this.repositorySetup = repositorySetup;
}
/**
* Describe.
*
* @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#describe()
*/
@Override
protected void describe() {
Composite repositoryInfocomposite = describeRepositoryInfoSection(getWizardContainer());
repositoryInfocomposite.setLayoutData(new GridData(GridData.FILL_BOTH));
Composite filtersComposite = describeGroupFiltersSection(getWizardContainer());
filtersComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
}
/**
* Describe repository info section.
*
* @param parent
* the parent
*
* @return the composite
*/
private Composite describeRepositoryInfoSection(Composite parent) {
Composite composite = WizardContentsHelper.createClientComposite(parent);
GridLayout layout = new GridLayout(3, false);
composite.setLayout(layout);
nameDialogField = new StringDialogField();
nameDialogField.setLabelText(WizardsMessages.FileSystemBrowsedRepositoryInfosWizardPage_repositoryName);
nameDialogField.setDialogFieldListener(getWizardAdapter());
nameDialogField.doFillIntoTable(composite, 3);
nameDialogField.setContentProposals(RepositoryModelPersistence.getRepositoryNameAutocompleteProposals());
pathDialogField = new StringDialogField();
pathDialogField.setLabelText(WizardsMessages.FileSystemBrowsedRepositoryInfosWizardPage_repositoryPath);
pathDialogField.setDialogFieldListener(getWizardAdapter());
pathDialogField.doFillIntoTable(composite, 2);
pathDialogField.setContentProposals(RepositoryModelPersistence.getFSBrowsedRepositoryAutocompleteProposals());
Button browseButton = new Button(composite, SWT.NONE);
browseButton.setText(WizardsMessages.FileSystemBrowsedRepositoryInfosWizardPage_browse);
browseButton.addMouseListener(new MouseListener() {
public void mouseUp(MouseEvent e) {
pathDialogField.setText(doBrowseFolders());
}
public void mouseDown(MouseEvent e) {
}
public void mouseDoubleClick(MouseEvent e) {
}
});
return composite;
}
/**
* Do browse folders.
*
* @return the string
*/
private String doBrowseFolders() {
DirectoryDialog directoryDialog = new DirectoryDialog(getShell());
String result = directoryDialog.open();
return result == null ? "" : result; //$NON-NLS-1$
}
/**
* Initialize.
*
* @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#initialize()
*/
@Override
protected void initialize() {
nameDialogField.setFocus();
if(getWizard() instanceof NewRepositoryWizard){
NewRepositoryWizard newRepositoryWizard=(NewRepositoryWizard)getWizard();
IFileSystemCrawledRepositorySetup chosenSetup=(IFileSystemCrawledRepositorySetup)newRepositoryWizard.getChosenRepositorySetup();
if(chosenSetup!=null){
this.repositorySetup=chosenSetup;
}
}
if (repositorySetup != null) {
nameDialogField.setText(repositorySetup.getId());
pathDialogField.setText(repositorySetup.getBasePath());
if (repositorySetup.getGroupFilters().size() != 0) {
setGroupFilters(repositorySetup.getGroupFilters());
getGroupFiltersDialogField().addElements(new ArrayList<Object>(getGroupFilters()));
}
} else {
getGroupFilters().add(AbstractCrawledRepositorySetup.KEEP_ALL_PATTERN);
getGroupFiltersDialogField().addElement(AbstractCrawledRepositorySetup.KEEP_ALL_PATTERN);
}
}
/**
* Touch.
*
* @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#touch()
*/
@Override
protected void touch() {
updateStatus(validate());
}
/**
* Validate.
*
* @return the i status
*
* @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#validate()
*/
@Override
protected IStatus validate() {
IStatus status = new StatusInfo();
if (nameDialogField == null || nameDialogField.getText().trim().equals("")) { //$NON-NLS-1$
status = new StatusInfo(IStatus.ERROR, WizardsMessages.FileSystemBrowsedRepositoryInfosWizardPage_inputName);
} else if (pathDialogField == null || pathDialogField.getText().trim().equals("")) { //$NON-NLS-1$
status = new StatusInfo(IStatus.ERROR, WizardsMessages.FileSystemBrowsedRepositoryInfosWizardPage_inputPath);
} else {
status = new StatusInfo(IStatus.INFO, WizardsMessages.FileSystemBrowsedRepositoryInfosWizardPage_info_startbrowsing);
label = nameDialogField.getText();
repositorySetup = new FileSystemCrawledRepositorySetup(pathDialogField.getText());
}
return status;
}
/**
* Adds the group filters.
*
* @param repositorySetup
* the repository setup
* @param filters
* the filters
*
* @return the i file system repository setup
*
* @see org.org.eclipse.dws.ui.internal.wizards.pages.AbstractRepositoryInfosWizardPage#addGroupFilters(org.org.repository.crawler.items.ICrawledRepositorySetup, java.util.Set)
*/
@Override
protected IFileSystemCrawledRepositorySetup addGroupFilters(IFileSystemCrawledRepositorySetup repositorySetup, Set<String> filters) {
FileSystemCrawledRepositorySetup fileSystemCrawledRepositorySetup = new FileSystemCrawledRepositorySetup(repositorySetup);
fileSystemCrawledRepositorySetup.setGroupFilters(filters);
return (IFileSystemCrawledRepositorySetup) fileSystemCrawledRepositorySetup.getImmutable();
}
/**
* Handle change control pressed.
*
* @param field
* the field
*
* @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#handleChangeControlPressed(org.org.eclipse.core.utils.platform.fields.IDialogField)
*/
@Override
protected void handleChangeControlPressed(IDialogField field) {
touch();
}
/**
* Handle dialog field changed.
*
* @param field
* the field
*
* @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#handleDialogFieldChanged(org.org.eclipse.core.utils.platform.fields.IDialogField)
*/
@Override
protected void handleDialogFieldChanged(IDialogField field) {
touch();
}
/**
* Handle double clicked.
*
* @param field
* the field
*
* @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#handleDoubleClicked(org.org.eclipse.core.utils.platform.dialogs.selection.IListDialogField)
*/
@Override
protected void handleDoubleClicked(IListDialogField field) {
touch();
}
/**
* Handle selection changed.
*
* @param field
* the field
*
* @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#handleSelectionChanged(org.org.eclipse.core.utils.platform.dialogs.selection.IListDialogField)
*/
@Override
protected void handleSelectionChanged(IListDialogField field) {
touch();
}
}