Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 296456
Collapse All | Expand All

(-)src/org/eclipse/ui/internal/ide/filesystem/FileSystemStructureProvider.java (+122 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2010 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 *******************************************************************************/
11
package org.eclipse.ui.internal.ide.filesystem;
12
13
import java.io.File;
14
import java.io.FileInputStream;
15
import java.io.FileNotFoundException;
16
import java.io.IOException;
17
import java.io.InputStream;
18
import java.util.ArrayList;
19
import java.util.HashSet;
20
import java.util.List;
21
import java.util.Set;
22
23
import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
24
import org.eclipse.ui.wizards.datatransfer.IImportStructureProvider;
25
26
/**
27
 * This class provides information regarding the structure and
28
 * content of specified file system File objects.
29
 * 
30
 * class copied from org.eclipse.ui.wizards.datatransfer.FileSystemStructureProvider as its singleton
31
 */
32
public class FileSystemStructureProvider implements IImportStructureProvider {
33
34
	private Set visitedDirs;
35
36
    /* (non-Javadoc)
37
     * Method declared on IImportStructureProvider
38
     */
39
    public List getChildren(Object element) {
40
        File folder = (File) element;
41
        String[] children = folder.list();
42
        int childrenLength = children == null ? 0 : children.length;
43
        List result = new ArrayList(childrenLength);
44
45
        for (int i = 0; i < childrenLength; i++) {
46
        	File file = new File(folder, children[i]);
47
        	if(isRecursiveLink(file))
48
        		continue;
49
        	result.add(file);
50
		}
51
        
52
        return result;
53
    }
54
55
    private void initVisitedDirs(){
56
    	if(visitedDirs == null){
57
    		visitedDirs = new HashSet();
58
    	}
59
    }
60
    
61
	private boolean isRecursiveLink(File childFile) {
62
63
		if (childFile.isDirectory()) {
64
			try {
65
				String canonicalPath = childFile.getCanonicalPath();
66
				initVisitedDirs();
67
				return !visitedDirs.add(canonicalPath);
68
			} catch (IOException e) {
69
				IDEWorkbenchPlugin.log(e.getMessage(), e);
70
			}
71
		}
72
		return false;
73
	}
74
75
	/* (non-Javadoc)
76
     * Method declared on IImportStructureProvider
77
     */
78
    public InputStream getContents(Object element) {
79
        try {
80
            return new FileInputStream((File) element);
81
        } catch (FileNotFoundException e) {
82
        	IDEWorkbenchPlugin.log(e.getLocalizedMessage(), e);
83
            return null;
84
        }
85
    }
86
87
    /* (non-Javadoc)
88
     * Method declared on IImportStructureProvider
89
     */
90
    public String getFullPath(Object element) {
91
        return ((File) element).getPath();
92
    }
93
94
    /* (non-Javadoc)
95
     * Method declared on IImportStructureProvider
96
     */
97
    public String getLabel(Object element) {
98
99
        //Get the name - if it is empty then return the path as it is a file root
100
        File file = (File) element;
101
        String name = file.getName();
102
        if (name.length() == 0) {
103
			return file.getPath();
104
		}
105
        return name;
106
    }
107
108
    /* (non-Javadoc)
109
     * Method declared on IImportStructureProvider
110
     */
111
    public boolean isFolder(Object element) {
112
        return ((File) element).isDirectory();
113
    }
114
    
115
    /**
116
     * Clears the visited dir information
117
     */
118
    public void clearVisitedDirs() {
119
    	if(visitedDirs!=null)
120
    		visitedDirs.clear();
121
    }
122
}
(-)src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceImportPage1.java (-5 / +9 lines)
Lines 57-65 Link Here
57
import org.eclipse.ui.dialogs.FileSystemElement;
57
import org.eclipse.ui.dialogs.FileSystemElement;
58
import org.eclipse.ui.dialogs.WizardResourceImportPage;
58
import org.eclipse.ui.dialogs.WizardResourceImportPage;
59
import org.eclipse.ui.internal.ide.dialogs.IElementFilter;
59
import org.eclipse.ui.internal.ide.dialogs.IElementFilter;
60
import org.eclipse.ui.internal.ide.filesystem.FileSystemStructureProvider;
60
import org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog;
61
import org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog;
61
import org.eclipse.ui.model.WorkbenchContentProvider;
62
import org.eclipse.ui.model.WorkbenchContentProvider;
62
import org.eclipse.ui.wizards.datatransfer.FileSystemStructureProvider;
63
import org.eclipse.ui.wizards.datatransfer.IImportStructureProvider;
63
import org.eclipse.ui.wizards.datatransfer.IImportStructureProvider;
64
import org.eclipse.ui.wizards.datatransfer.ImportOperation;
64
import org.eclipse.ui.wizards.datatransfer.ImportOperation;
65
65
Lines 87-92 Link Here
87
87
88
    //A boolean to indicate if the user has typed anything
88
    //A boolean to indicate if the user has typed anything
89
    private boolean entryChanged = false;
89
    private boolean entryChanged = false;
90
    
91
    private FileSystemStructureProvider fileSystemStructureProvider = new FileSystemStructureProvider();
90
92
91
    // dialog store id constants
93
    // dialog store id constants
92
    private final static String STORE_SOURCE_NAMES_ID = "WizardFileSystemResourceImportPage1.STORE_SOURCE_NAMES_ID";//$NON-NLS-1$
94
    private final static String STORE_SOURCE_NAMES_ID = "WizardFileSystemResourceImportPage1.STORE_SOURCE_NAMES_ID";//$NON-NLS-1$
Lines 354-359 Link Here
354
        setSourceName(sourceNameField.getText());
356
        setSourceName(sourceNameField.getText());
355
        //Update enablements when this is selected
357
        //Update enablements when this is selected
356
        updateWidgetEnablements();
358
        updateWidgetEnablements();
359
        fileSystemStructureProvider.clearVisitedDirs();
360
        
357
    }
