blob: f8a3aef8c3cca5a90b70182d240d49f8f8a07f17 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.ui.javadocexport;
import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.StringTokenizer;
import org.eclipse.jdt.launching.JavaRuntime;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.PlatformUI;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaConventions;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.ui.JavaElementLabelProvider;
import org.eclipse.jdt.ui.JavaElementSorter;
import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
import org.eclipse.jdt.internal.ui.dialogs.StatusUtil;
import org.eclipse.jdt.internal.ui.jarpackager.CheckboxTreeAndListGroup;
import org.eclipse.jdt.internal.ui.util.SWTUtil;
public class JavadocTreeWizardPage extends JavadocWizardPage {
private CheckboxTreeAndListGroup fInputGroup;
private Text fDestinationText;
private Combo fJavadocCommandText;
private Text fDocletText;
private Text fDocletTypeText;
private Button fStandardButton;
private Button fDestinationBrowserButton;
private Button fCustomButton;
private Button fPrivateVisibility;
private Button fProtectedVisibility;
private Button fPackageVisibility;
private Button fPublicVisibility;
private Label fDocletLabel;
private Label fDocletTypeLabel;
private Label fDestinationLabel;
private CLabel fDescriptionLabel;
private String fVisibilitySelection;
private JavadocOptionsManager fStore;
private StatusInfo fJavadocStatus;
private StatusInfo fDestinationStatus;
private StatusInfo fDocletStatus;
private StatusInfo fTreeStatus;
private StatusInfo fPreferenceStatus;
private StatusInfo fWizardStatus;
private final int PREFERENCESTATUS= 0;
private final int CUSTOMSTATUS= 1;
private final int STANDARDSTATUS= 2;
private final int TREESTATUS= 3;
private final int JAVADOCSTATUS= 4;
/**
* Constructor for JavadocTreeWizardPage.
* @param pageName
*/
protected JavadocTreeWizardPage(String pageName, JavadocOptionsManager store) {
super(pageName);
setDescription(JavadocExportMessages.JavadocTreeWizardPage_javadoctreewizardpage_description);
fStore= store;
// Status variables
fJavadocStatus= new StatusInfo();
fDestinationStatus= new StatusInfo();
fDocletStatus= new StatusInfo();
fTreeStatus= new StatusInfo();
fPreferenceStatus= new StatusInfo();
fWizardStatus= store.getWizardStatus();
}
/*
* @see IDialogPage#createControl(Composite)
*/
public void createControl(Composite parent) {
initializeDialogUnits(parent);
final Composite composite= new Composite(parent, SWT.NONE);
final GridLayout layout= new GridLayout();
layout.numColumns= 6;
composite.setLayout(layout);
createJavadocCommandSet(composite);
createInputGroup(composite);
createVisibilitySet(composite);
createOptionsSet(composite);
setControl(composite);
Dialog.applyDialogFont(composite);
PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IJavaHelpContextIds.JAVADOC_TREE_PAGE);
}
protected void createJavadocCommandSet(Composite composite) {
final int numColumns= 2;
GridLayout layout= createGridLayout(numColumns);
layout.marginHeight= 0;
layout.marginWidth= 0;
Composite group = new Composite(composite, SWT.NONE);
group.setLayoutData(createGridData(GridData.FILL_HORIZONTAL, 6, 0));
group.setLayout(layout);
createLabel(group, SWT.NONE, JavadocExportMessages.JavadocTreeWizardPage_javadoccommand_label, createGridData(GridData.HORIZONTAL_ALIGN_BEGINNING, numColumns, 0));
fJavadocCommandText= createCombo(group, SWT.NONE, null, createGridData(GridData.FILL_HORIZONTAL, numColumns - 1, 0));
fJavadocCommandText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
doValidation(JAVADOCSTATUS);
}
});
final Button javadocCommandBrowserButton= createButton(group, SWT.PUSH, JavadocExportMessages.JavadocTreeWizardPage_javadoccommand_button_label, createGridData(GridData.HORIZONTAL_ALIGN_FILL, 1, 0));
SWTUtil.setButtonDimensionHint(javadocCommandBrowserButton);
javadocCommandBrowserButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
browseForJavadocCommand();
}
});
}
protected void createInputGroup(Composite composite) {
createLabel(composite, SWT.NONE, JavadocExportMessages.JavadocTreeWizardPage_checkboxtreeandlistgroup_label, createGridData(6));
Composite c= new Composite(composite, SWT.NONE);
GridLayout layout= new GridLayout();
layout.numColumns= 1;
layout.makeColumnsEqualWidth= true;
layout.marginWidth= 0;
layout.marginHeight= 0;
c.setLayout(layout);
c.setLayoutData(createGridData(GridData.FILL_HORIZONTAL, 6, 0));
ITreeContentProvider treeContentProvider= new JavadocProjectContentProvider();
ITreeContentProvider listContentProvider= new JavadocMemberContentProvider();
fInputGroup= new CheckboxTreeAndListGroup(c, this, treeContentProvider, new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT), listContentProvider, new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT), SWT.NONE, convertWidthInCharsToPixels(60), convertHeightInCharsToPixels(10));
fInputGroup.addCheckStateListener(new ICheckStateListener() {
public void checkStateChanged(CheckStateChangedEvent e) {
doValidation(TREESTATUS);
}
});
fInputGroup.setTreeSorter(new JavaElementSorter());
IJavaElement[] elements= fStore.getInitialElements();
setTreeChecked(elements);
if (elements.length > 0) {
fInputGroup.setTreeSelection(new StructuredSelection(elements[0].getJavaProject()));
}
fInputGroup.aboutToOpen();
}
private void createVisibilitySet(Composite composite) {
GridLayout visibilityLayout= createGridLayout(4);
visibilityLayout.marginHeight= 0;
visibilityLayout.marginWidth= 0;
Composite visibilityGroup= new Composite(composite, SWT.NONE);
visibilityGroup.setLayoutData(createGridData(GridData.FILL_HORIZONTAL, 6, 0));
visibilityGroup.setLayout(visibilityLayout);
createLabel(visibilityGroup, SWT.NONE, JavadocExportMessages.JavadocTreeWizardPage_visibilitygroup_label, createGridData(GridData.FILL_HORIZONTAL, 4, 0));
fPrivateVisibility= createButton(visibilityGroup, SWT.RADIO, JavadocExportMessages.JavadocTreeWizardPage_privatebutton_label, createGridData(GridData.FILL_HORIZONTAL, 1, 0));
fPackageVisibility= createButton(visibilityGroup, SWT.RADIO, JavadocExportMessages.JavadocTreeWizardPage_packagebutton_label, createGridData(GridData.FILL_HORIZONTAL, 1, 0));
fProtectedVisibility= createButton(visibilityGroup, SWT.RADIO, JavadocExportMessages.JavadocTreeWizardPage_protectedbutton_label, createGridData(GridData.FILL_HORIZONTAL, 1, 0));
fPublicVisibility= createButton(visibilityGroup, SWT.RADIO, JavadocExportMessages.JavadocTreeWizardPage_publicbutton_label, createGridData(GridData.FILL_HORIZONTAL, 1, 0));
fDescriptionLabel= new CLabel(visibilityGroup, SWT.LEFT);
fDescriptionLabel.setLayoutData(createGridData(GridData.FILL_HORIZONTAL, 4, convertWidthInCharsToPixels(3) - 3)); // INDENT of CLabel
fPrivateVisibility.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (((Button) e.widget).getSelection()) {
fVisibilitySelection= fStore.PRIVATE;
fDescriptionLabel.setText(JavadocExportMessages.JavadocTreeWizardPage_privatevisibilitydescription_label);
}
}
});
fPackageVisibility.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (((Button) e.widget).getSelection()) {
fVisibilitySelection= fStore.PACKAGE;
fDescriptionLabel.setText(JavadocExportMessages.JavadocTreeWizardPage_packagevisibledescription_label);
}
}
});
fProtectedVisibility.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (((Button) e.widget).getSelection()) {
fVisibilitySelection= fStore.PROTECTED;
fDescriptionLabel.setText(JavadocExportMessages.JavadocTreeWizardPage_protectedvisibilitydescription_label);
}
}
});
fPublicVisibility.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (((Button) e.widget).getSelection()) {
fVisibilitySelection= fStore.PUBLIC;
fDescriptionLabel.setText(JavadocExportMessages.JavadocTreeWizardPage_publicvisibilitydescription_label);
}
}
});
setVisibilitySettings();
}
protected void setVisibilitySettings() {
fVisibilitySelection= fStore.getAccess();
fPrivateVisibility.setSelection(fVisibilitySelection.equals(fStore.PRIVATE));
if (fPrivateVisibility.getSelection())
fDescriptionLabel.setText(JavadocExportMessages.JavadocTreeWizardPage_privatevisibilitydescription_label);
fProtectedVisibility.setSelection(fVisibilitySelection.equals(fStore.PROTECTED));
if (fProtectedVisibility.getSelection())
fDescriptionLabel.setText(JavadocExportMessages.JavadocTreeWizardPage_protectedvisibilitydescription_label);
fPackageVisibility.setSelection(fVisibilitySelection.equals(fStore.PACKAGE));
if (fPackageVisibility.getSelection())
fDescriptionLabel.setText(JavadocExportMessages.JavadocTreeWizardPage_packagevisibledescription_label);
fPublicVisibility.setSelection(fVisibilitySelection.equals(fStore.PUBLIC));
if (fPublicVisibility.getSelection())
fDescriptionLabel.setText(JavadocExportMessages.JavadocTreeWizardPage_publicvisibilitydescription_label);
}
private void createOptionsSet(Composite composite) {
final int numColumns= 4;
final GridLayout layout= createGridLayout(numColumns);
layout.marginHeight= 0;
layout.marginWidth= 0;
Composite group= new Composite(composite, SWT.NONE);
group.setLayoutData(createGridData(GridData.FILL_HORIZONTAL, 6, 0));
group.setLayout(layout);
fStandardButton= createButton(group, SWT.RADIO, JavadocExportMessages.JavadocTreeWizardPage_standarddocletbutton_label, createGridData(GridData.HORIZONTAL_ALIGN_FILL, numColumns, 0));
fDestinationLabel= createLabel(group, SWT.NONE, JavadocExportMessages.JavadocTreeWizardPage_destinationfield_label, createGridData(GridData.HORIZONTAL_ALIGN_FILL, 1, convertWidthInCharsToPixels(3)));
fDestinationText= createText(group, SWT.SINGLE | SWT.BORDER, null, createGridData(GridData.FILL_HORIZONTAL, numColumns - 2, 0));
((GridData) fDestinationText.getLayoutData()).widthHint= 0;
fDestinationText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
doValidation(STANDARDSTATUS);
}
});
fDestinationBrowserButton= createButton(group, SWT.PUSH, JavadocExportMessages.JavadocTreeWizardPage_destinationbrowse_label, createGridData(GridData.HORIZONTAL_ALIGN_END, 1, 0));
SWTUtil.setButtonDimensionHint(fDestinationBrowserButton);
//Option to use custom doclet
fCustomButton= createButton(group, SWT.RADIO, JavadocExportMessages.JavadocTreeWizardPage_customdocletbutton_label, createGridData(GridData.HORIZONTAL_ALIGN_FILL, numColumns, 0));
//For Entering location of custom doclet
fDocletTypeLabel= createLabel(group, SWT.NONE, JavadocExportMessages.JavadocTreeWizardPage_docletnamefield_label, createGridData(GridData.HORIZONTAL_ALIGN_BEGINNING, 1, convertWidthInCharsToPixels(3)));
fDocletTypeText= createText(group, SWT.SINGLE | SWT.BORDER, null, createGridData(GridData.HORIZONTAL_ALIGN_FILL, numColumns - 1, 0));
((GridData) fDocletTypeText.getLayoutData()).widthHint= 0;
fDocletTypeText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
doValidation(CUSTOMSTATUS);
}
});
fDocletLabel= createLabel(group, SWT.NONE, JavadocExportMessages.JavadocTreeWizardPage_docletpathfield_label, createGridData(GridData.HORIZONTAL_ALIGN_BEGINNING, 1, convertWidthInCharsToPixels(3)));
fDocletText= createText(group, SWT.SINGLE | SWT.BORDER, null, createGridData(GridData.HORIZONTAL_ALIGN_FILL, numColumns - 1, 0));
((GridData) fDocletText.getLayoutData()).widthHint= 0;
fDocletText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
doValidation(CUSTOMSTATUS);
}
});
//Add Listeners
fCustomButton.addSelectionListener(new EnableSelectionAdapter(new Control[] { fDocletLabel, fDocletText, fDocletTypeLabel, fDocletTypeText }, new Control[] { fDestinationLabel, fDestinationText, fDestinationBrowserButton }));
fCustomButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
doValidation(CUSTOMSTATUS);
}
});
fStandardButton.addSelectionListener(new EnableSelectionAdapter(new Control[] { fDestinationLabel, fDestinationText, fDestinationBrowserButton }, new Control[] { fDocletLabel, fDocletText, fDocletTypeLabel, fDocletTypeText }));
fStandardButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
doValidation(STANDARDSTATUS);
}
});
fDestinationBrowserButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
String text= handleFolderBrowseButtonPressed(fDestinationText.getText(), JavadocExportMessages.JavadocTreeWizardPage_destinationbrowsedialog_title,
JavadocExportMessages.JavadocTreeWizardPage_destinationbrowsedialog_label);
fDestinationText.setText(text);
}
});
setOptionSetSettings();
}
public boolean getCustom() {
return fCustomButton.getSelection();
}
private void setOptionSetSettings() {
if (!fStore.isFromStandard()) {
fCustomButton.setSelection(true);
fDocletText.setText(fStore.getDocletPath());
fDocletTypeText.setText(fStore.getDocletName());
fDestinationText.setText(fStore.getDestination());
fDestinationText.setEnabled(false);
fDestinationBrowserButton.setEnabled(false);
fDestinationLabel.setEnabled(false);
} else {
fStandardButton.setSelection(true);
fDestinationText.setText(fStore.getDestination());
fDocletText.setText(fStore.getDocletPath());
fDocletTypeText.setText(fStore.getDocletName());
fDocletText.setEnabled(false);
fDocletLabel.setEnabled(false);
fDocletTypeText.setEnabled(false);
fDocletTypeLabel.setEnabled(false);
}
fJavadocCommandText.setItems(fStore.getJavadocCommandHistory());
fJavadocCommandText.select(0);
}
/**
* Receives of list of elements selected by the user and passes them
* to the CheckedTree. List can contain multiple projects and elements from
* different projects. If the list of seletected elements is empty a default
* project is selected.
*/
private void setTreeChecked(IJavaElement[] sourceElements) {
for (int i= 0; i < sourceElements.length; i++) {
IJavaElement curr= sourceElements[i];
if (curr instanceof ICompilationUnit) {
fInputGroup.initialCheckListItem(curr);
} else if (curr instanceof IPackageFragment) {
fInputGroup.initialCheckTreeItem(curr);
} else if (curr instanceof IJavaProject) {
fInputGroup.initialCheckTreeItem(curr);
} else if (curr instanceof IPackageFragmentRoot) {
IPackageFragmentRoot root= (IPackageFragmentRoot) curr;
if (!root.isArchive())
fInputGroup.initialCheckTreeItem(curr);
}
}
}
private IPath[] getSourcePath(IJavaProject[] projects) {
HashSet res= new HashSet();
//loops through all projects and gets a list if of their source paths
for (int k= 0; k < projects.length; k++) {
IJavaProject iJavaProject= projects[k];
try {
IPackageFragmentRoot[] roots= iJavaProject.getPackageFragmentRoots();
for (int i= 0; i < roots.length; i++) {
IPackageFragmentRoot curr= roots[i];
if (curr.getKind() == IPackageFragmentRoot.K_SOURCE) {
IResource resource= curr.getResource();
if (resource != null) {
// Using get location is OK here. If the source folder
// isn't local we can't create Javadoc for it.
IPath p= resource.getLocation();
if (p != null) {
res.add(p);
}
}
}
}
} catch (JavaModelException e) {
JavaPlugin.log(e);
}
}
return (IPath[]) res.toArray(new IPath[res.size()]);
}
private IPath[] getClassPath(IJavaProject[] javaProjects) {
HashSet res= new HashSet();
IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
for (int j= 0; j < javaProjects.length; j++) {
IJavaProject curr= javaProjects[j];
try {
IPath outputLocation= null;
// Not really clear yet what to do here for EFS. See bug
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=113233.
// However if the output location is not local it is currently
// not part of JavaRuntime.computeDefaultRuntimeClassPath either
// so it will be simply not added to the result which would be
// correct.
IResource outputPathFolder= root.findMember(curr.getOutputLocation());
if (outputPathFolder != null)
outputLocation= outputPathFolder.getLocation();
String[] classPath= JavaRuntime.computeDefaultRuntimeClassPath(curr);
for (int i= 0; i < classPath.length; i++) {
IPath path= Path.fromOSString(classPath[i]);
if (!path.equals(outputLocation)) {
res.add(path);
}
}
} catch (CoreException e) {
JavaPlugin.log(e);
}
}
return (IPath[]) res.toArray(new IPath[res.size()]);
}
/**
* Gets a list of elements to generated javadoc for from each project.
* Javadoc can be generated for either a IPackageFragment or a ICompilationUnit.
*/
private IJavaElement[] getSourceElements(IJavaProject[] projects) {
ArrayList res= new ArrayList();
try {
Set allChecked= fInputGroup.getAllCheckedTreeItems();
Set incompletePackages= new HashSet();
for (int h= 0; h < projects.length; h++) {
IJavaProject iJavaProject= projects[h];
IPackageFragmentRoot[] roots= iJavaProject.getPackageFragmentRoots();
for (int i= 0; i < roots.length; i++) {
IPackageFragmentRoot root= roots[i];
if (root.getKind() == IPackageFragmentRoot.K_SOURCE) {
IPath rootLocation= root.getResource().getLocation();
IJavaElement[] packs= root.getChildren();
for (int k= 0; k < packs.length; k++) {
IJavaElement curr= packs[k];
if (curr.getElementType() == IJavaElement.PACKAGE_FRAGMENT) {
// default packages are always incomplete
if (curr.getElementName().length() == 0 || !allChecked.contains(curr)
|| fInputGroup.isTreeItemGreyChecked(curr) || !isAccessibleLocation(curr.getResource().getLocation(), rootLocation)) {
incompletePackages.add(curr.getElementName());
}
}
}
}
}
}
Iterator checkedElements= fInputGroup.getAllCheckedListItems();
while (checkedElements.hasNext()) {
Object element= checkedElements.next();
if (element instanceof ICompilationUnit) {
ICompilationUnit unit= (ICompilationUnit) element;
if (incompletePackages.contains(unit.getParent().getElementName())) {
res.add(unit);
}
}
}
Set addedPackages= new HashSet();
checkedElements= allChecked.iterator();
while (checkedElements.hasNext()) {
Object element= checkedElements.next();
if (element instanceof IPackageFragment) {
IPackageFragment fragment= (IPackageFragment) element;
String name= fragment.getElementName();
if (!incompletePackages.contains(name) && !addedPackages.contains(name)) {
res.add(fragment);
addedPackages.add(name);
}
}
}
} catch (JavaModelException e) {
JavaPlugin.log(e);
}
return (IJavaElement[]) res.toArray(new IJavaElement[res.size()]);
}
private boolean isAccessibleLocation(IPath packageLocation, IPath rootLocation) {
return rootLocation != null && packageLocation != null && rootLocation.isPrefixOf(packageLocation);
}
protected void updateStore(IJavaProject[] checkedProjects) {
if (fCustomButton.getSelection()) {
fStore.setDocletName(fDocletTypeText.getText());
fStore.setDocletPath(fDocletText.getText());
fStore.setFromStandard(false);
}
if (fStandardButton.getSelection()) {
fStore.setFromStandard(true);
//the destination used in javadoc generation
fStore.setDestination(fDestinationText.getText());
}
fStore.setSourcepath(getSourcePath(checkedProjects));
fStore.setClasspath(getClassPath(checkedProjects));
fStore.setAccess(fVisibilitySelection);
fStore.setSelectedElements(getSourceElements(checkedProjects));
ArrayList commands= new ArrayList();
commands.add(fJavadocCommandText.getText()); // must be first
String[] items= fJavadocCommandText.getItems();
for (int i= 0; i < items.length; i++) {
String curr= items[i];
if (!commands.contains(curr)) {
commands.add(curr);
}
}
fStore.setJavadocCommandHistory((String[]) commands.toArray(new String[commands.size()]));
}
public IJavaProject[] getCheckedProjects() {
ArrayList res= new ArrayList();
TreeItem[] treeItems= fInputGroup.getTree().getItems();
for (int i= 0; i < treeItems.length; i++) {
if (treeItems[i].getChecked()) {
Object curr= treeItems[i].getData();
if (curr instanceof IJavaProject) {
res.add(curr);
}
}
}
return (IJavaProject[]) res.toArray(new IJavaProject[res.size()]);
}
protected void doValidation(int validate) {
switch (validate) {
case PREFERENCESTATUS :
fPreferenceStatus= new StatusInfo();
fDocletStatus= new StatusInfo();
updateStatus(findMostSevereStatus());
break;
case CUSTOMSTATUS :
if (fCustomButton.getSelection()) {
fDestinationStatus= new StatusInfo();
fDocletStatus= new StatusInfo();
String doclet= fDocletTypeText.getText();
String docletPath= fDocletText.getText();
if (doclet.length() == 0) {
fDocletStatus.setError(JavadocExportMessages.JavadocTreeWizardPage_nodocletname_error);
} else if (JavaConventions.validateJavaTypeName(doclet).matches(IStatus.ERROR)) {
fDocletStatus.setError(JavadocExportMessages.JavadocTreeWizardPage_invaliddocletname_error);
} else if ((docletPath.length() == 0) || !validDocletPath(docletPath)) {
fDocletStatus.setError(JavadocExportMessages.JavadocTreeWizardPage_invaliddocletpath_error);
}
updateStatus(findMostSevereStatus());
}
break;
case STANDARDSTATUS :
if (fStandardButton.getSelection()) {
fDestinationStatus= new StatusInfo();
fDocletStatus= new StatusInfo();
String dest= fDestinationText.getText();
if (dest.length() == 0) {
fDestinationStatus.setError(JavadocExportMessages.JavadocTreeWizardPage_nodestination_error);
}
File file= new File(dest);
if (!Path.ROOT.isValidPath(dest) || file.isFile()) {
fDestinationStatus.setError(JavadocExportMessages.JavadocTreeWizardPage_invaliddestination_error);
}
if (new File(dest, "package-list").exists() || new File(dest, "index.html").exists()) //$NON-NLS-1$//$NON-NLS-2$
fDestinationStatus.setWarning(JavadocExportMessages.JavadocTreeWizardPage_warning_mayoverwritefiles);
updateStatus(findMostSevereStatus());
}
break;
case TREESTATUS :
fTreeStatus= new StatusInfo();
if (!fInputGroup.getAllCheckedListItems().hasNext())
fTreeStatus.setError(JavadocExportMessages.JavadocTreeWizardPage_invalidtreeselection_error);
updateStatus(findMostSevereStatus());
break;
case JAVADOCSTATUS:
fJavadocStatus= new StatusInfo();
String text= fJavadocCommandText.getText();
if (text.length() == 0) {
fJavadocStatus.setError(JavadocExportMessages.JavadocTreeWizardPage_javadoccmd_error_enterpath);
} else {
File file= new File(text);
if (!file.isFile()) {
fJavadocStatus.setError(JavadocExportMessages.JavadocTreeWizardPage_javadoccmd_error_notexists);
}
}
updateStatus(findMostSevereStatus());
break;
} //end switch
}
protected void browseForJavadocCommand() {
FileDialog dialog= new FileDialog(getShell());
dialog.setText(JavadocExportMessages.JavadocTreeWizardPage_javadoccmd_dialog_title);
String dirName= fJavadocCommandText.getText();
dialog.setFileName(dirName);
String selectedDirectory= dialog.open();
if (selectedDirectory != null) {
ArrayList newItems= new ArrayList();
String[] items= fJavadocCommandText.getItems();
newItems.add(selectedDirectory);
for (int i= 0; i < items.length && newItems.size() < 5; i++) { // only keep the last 5 entries
String curr= items[i];
if (!newItems.contains(curr)) {
newItems.add(curr);
}
}
fJavadocCommandText.setItems((String[]) newItems.toArray(new String[newItems.size()]));
fJavadocCommandText.select(0);
}
}
private boolean validDocletPath(String docletPath) {
StringTokenizer tokens= new StringTokenizer(docletPath, ";"); //$NON-NLS-1$
while (tokens.hasMoreTokens()) {
File file= new File(tokens.nextToken());
if (!file.exists())
return false;
}
return true;
}
/**
* Finds the most severe error (if there is one)
*/
private IStatus findMostSevereStatus() {
return StatusUtil.getMostSevere(new IStatus[] { fJavadocStatus, fPreferenceStatus, fDestinationStatus, fDocletStatus, fTreeStatus, fWizardStatus });
}
public void init() {
updateStatus(new StatusInfo());
}
public void setVisible(boolean visible) {
if (visible) {
doValidation(STANDARDSTATUS);
doValidation(CUSTOMSTATUS);
doValidation(TREESTATUS);
doValidation(PREFERENCESTATUS);
doValidation(JAVADOCSTATUS);
}
super.setVisible(visible);
}
}