From easyant-commits-return-93-apmail-incubator-easyant-commits-archive=incubator.apache.org@incubator.apache.org Tue Feb 22 15:10:24 2011 Return-Path: Delivered-To: apmail-incubator-easyant-commits-archive@minotaur.apache.org Received: (qmail 5070 invoked from network); 22 Feb 2011 15:10:24 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 22 Feb 2011 15:10:24 -0000 Received: (qmail 34574 invoked by uid 500); 22 Feb 2011 15:10:23 -0000 Delivered-To: apmail-incubator-easyant-commits-archive@incubator.apache.org Received: (qmail 34553 invoked by uid 500); 22 Feb 2011 15:10:23 -0000 Mailing-List: contact easyant-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: easyant-dev@incubator.apache.org Delivered-To: mailing list easyant-commits@incubator.apache.org Received: (qmail 34546 invoked by uid 99); 22 Feb 2011 15:10:23 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 22 Feb 2011 15:10:23 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 22 Feb 2011 15:10:17 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 4909D2388C14; Tue, 22 Feb 2011 15:09:33 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1073358 [6/6] - in /incubator/easyant/easyant4e/trunk: org.apache.easyant4e.releng/ org.apache.easyant4e.releng/build-files/ org.apache.easyant4e.releng/build-files/automatedTests/ org.apache.easyant4e.tests/datas/simplejavaproject/ org.ap... Date: Tue, 22 Feb 2011 15:09:32 -0000 To: easyant-commits@incubator.apache.org From: hibou@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110222150933.4909D2388C14@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Modified: incubator/easyant/easyant4e/trunk/org.apache.easyant4e/src/org/apache/easyant4e/wizards/EasyAntImportWizardPage.java URL: http://svn.apache.org/viewvc/incubator/easyant/easyant4e/trunk/org.apache.easyant4e/src/org/apache/easyant4e/wizards/EasyAntImportWizardPage.java?rev=1073358&r1=1073357&r2=1073358&view=diff ============================================================================== --- incubator/easyant/easyant4e/trunk/org.apache.easyant4e/src/org/apache/easyant4e/wizards/EasyAntImportWizardPage.java (original) +++ incubator/easyant/easyant4e/trunk/org.apache.easyant4e/src/org/apache/easyant4e/wizards/EasyAntImportWizardPage.java Tue Feb 22 15:09:30 2011 @@ -84,563 +84,563 @@ import com.google.inject.Inject; * Inspired from WizardProjectsImportPage */ public class EasyAntImportWizardPage extends WizardPage { - - private EasyantProjectService easyantProjectService; - - @Inject - public void setEasyantProjectService(EasyantProjectService easyantProjectService) { - this.easyantProjectService = easyantProjectService; - } - - public EasyAntImportWizardPage() { - super("Import EasyAnt projects"); - setPageComplete(false); - setTitle("Import EasyAnt projects"); - setDescription("Select a directory to search for existing EasyAnt projects."); - } - - /** - * The name of the folder containing metadata information for the workspace. - */ - public static final String METADATA_FOLDER = ".metadata"; //$NON-NLS-1$ - //FIXME hard coded the folder name ? - public static final String TARGET_FOLDER = "target"; //$NON-NLS-1$ - - - private Text directoryPathField; - - private CheckboxTreeViewer projectsList; - - private ProjectRecord[] selectedProjects = new ProjectRecord[0]; - - // Keep track of the directory that we browsed to last time - // the wizard was invoked. - private static String previouslyBrowsedDirectory = ""; //$NON-NLS-1$ - - private Button browseDirectoriesButton; - - private IProject[] wsProjects; - - // The last selected path to minimize searches - private String lastPath; - // The last time that the file or folder at the selected path was modified - // to mimize searches - private long lastModified; - - /* - * (non-Javadoc) - * - * @see - * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets - * .Composite) - */ - public void createControl(Composite parent) { - - initializeDialogUnits(parent); - - Composite workArea = new Composite(parent, SWT.NONE); - setControl(workArea); - - workArea.setLayout(new GridLayout()); - workArea.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL)); - - createProjectsRoot(workArea); - createProjectsList(workArea); - createOptionsArea(workArea); - Dialog.applyDialogFont(workArea); - - } - - /** - * Create the area with the extra options. - * - * @param workArea - */ - private void createOptionsArea(Composite workArea) { - Composite optionsGroup = new Composite(workArea, SWT.NONE); - optionsGroup.setLayout(new GridLayout()); - optionsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - } - - /** - * Create the checkbox list for the found projects. - * - * @param workArea - */ - private void createProjectsList(Composite workArea) { - - Label title = new Label(workArea, SWT.NONE); - title.setText("EasyAnt Projects:"); - - Composite listComposite = new Composite(workArea, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.numColumns = 2; - layout.marginWidth = 0; - layout.makeColumnsEqualWidth = false; - listComposite.setLayout(layout); - - listComposite - .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH)); - - projectsList = new CheckboxTreeViewer(listComposite, SWT.BORDER); - GridData listData = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH); - projectsList.getControl().setLayoutData(listData); - - projectsList.setContentProvider(new ITreeContentProvider() { - public Object[] getChildren(Object parentElement) { - return null; - } - - public Object[] getElements(Object inputElement) { - return getValidProjects(); - } - - public boolean hasChildren(Object element) { - return false; - } - - public Object getParent(Object element) { - return null; - } - - public void dispose() { - - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - - }); - - projectsList.setLabelProvider(new LabelProvider() { - public String getText(Object element) { - return ((ProjectRecord) element).getProjectLabel(); - } - }); - - projectsList.addCheckStateListener(new ICheckStateListener() { - public void checkStateChanged(CheckStateChangedEvent event) { - setPageComplete(projectsList.getCheckedElements().length > 0); - } - }); - projectsList.setInput(this); - projectsList.setComparator(new ViewerComparator()); - createSelectionButtons(listComposite); - } - - /** - * Create the selection buttons in the listComposite. - * - * @param listComposite - */ - private void createSelectionButtons(Composite listComposite) { - Composite buttonsComposite = new Composite(listComposite, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.marginWidth = 0; - layout.marginHeight = 0; - buttonsComposite.setLayout(layout); - - buttonsComposite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); - - Button selectAll = new Button(buttonsComposite, SWT.PUSH); - selectAll.setText("Select All"); - selectAll.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - projectsList.setCheckedElements(selectedProjects); - setPageComplete(projectsList.getCheckedElements().length > 0); - } - }); - Dialog.applyDialogFont(selectAll); - setButtonLayoutData(selectAll); - - Button deselectAll = new Button(buttonsComposite, SWT.PUSH); - deselectAll.setText("Deselect All"); - deselectAll.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - - projectsList.setCheckedElements(new Object[0]); - setPageComplete(false); - } - }); - Dialog.applyDialogFont(deselectAll); - setButtonLayoutData(deselectAll); - - Button refresh = new Button(buttonsComposite, SWT.PUSH); - refresh.setText("Refresh"); - refresh.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - updateProjectsList(directoryPathField.getText().trim()); - } - }); - Dialog.applyDialogFont(refresh); - setButtonLayoutData(refresh); - } - - /** - * Create the area where you select the root directory for the projects. - * - * @param workArea - * Composite - */ - private void createProjectsRoot(Composite workArea) { - // project specification group - Composite projectGroup = new Composite(workArea, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.numColumns = 3; - layout.makeColumnsEqualWidth = false; - layout.marginWidth = 0; - projectGroup.setLayout(layout); - projectGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - // project location entry field - this.directoryPathField = new Text(projectGroup, SWT.BORDER); - - this.directoryPathField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); - - // browse button - browseDirectoriesButton = new Button(projectGroup, SWT.PUSH); - browseDirectoriesButton.setText("Browse"); - setButtonLayoutData(browseDirectoriesButton); - - browseDirectoriesButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - handleLocationDirectoryButtonPressed(); - } - - }); - - directoryPathField.addTraverseListener(new TraverseListener() { - public void keyTraversed(TraverseEvent e) { - if (e.detail == SWT.TRAVERSE_RETURN) { - e.doit = false; - updateProjectsList(directoryPathField.getText().trim()); - } - } - - }); - - directoryPathField.addFocusListener(new FocusAdapter() { - public void focusLost(org.eclipse.swt.events.FocusEvent e) { - updateProjectsList(directoryPathField.getText().trim()); - } - - }); - } - - /* - * (non-Javadoc) Method declared on IDialogPage. Set the focus on path - * fields when page becomes visible. - */ - public void setVisible(boolean visible) { - super.setVisible(visible); - if (visible) { - this.directoryPathField.setFocus(); - } - } - - /** - * Update the list of projects based on path. Method declared public only - * for test suite. - * - * @param path - */ - public void updateProjectsList(final String path) { - // on an empty path empty selectedProjects - if (path == null || path.length() == 0) { - setMessage("Import Projects Description"); - selectedProjects = new ProjectRecord[0]; - projectsList.refresh(true); - projectsList.setCheckedElements(selectedProjects); - setPageComplete(projectsList.getCheckedElements().length > 0); - lastPath = path; - return; - } - - final File directory = new File(path); - long modified = directory.lastModified(); - if (path.equals(lastPath) && lastModified == modified) { - // since the file/folder was not modified and the path did not - // change, no refreshing is required - return; - } - - lastPath = path; - lastModified = modified; - - // We can't access the radio button from the inner class so get the - // status beforehand - // final boolean dirSelected = - // this.projectFromDirectoryRadio.getSelection(); - try { - getContainer().run(true, true, new IRunnableWithProgress() { - - public void run(IProgressMonitor monitor) { - monitor.beginTask("Searching", 100); - selectedProjects = new ProjectRecord[0]; - Collection files = new ArrayList(); - monitor.worked(10); - if (directory.isDirectory()) { - - if (!collectProjectFilesFromDirectory(files, directory, null, monitor)) { - return; - } - Iterator filesIterator = files.iterator(); - selectedProjects = new ProjectRecord[files.size()]; - int index = 0; - monitor.worked(50); - monitor.subTask("Processing"); - while (filesIterator.hasNext()) { - File file = (File) filesIterator.next(); - ProjectRecord projectRecord = new ProjectRecord(file, lastPath); - selectedProjects[index] = projectRecord; - index++; - } - } else { - monitor.worked(60); - } - monitor.done(); - } - - }); - } catch (InvocationTargetException e) { - Activator.getEasyAntPlugin().log(IStatus.ERROR, e.getMessage()); - } catch (InterruptedException e) { - // Nothing to do if the user interrupts. - } - - projectsList.refresh(true); - projectsList.setCheckedElements(getValidProjects()); - if (getValidProjects().length < selectedProjects.length) { - setMessage("Projects in workspace", WARNING); - } else { - setMessage("Import projects description"); - } - setPageComplete(projectsList.getCheckedElements().length > 0); - } - - /** - * Display an error dialog with the specified message. - * - * @param message - * the error message - */ - protected void displayErrorDialog(String message) { - MessageDialog.openError(getContainer().getShell(), getErrorDialogTitle(), message); - } - - /** - * Get the title for an error dialog. Subclasses should override. - */ - protected String getErrorDialogTitle() { - // FIXME - return "internalErrorTitle"; - } - - /** - * Collect the list of .project files that are under directory into files. - * - * @param files - * @param directory - * @param directoriesVisited - * Set of canonical paths of directories, used as recursion guard - * @param monitor - * The monitor to report to - * @return boolean true if the operation was completed. - */ - private boolean collectProjectFilesFromDirectory(Collection files, File directory, Set directoriesVisited, - IProgressMonitor monitor) { - - if (monitor.isCanceled()) { - return false; - } - monitor.subTask("Collect project files from "+ directory.getPath()); - File[] contents = directory.listFiles(); - if (contents == null){ - return false; - } - - // Initialize recursion guard for recursive symbolic links - if (directoriesVisited == null) { - directoriesVisited = new HashSet(); - try { - directoriesVisited.add(directory.getCanonicalPath()); - } catch (IOException exception) { - Activator.getEasyAntPlugin().log(IStatus.ERROR, exception.getMessage(), exception); - } - } - // first look for EasyAnt description files - for (int i = 0; i < contents.length; i++) { - File file = contents[i]; - if (file.isFile() && file.getName().endsWith("ivy")) { - files.add(file); - }else if (contents[i].isDirectory()) { - if (!contents[i].getName().equals(METADATA_FOLDER) && !contents[i].getName().equals(TARGET_FOLDER)) { - try { - String canonicalPath = contents[i].getCanonicalPath(); - if (!directoriesVisited.add(canonicalPath)) { - // already been here --> do not recurse - continue; - } - } catch (IOException exception) { - Activator.getEasyAntPlugin().log(IStatus.ERROR, exception.getMessage(), exception); - - } - collectProjectFilesFromDirectory(files, contents[i], directoriesVisited, monitor); - } - } - } - return true; - } - /** - * The browse button has been selected. Select the location. - */ - protected void handleLocationDirectoryButtonPressed() { - DirectoryDialog dialog = new DirectoryDialog(directoryPathField.getShell()); - dialog.setMessage("Select directory to scan"); - - String dirName = directoryPathField.getText().trim(); - if (dirName.length() == 0) { - dirName = previouslyBrowsedDirectory; - } - - if (dirName.length() == 0) { - dialog.setFilterPath(Activator.getEasyAntPlugin().getPluginWorkspace().getRoot().getLocation().toOSString()); - } else { - File path = new File(dirName); - if (path.exists()) { - dialog.setFilterPath(new Path(dirName).toOSString()); - } - } - - String selectedDirectory = dialog.open(); - if (selectedDirectory != null) { - previouslyBrowsedDirectory = selectedDirectory; - directoryPathField.setText(previouslyBrowsedDirectory); - updateProjectsList(selectedDirectory); - } - - } - - - /** - * Create the selected projects - * - * @return boolean true if all project creations were - * successful. - */ - public boolean createProjects() { - final Object[] selected = projectsList.getCheckedElements(); - WorkspaceModifyOperation op = new WorkspaceModifyOperation() { - protected void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - monitor.beginTask("", selected.length); //$NON-NLS-1$ - if (monitor.isCanceled()) { - throw new OperationCanceledException(); - } - for (int i = 0; i < selected.length; i++) { - createExistingProject((ProjectRecord) selected[i], new SubProgressMonitor(monitor, 1)); - } - } finally { - monitor.done(); - } - } - }; - // run the new project creation operation - try { - getContainer().run(true, true, op); - } catch (InterruptedException e) { - return false; - } catch (InvocationTargetException e) { - // one of the steps resulted in a core exception - Throwable t = e.getTargetException(); - Activator.getEasyAntPlugin().log(IStatus.ERROR, t.getMessage(), t); - String message = "Cannot import project"; - IStatus status; - if (t instanceof CoreException) { - status = ((CoreException) t).getStatus(); - } else { - status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, 1, message, t); - } - ErrorDialog.openError(getShell(), message, null, status); - return false; - } - return true; - } - - /** - * Create the project described in record. If it is successful return true. - * - * @param record - * @return boolean true if successful - * @throws InterruptedException - */ - private IProject createExistingProject(final ProjectRecord record, IProgressMonitor monitor) - throws InvocationTargetException, InterruptedException { - return easyantProjectService.importProject(record.getDescription(), getShell(), monitor); - } - - /** - * Method used for test suite. - * - * @return CheckboxTreeViewer the viewer containing all the projects found - */ - public CheckboxTreeViewer getProjectsList() { - return projectsList; - } - - /** - * Retrieve all the projects in the current workspace. - * - * @return IProject[] array of IProject in the current workspace - */ - private IProject[] getProjectsInWorkspace() { - if (wsProjects == null) { - wsProjects = Activator.getEasyAntPlugin().getPluginWorkspace().getRoot().getProjects(); - } - return wsProjects; - } - - /** - * Get the array of valid project records that can be imported from the - * source workspace or archive, selected by the user. If a project with the - * same name exists in both the source workspace and the current workspace, - * it will not appear in the list of projects to import and thus cannot be - * selected for import. - * - * Method declared public for test suite. - * - * @return ProjectRecord[] array of projects that can be imported into the - * workspace - */ - public ProjectRecord[] getValidProjects() { - List validProjects = new ArrayList(); - for (int i = 0; i < selectedProjects.length; i++) { - if (!isProjectInWorkspace(selectedProjects[i].getProjectName())) { - validProjects.add(selectedProjects[i]); - } - } - return (ProjectRecord[]) validProjects.toArray(new ProjectRecord[validProjects.size()]); - } - - /** - * Determine if the project with the given name is in the current workspace. - * - * @param projectName - * String the project name to check - * @return boolean true if the project with the given name is in this - * workspace - */ - private boolean isProjectInWorkspace(String projectName) { - if (projectName == null) { - return false; - } - IProject[] workspaceProjects = getProjectsInWorkspace(); - for (int i = 0; i < workspaceProjects.length; i++) { - if (projectName.equals(workspaceProjects[i].getName())) { - return true; - } - } - return false; - } - + + private EasyantProjectService easyantProjectService; + + @Inject + public void setEasyantProjectService(EasyantProjectService easyantProjectService) { + this.easyantProjectService = easyantProjectService; + } + + public EasyAntImportWizardPage() { + super("Import EasyAnt projects"); + setPageComplete(false); + setTitle("Import EasyAnt projects"); + setDescription("Select a directory to search for existing EasyAnt projects."); + } + + /** + * The name of the folder containing metadata information for the workspace. + */ + public static final String METADATA_FOLDER = ".metadata"; //$NON-NLS-1$ + //FIXME hard coded the folder name ? + public static final String TARGET_FOLDER = "target"; //$NON-NLS-1$ + + + private Text directoryPathField; + + private CheckboxTreeViewer projectsList; + + private ProjectRecord[] selectedProjects = new ProjectRecord[0]; + + // Keep track of the directory that we browsed to last time + // the wizard was invoked. + private static String previouslyBrowsedDirectory = ""; //$NON-NLS-1$ + + private Button browseDirectoriesButton; + + private IProject[] wsProjects; + + // The last selected path to minimize searches + private String lastPath; + // The last time that the file or folder at the selected path was modified + // to mimize searches + private long lastModified; + + /* + * (non-Javadoc) + * + * @see + * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets + * .Composite) + */ + public void createControl(Composite parent) { + + initializeDialogUnits(parent); + + Composite workArea = new Composite(parent, SWT.NONE); + setControl(workArea); + + workArea.setLayout(new GridLayout()); + workArea.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL)); + + createProjectsRoot(workArea); + createProjectsList(workArea); + createOptionsArea(workArea); + Dialog.applyDialogFont(workArea); + + } + + /** + * Create the area with the extra options. + * + * @param workArea + */ + private void createOptionsArea(Composite workArea) { + Composite optionsGroup = new Composite(workArea, SWT.NONE); + optionsGroup.setLayout(new GridLayout()); + optionsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + } + + /** + * Create the checkbox list for the found projects. + * + * @param workArea + */ + private void createProjectsList(Composite workArea) { + + Label title = new Label(workArea, SWT.NONE); + title.setText("EasyAnt Projects:"); + + Composite listComposite = new Composite(workArea, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.numColumns = 2; + layout.marginWidth = 0; + layout.makeColumnsEqualWidth = false; + listComposite.setLayout(layout); + + listComposite + .setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH)); + + projectsList = new CheckboxTreeViewer(listComposite, SWT.BORDER); + GridData listData = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH); + projectsList.getControl().setLayoutData(listData); + + projectsList.setContentProvider(new ITreeContentProvider() { + public Object[] getChildren(Object parentElement) { + return null; + } + + public Object[] getElements(Object inputElement) { + return getValidProjects(); + } + + public boolean hasChildren(Object element) { + return false; + } + + public Object getParent(Object element) { + return null; + } + + public void dispose() { + + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + + }); + + projectsList.setLabelProvider(new LabelProvider() { + public String getText(Object element) { + return ((ProjectRecord) element).getProjectLabel(); + } + }); + + projectsList.addCheckStateListener(new ICheckStateListener() { + public void checkStateChanged(CheckStateChangedEvent event) { + setPageComplete(projectsList.getCheckedElements().length > 0); + } + }); + projectsList.setInput(this); + projectsList.setComparator(new ViewerComparator()); + createSelectionButtons(listComposite); + } + + /** + * Create the selection buttons in the listComposite. + * + * @param listComposite + */ + private void createSelectionButtons(Composite listComposite) { + Composite buttonsComposite = new Composite(listComposite, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.marginWidth = 0; + layout.marginHeight = 0; + buttonsComposite.setLayout(layout); + + buttonsComposite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); + + Button selectAll = new Button(buttonsComposite, SWT.PUSH); + selectAll.setText("Select All"); + selectAll.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + projectsList.setCheckedElements(selectedProjects); + setPageComplete(projectsList.getCheckedElements().length > 0); + } + }); + Dialog.applyDialogFont(selectAll); + setButtonLayoutData(selectAll); + + Button deselectAll = new Button(buttonsComposite, SWT.PUSH); + deselectAll.setText("Deselect All"); + deselectAll.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + + projectsList.setCheckedElements(new Object[0]); + setPageComplete(false); + } + }); + Dialog.applyDialogFont(deselectAll); + setButtonLayoutData(deselectAll); + + Button refresh = new Button(buttonsComposite, SWT.PUSH); + refresh.setText("Refresh"); + refresh.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + updateProjectsList(directoryPathField.getText().trim()); + } + }); + Dialog.applyDialogFont(refresh); + setButtonLayoutData(refresh); + } + + /** + * Create the area where you select the root directory for the projects. + * + * @param workArea + * Composite + */ + private void createProjectsRoot(Composite workArea) { + // project specification group + Composite projectGroup = new Composite(workArea, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.numColumns = 3; + layout.makeColumnsEqualWidth = false; + layout.marginWidth = 0; + projectGroup.setLayout(layout); + projectGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + // project location entry field + this.directoryPathField = new Text(projectGroup, SWT.BORDER); + + this.directoryPathField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); + + // browse button + browseDirectoriesButton = new Button(projectGroup, SWT.PUSH); + browseDirectoriesButton.setText("Browse"); + setButtonLayoutData(browseDirectoriesButton); + + browseDirectoriesButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + handleLocationDirectoryButtonPressed(); + } + + }); + + directoryPathField.addTraverseListener(new TraverseListener() { + public void keyTraversed(TraverseEvent e) { + if (e.detail == SWT.TRAVERSE_RETURN) { + e.doit = false; + updateProjectsList(directoryPathField.getText().trim()); + } + } + + }); + + directoryPathField.addFocusListener(new FocusAdapter() { + public void focusLost(org.eclipse.swt.events.FocusEvent e) { + updateProjectsList(directoryPathField.getText().trim()); + } + + }); + } + + /* + * (non-Javadoc) Method declared on IDialogPage. Set the focus on path + * fields when page becomes visible. + */ + public void setVisible(boolean visible) { + super.setVisible(visible); + if (visible) { + this.directoryPathField.setFocus(); + } + } + + /** + * Update the list of projects based on path. Method declared public only + * for test suite. + * + * @param path + */ + public void updateProjectsList(final String path) { + // on an empty path empty selectedProjects + if (path == null || path.length() == 0) { + setMessage("Import Projects Description"); + selectedProjects = new ProjectRecord[0]; + projectsList.refresh(true); + projectsList.setCheckedElements(selectedProjects); + setPageComplete(projectsList.getCheckedElements().length > 0); + lastPath = path; + return; + } + + final File directory = new File(path); + long modified = directory.lastModified(); + if (path.equals(lastPath) && lastModified == modified) { + // since the file/folder was not modified and the path did not + // change, no refreshing is required + return; + } + + lastPath = path; + lastModified = modified; + + // We can't access the radio button from the inner class so get the + // status beforehand + // final boolean dirSelected = + // this.projectFromDirectoryRadio.getSelection(); + try { + getContainer().run(true, true, new IRunnableWithProgress() { + + public void run(IProgressMonitor monitor) { + monitor.beginTask("Searching", 100); + selectedProjects = new ProjectRecord[0]; + Collection files = new ArrayList(); + monitor.worked(10); + if (directory.isDirectory()) { + + if (!collectProjectFilesFromDirectory(files, directory, null, monitor)) { + return; + } + Iterator filesIterator = files.iterator(); + selectedProjects = new ProjectRecord[files.size()]; + int index = 0; + monitor.worked(50); + monitor.subTask("Processing"); + while (filesIterator.hasNext()) { + File file = (File) filesIterator.next(); + ProjectRecord projectRecord = new ProjectRecord(file, lastPath); + selectedProjects[index] = projectRecord; + index++; + } + } else { + monitor.worked(60); + } + monitor.done(); + } + + }); + } catch (InvocationTargetException e) { + Activator.getEasyAntPlugin().log(IStatus.ERROR, e.getMessage()); + } catch (InterruptedException e) { + // Nothing to do if the user interrupts. + } + + projectsList.refresh(true); + projectsList.setCheckedElements(getValidProjects()); + if (getValidProjects().length < selectedProjects.length) { + setMessage("Projects in workspace", WARNING); + } else { + setMessage("Import projects description"); + } + setPageComplete(projectsList.getCheckedElements().length > 0); + } + + /** + * Display an error dialog with the specified message. + * + * @param message + * the error message + */ + protected void displayErrorDialog(String message) { + MessageDialog.openError(getContainer().getShell(), getErrorDialogTitle(), message); + } + + /** + * Get the title for an error dialog. Subclasses should override. + */ + protected String getErrorDialogTitle() { + // FIXME + return "internalErrorTitle"; + } + + /** + * Collect the list of .project files that are under directory into files. + * + * @param files + * @param directory + * @param directoriesVisited + * Set of canonical paths of directories, used as recursion guard + * @param monitor + * The monitor to report to + * @return boolean true if the operation was completed. + */ + private boolean collectProjectFilesFromDirectory(Collection files, File directory, Set directoriesVisited, + IProgressMonitor monitor) { + + if (monitor.isCanceled()) { + return false; + } + monitor.subTask("Collect project files from "+ directory.getPath()); + File[] contents = directory.listFiles(); + if (contents == null){ + return false; + } + + // Initialize recursion guard for recursive symbolic links + if (directoriesVisited == null) { + directoriesVisited = new HashSet(); + try { + directoriesVisited.add(directory.getCanonicalPath()); + } catch (IOException exception) { + Activator.getEasyAntPlugin().log(IStatus.ERROR, exception.getMessage(), exception); + } + } + // first look for EasyAnt description files + for (int i = 0; i < contents.length; i++) { + File file = contents[i]; + if (file.isFile() && file.getName().endsWith("ivy")) { + files.add(file); + }else if (contents[i].isDirectory()) { + if (!contents[i].getName().equals(METADATA_FOLDER) && !contents[i].getName().equals(TARGET_FOLDER)) { + try { + String canonicalPath = contents[i].getCanonicalPath(); + if (!directoriesVisited.add(canonicalPath)) { + // already been here --> do not recurse + continue; + } + } catch (IOException exception) { + Activator.getEasyAntPlugin().log(IStatus.ERROR, exception.getMessage(), exception); + + } + collectProjectFilesFromDirectory(files, contents[i], directoriesVisited, monitor); + } + } + } + return true; + } + /** + * The browse button has been selected. Select the location. + */ + protected void handleLocationDirectoryButtonPressed() { + DirectoryDialog dialog = new DirectoryDialog(directoryPathField.getShell()); + dialog.setMessage("Select directory to scan"); + + String dirName = directoryPathField.getText().trim(); + if (dirName.length() == 0) { + dirName = previouslyBrowsedDirectory; + } + + if (dirName.length() == 0) { + dialog.setFilterPath(Activator.getEasyAntPlugin().getPluginWorkspace().getRoot().getLocation().toOSString()); + } else { + File path = new File(dirName); + if (path.exists()) { + dialog.setFilterPath(new Path(dirName).toOSString()); + } + } + + String selectedDirectory = dialog.open(); + if (selectedDirectory != null) { + previouslyBrowsedDirectory = selectedDirectory; + directoryPathField.setText(previouslyBrowsedDirectory); + updateProjectsList(selectedDirectory); + } + + } + + + /** + * Create the selected projects + * + * @return boolean true if all project creations were + * successful. + */ + public boolean createProjects() { + final Object[] selected = projectsList.getCheckedElements(); + WorkspaceModifyOperation op = new WorkspaceModifyOperation() { + protected void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + try { + monitor.beginTask("", selected.length); //$NON-NLS-1$ + if (monitor.isCanceled()) { + throw new OperationCanceledException(); + } + for (int i = 0; i < selected.length; i++) { + createExistingProject((ProjectRecord) selected[i], new SubProgressMonitor(monitor, 1)); + } + } finally { + monitor.done(); + } + } + }; + // run the new project creation operation + try { + getContainer().run(true, true, op); + } catch (InterruptedException e) { + return false; + } catch (InvocationTargetException e) { + // one of the steps resulted in a core exception + Throwable t = e.getTargetException(); + Activator.getEasyAntPlugin().log(IStatus.ERROR, t.getMessage(), t); + String message = "Cannot import project"; + IStatus status; + if (t instanceof CoreException) { + status = ((CoreException) t).getStatus(); + } else { + status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, 1, message, t); + } + ErrorDialog.openError(getShell(), message, null, status); + return false; + } + return true; + } + + /** + * Create the project described in record. If it is successful return true. + * + * @param record + * @return boolean true if successful + * @throws InterruptedException + */ + private IProject createExistingProject(final ProjectRecord record, IProgressMonitor monitor) + throws InvocationTargetException, InterruptedException { + return easyantProjectService.importProject(record.getDescription(), getShell(), monitor); + } + + /** + * Method used for test suite. + * + * @return CheckboxTreeViewer the viewer containing all the projects found + */ + public CheckboxTreeViewer getProjectsList() { + return projectsList; + } + + /** + * Retrieve all the projects in the current workspace. + * + * @return IProject[] array of IProject in the current workspace + */ + private IProject[] getProjectsInWorkspace() { + if (wsProjects == null) { + wsProjects = Activator.getEasyAntPlugin().getPluginWorkspace().getRoot().getProjects(); + } + return wsProjects; + } + + /** + * Get the array of valid project records that can be imported from the + * source workspace or archive, selected by the user. If a project with the + * same name exists in both the source workspace and the current workspace, + * it will not appear in the list of projects to import and thus cannot be + * selected for import. + * + * Method declared public for test suite. + * + * @return ProjectRecord[] array of projects that can be imported into the + * workspace + */ + public ProjectRecord[] getValidProjects() { + List validProjects = new ArrayList(); + for (int i = 0; i < selectedProjects.length; i++) { + if (!isProjectInWorkspace(selectedProjects[i].getProjectName())) { + validProjects.add(selectedProjects[i]); + } + } + return (ProjectRecord[]) validProjects.toArray(new ProjectRecord[validProjects.size()]); + } + + /** + * Determine if the project with the given name is in the current workspace. + * + * @param projectName + * String the project name to check + * @return boolean true if the project with the given name is in this + * workspace + */ + private boolean isProjectInWorkspace(String projectName) { + if (projectName == null) { + return false; + } + IProject[] workspaceProjects = getProjectsInWorkspace(); + for (int i = 0; i < workspaceProjects.length; i++) { + if (projectName.equals(workspaceProjects[i].getName())) { + return true; + } + } + return false; + } + } Modified: incubator/easyant/easyant4e/trunk/org.apache.easyant4e/src/org/apache/easyant4e/wizards/ProjectRecord.java URL: http://svn.apache.org/viewvc/incubator/easyant/easyant4e/trunk/org.apache.easyant4e/src/org/apache/easyant4e/wizards/ProjectRecord.java?rev=1073358&r1=1073357&r2=1073358&view=diff ============================================================================== --- incubator/easyant/easyant4e/trunk/org.apache.easyant4e/src/org/apache/easyant4e/wizards/ProjectRecord.java (original) +++ incubator/easyant/easyant4e/trunk/org.apache.easyant4e/src/org/apache/easyant4e/wizards/ProjectRecord.java Tue Feb 22 15:09:30 2011 @@ -31,119 +31,119 @@ import org.eclipse.core.runtime.Platform import com.google.inject.Inject; public class ProjectRecord { - - private EasyantProjectService easyantProjectService; - - private String lastPath; - - private File projectSystemFile; - - public File getProjectSystemFile() { - return projectSystemFile; - } - - private String projectName; - - private boolean fromIvyDescription = false; - - private IProjectDescription description; - - public IProjectDescription getDescription() { - return description; - } - - @Inject - public void setEasyantProjectService(EasyantProjectService easyantProjectService){ - this.easyantProjectService = easyantProjectService; - } - - /** - * Create a record for a project based on the info in the file. - * - * @param file - */ - ProjectRecord(File file, String lastPath) { - Activator.getEasyAntPlugin().injectMembers(this); - this.projectSystemFile = file; - this.lastPath = lastPath; - setProjectName(); - } - - /** - * Set the name of the project based on the projectFile. - */ - private void setProjectName() { - try { - // If we don't have the project name try again - IPath path = new Path(projectSystemFile.getPath()); - if (projectName == null && !path.toOSString().endsWith("ivy")) { - // if the file is in the default location, use the directory - // name as the project name - if (isDefaultLocation(path)) { - projectName = path.segment(path.segmentCount() - 2); - description = Activator.getEasyAntPlugin().getPluginWorkspace().newProjectDescription(projectName); - } else { - description = Activator.getEasyAntPlugin().getPluginWorkspace().loadProjectDescription(path); - projectName = description.getName(); - } - - } else if (path.toOSString().endsWith("ivy")) { - fromIvyDescription = true; - // Load EasyantFile - File f = new File(path.toPortableString()); - EasyAntModuleDescriptor moduleDescriptor = easyantProjectService.getEasyAntModuleDescriptor(f); - projectName = moduleDescriptor.getName(); - description = Activator.getEasyAntPlugin().getPluginWorkspace().newProjectDescription(projectName); - if(lastPath.endsWith(projectName)){ - description.setLocation(new Path(lastPath)); - }else{ - description.setLocation(new Path(lastPath+"/"+ projectName)); - } - description.setComment(moduleDescriptor.getDescription()); - String[] newNatures= {}; - description.setNatureIds(newNatures); - } - } catch (Exception e) { - Activator.getEasyAntPlugin().log(IStatus.ERROR, e.getMessage(), e); - } - } - - /** - * Returns whether the given project description file path is in the - * default location for a project - * - * @param path - * The path to examine - * @return Whether the given path is the default location for a project - */ - private boolean isDefaultLocation(IPath path) { - // The project description file must at least be within the project, - // which is within the workspace location - if (path.segmentCount() < 2) - return false; - return path.removeLastSegments(2).toFile().equals(Platform.getLocation().toFile()); - } - - /** - * Get the name of the project - * - * @return String - */ - public String getProjectName() { - return projectName; - } - - /** - * Gets the label to be used when rendering this project record in the - * UI. - * - * @return String the label - */ - public String getProjectLabel() { - return projectName; - } - - public boolean isFromIvyDescription() { - return fromIvyDescription; - } -} \ No newline at end of file + + private EasyantProjectService easyantProjectService; + + private String lastPath; + + private File projectSystemFile; + + public File getProjectSystemFile() { + return projectSystemFile; + } + + private String projectName; + + private boolean fromIvyDescription = false; + + private IProjectDescription description; + + public IProjectDescription getDescription() { + return description; + } + + @Inject + public void setEasyantProjectService(EasyantProjectService easyantProjectService){ + this.easyantProjectService = easyantProjectService; + } + + /** + * Create a record for a project based on the info in the file. + * + * @param file + */ + ProjectRecord(File file, String lastPath) { + Activator.getEasyAntPlugin().injectMembers(this); + this.projectSystemFile = file; + this.lastPath = lastPath; + setProjectName(); + } + + /** + * Set the name of the project based on the projectFile. + */ + private void setProjectName() { + try { + // If we don't have the project name try again + IPath path = new Path(projectSystemFile.getPath()); + if (projectName == null && !path.toOSString().endsWith("ivy")) { + // if the file is in the default location, use the directory + // name as the project name + if (isDefaultLocation(path)) { + projectName = path.segment(path.segmentCount() - 2); + description = Activator.getEasyAntPlugin().getPluginWorkspace().newProjectDescription(projectName); + } else { + description = Activator.getEasyAntPlugin().getPluginWorkspace().loadProjectDescription(path); + projectName = description.getName(); + } + + } else if (path.toOSString().endsWith("ivy")) { + fromIvyDescription = true; + // Load EasyantFile + File f = new File(path.toPortableString()); + EasyAntModuleDescriptor moduleDescriptor = easyantProjectService.getEasyAntModuleDescriptor(f); + projectName = moduleDescriptor.getName(); + description = Activator.getEasyAntPlugin().getPluginWorkspace().newProjectDescription(projectName); + if(lastPath.endsWith(projectName)){ + description.setLocation(new Path(lastPath)); + }else{ + description.setLocation(new Path(lastPath+"/"+ projectName)); + } + description.setComment(moduleDescriptor.getDescription()); + String[] newNatures= {}; + description.setNatureIds(newNatures); + } + } catch (Exception e) { + Activator.getEasyAntPlugin().log(IStatus.ERROR, e.getMessage(), e); + } + } + + /** + * Returns whether the given project description file path is in the + * default location for a project + * + * @param path + * The path to examine + * @return Whether the given path is the default location for a project + */ + private boolean isDefaultLocation(IPath path) { + // The project description file must at least be within the project, + // which is within the workspace location + if (path.segmentCount() < 2) + return false; + return path.removeLastSegments(2).toFile().equals(Platform.getLocation().toFile()); + } + + /** + * Get the name of the project + * + * @return String + */ + public String getProjectName() { + return projectName; + } + + /** + * Gets the label to be used when rendering this project record in the + * UI. + * + * @return String the label + */ + public String getProjectLabel() { + return projectName; + } + + public boolean isFromIvyDescription() { + return fromIvyDescription; + } +} Modified: incubator/easyant/easyant4e/trunk/quality/checkstyle/checkstyle-suppress.xml URL: http://svn.apache.org/viewvc/incubator/easyant/easyant4e/trunk/quality/checkstyle/checkstyle-suppress.xml?rev=1073358&r1=1073357&r2=1073358&view=diff ============================================================================== --- incubator/easyant/easyant4e/trunk/quality/checkstyle/checkstyle-suppress.xml (original) +++ incubator/easyant/easyant4e/trunk/quality/checkstyle/checkstyle-suppress.xml Tue Feb 22 15:09:30 2011 @@ -19,5 +19,5 @@ limitations under the License. --> - - \ No newline at end of file + + Modified: incubator/easyant/easyant4e/trunk/quality/checkstyle/checkstyle-text.xsl URL: http://svn.apache.org/viewvc/incubator/easyant/easyant4e/trunk/quality/checkstyle/checkstyle-text.xsl?rev=1073358&r1=1073357&r2=1073358&view=diff ============================================================================== --- incubator/easyant/easyant4e/trunk/quality/checkstyle/checkstyle-text.xsl (original) +++ incubator/easyant/easyant4e/trunk/quality/checkstyle/checkstyle-text.xsl Tue Feb 22 15:09:30 2011 @@ -28,4 +28,3 @@ - Modified: incubator/easyant/easyant4e/trunk/quality/checkstyle/checkstyle-xdoc.xsl URL: http://svn.apache.org/viewvc/incubator/easyant/easyant4e/trunk/quality/checkstyle/checkstyle-xdoc.xsl?rev=1073358&r1=1073357&r2=1073358&view=diff ============================================================================== --- incubator/easyant/easyant4e/trunk/quality/checkstyle/checkstyle-xdoc.xsl (original) +++ incubator/easyant/easyant4e/trunk/quality/checkstyle/checkstyle-xdoc.xsl Tue Feb 22 15:09:30 2011 @@ -125,4 +125,3 @@ -