361
    }
358
362
359
    /**
363
    /**
Lines 482-488 Link Here
482
                if (o instanceof MinimizedFileSystemElement) {
486
                if (o instanceof MinimizedFileSystemElement) {
483
                    MinimizedFileSystemElement element = (MinimizedFileSystemElement) o;
487
                    MinimizedFileSystemElement element = (MinimizedFileSystemElement) o;
484
                    return element.getFiles(
488
                    return element.getFiles(
485
                            FileSystemStructureProvider.INSTANCE).getChildren(
489
                    		fileSystemStructureProvider).getChildren(
486
                            element);
490
                            element);
487
                }
491
                }
488
                return new Object[0];
492
                return new Object[0];
Lines 503-509 Link Here
503
		}
507
		}
504
508
505
        return selectFiles(sourceDirectory,
509
        return selectFiles(sourceDirectory,
506
                FileSystemStructureProvider.INSTANCE);
510
        		fileSystemStructureProvider);
507
    }
511
    }
508
512
509
    /**
513
    /**
Lines 516-522 Link Here
516
                if (o instanceof MinimizedFileSystemElement) {
520
                if (o instanceof MinimizedFileSystemElement) {
517
                    MinimizedFileSystemElement element = (MinimizedFileSystemElement) o;
521
                    MinimizedFileSystemElement element = (MinimizedFileSystemElement) o;
518
                    return element.getFolders(
522
                    return element.getFolders(
519
                            FileSystemStructureProvider.INSTANCE).getChildren(
523
                    		fileSystemStructureProvider).getChildren(
520
                            element);
524
                            element);
521
                }
525
                }
522
                return new Object[0];
526
                return new Object[0];
Lines 648-654 Link Here
648
     */
652
     */
649
    protected boolean importResources(List fileSystemObjects) {
653
    protected boolean importResources(List fileSystemObjects) {
650
        ImportOperation operation = new ImportOperation(getContainerFullPath(),
654
        ImportOperation operation = new ImportOperation(getContainerFullPath(),
651
                getSourceDirectory(), FileSystemStructureProvider.INSTANCE,
655
                getSourceDirectory(), fileSystemStructureProvider,
652
                this, fileSystemObjects);
656
                this, fileSystemObjects);
653
657
654
        operation.setContext(getShell());
658
        operation.setContext(getShell());

Return to bug 296456