Changeset 1215

Show
Ignore:
Timestamp:
11/01/07 15:57:00 (1 year ago)
Author:
nozawa
Message:

#183 refactor chooseContainer method.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • org.jalcedo.generator/trunk/org.jalcedo.generator.beans.ui/src/org/jalcedo/generator/beans/ui/internal/resource/messages.properties

    r1128 r1215  
    2323InputPackagePage.title=Select package 
    2424InputPackagePage.description=Select package which is target of this template. 
     25InputPackagePage.chooseSourceFolder.title=Source Folder Selection 
     26InputPackagePage.chooseSourceFolder.message=Choose a source folder: 
     27InputPackagePage.chooseSourceFolder.emptyMessage=Cannot find source folder to select. 
  • org.jalcedo.generator/trunk/org.jalcedo.generator.beans.ui/src/org/jalcedo/generator/beans/ui/wizardpages/InputPackagePage.java

    r1212 r1215  
    1414import java.util.List; 
    1515 
    16 import org.eclipse.core.resources.ResourcesPlugin; 
    17 import org.eclipse.core.runtime.IPath; 
    1816import org.eclipse.core.runtime.IStatus; 
    1917import org.eclipse.jdt.core.IJavaElement; 
    20 import org.eclipse.jdt.core.IJavaModel; 
    2118import org.eclipse.jdt.core.IJavaProject; 
    2219import org.eclipse.jdt.core.IPackageFragment; 
    2320import org.eclipse.jdt.core.IPackageFragmentRoot; 
    24 import org.eclipse.jdt.core.JavaCore; 
    2521import org.eclipse.jdt.core.JavaModelException; 
    26 import org.eclipse.jdt.internal.ui.JavaPlugin; 
    27 import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages; 
    28 import org.eclipse.jdt.internal.ui.wizards.TypedElementSelectionValidator; 
    29 import org.eclipse.jdt.internal.ui.wizards.TypedViewerFilter; 
    30 import org.eclipse.jdt.ui.JavaElementComparator; 
    3122import org.eclipse.jdt.ui.JavaElementLabelProvider; 
    32 import org.eclipse.jdt.ui.StandardJavaElementContentProvider; 
    3323import org.eclipse.jdt.ui.wizards.NewTypeWizardPage; 
    34 import org.eclipse.jface.viewers.ILabelProvider; 
    3524import org.eclipse.jface.viewers.IStructuredSelection; 
    36 import org.eclipse.jface.viewers.Viewer; 
    37 import org.eclipse.jface.viewers.ViewerFilter; 
    3825import org.eclipse.jface.window.Window; 
    3926import org.eclipse.swt.SWT; 
    4027import org.eclipse.swt.layout.GridLayout; 
    4128import org.eclipse.swt.widgets.Composite; 
    42 import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; 
     29import org.eclipse.ui.dialogs.ElementListSelectionDialog; 
    4330import org.jalcedo.generator.beans.StatusChangeListener; 
    4431import org.jalcedo.generator.beans.ui.internal.resource.Messages; 
     
    5845 
    5946public class InputPackagePage extends NewTypeWizardPage { 
    60     private final static String PAGE_NAME = "InputPackagePage"; 
     47    private final static String PAGE_NAME = "InputPackagePage"; //$NON-NLS-1$ 
    6148    private List<StatusChangeListener> listeners = new ArrayList<StatusChangeListener>(); 
    6249 
     
    204191    } 
    205192 
    206     // TODO this method is copied from NewContainerWizardPage. Refactor thid 
    207     // method. 
     193    /** 
     194     * プロジェクトの持つ source package fragment root を取得する. 
     195     *  
     196     * @param javaProject 
     197     * @return 
     198     */ 
     199    private IJavaElement[] findSourceFolders(IJavaProject javaProject) { 
     200 
     201        List<IPackageFragmentRoot> rootList = new ArrayList<IPackageFragmentRoot>(); 
     202        try { 
     203            for (IPackageFragmentRoot root : javaProject 
     204                    .getPackageFragmentRoots()) { 
     205                if (root.getKind() == IPackageFragmentRoot.K_SOURCE) { 
     206                    rootList.add(root); 
     207                } 
     208            } 
     209        } catch (JavaModelException e) { 
     210            // TODO Auto-generated catch block 
     211            e.printStackTrace(); 
     212        } 
     213 
     214        return rootList.toArray(new IPackageFragmentRoot[rootList.size()]); 
     215    } 
     216 
     217    /* 
     218     * (non-Javadoc) 
     219     *  
     220     * @see org.eclipse.jdt.ui.wizards.NewContainerWizardPage#chooseContainer() 
     221     */ 
    208222    @Override 
    209223    protected IPackageFragmentRoot chooseContainer() { 
    210         IJavaElement initElement = getPackageFragmentRoot(); 
    211         Class[] acceptedClasses = new Class[] { IPackageFragmentRoot.class, 
    212                 IJavaProject.class }; 
    213         TypedElementSelectionValidator validator = new TypedElementSelectionValidator( 
    214                 acceptedClasses, false) { 
    215             public boolean isSelectedValid(Object element) { 
    216                 try { 
    217                     if (element instanceof IJavaProject) { 
    218                         IJavaProject jproject = (IJavaProject) element; 
    219                         IPath path = jproject.getProject().getFullPath(); 
    220                         return (jproject.findPackageFragmentRoot(path) != null); 
    221                     } else if (element instanceof IPackageFragmentRoot) { 
    222                         return (((IPackageFragmentRoot) element).getKind() == IPackageFragmentRoot.K_SOURCE); 
    223                     } 
    224                     return true; 
    225                 } catch (JavaModelException e) { 
    226                     JavaPlugin.log(e.getStatus()); // just log, no UI in 
    227                     // validation 
    228                 } 
    229                 return false; 
    230             } 
    231         }; 
    232  
    233         acceptedClasses = new Class[] { IJavaModel.class, 
    234                 IPackageFragmentRoot.class, IJavaProject.class }; 
    235         ViewerFilter filter = new TypedViewerFilter(acceptedClasses) { 
    236             public boolean select(Viewer viewer, Object parent, Object element) { 
    237                 if (element instanceof IJavaProject) { 
    238                     IJavaProject jp = (IJavaProject) element; 
    239                     if (!getJavaProject().equals(jp)) { 
    240                         return false; 
    241                     } 
    242                 } 
    243  
    244                 if (element instanceof IPackageFragmentRoot) { 
    245                     try { 
    246                         IPackageFragmentRoot root = (IPackageFragmentRoot) element; 
    247                         return (root.getKind() == IPackageFragmentRoot.K_SOURCE); 
    248                     } catch (JavaModelException e) { 
    249                         JavaPlugin.log(e.getStatus()); // just log, no UI in 
    250                         // validation 
    251                         return false; 
    252                     } 
    253                 } 
    254                 return super.select(viewer, parent, element); 
    255                 // return false; 
    256             } 
    257         }; 
    258  
    259         StandardJavaElementContentProvider provider = new StandardJavaElementContentProvider(); 
    260         ILabelProvider labelProvider = new JavaElementLabelProvider( 
    261                 JavaElementLabelProvider.SHOW_DEFAULT); 
    262         ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog( 
    263                 getShell(), labelProvider, provider); 
    264         dialog.setValidator(validator); 
    265         dialog.setComparator(new JavaElementComparator()); 
    266         dialog 
    267                 .setTitle(NewWizardMessages.NewContainerWizardPage_ChooseSourceContainerDialog_title); 
    268         dialog 
    269                 .setMessage(NewWizardMessages.NewContainerWizardPage_ChooseSourceContainerDialog_description); 
    270         dialog.addFilter(filter); 
    271         dialog.setInput(JavaCore.create(ResourcesPlugin.getWorkspace() 
    272                 .getRoot())); 
    273         dialog.setInitialSelection(initElement); 
     224        IPackageFragmentRoot defaultRoot = getPackageFragmentRoot(); 
     225        IJavaElement[] roots = findSourceFolders(getJavaProject()); 
     226 
     227        if (roots == null) { 
     228            roots = new IJavaElement[0]; 
     229        } 
     230 
     231        ElementListSelectionDialog dialog = new ElementListSelectionDialog( 
     232                getShell(), new JavaElementLabelProvider( 
     233                        JavaElementLabelProvider.SHOW_DEFAULT)); 
     234        dialog.setIgnoreCase(false); 
     235        dialog.setTitle(Messages 
     236                .getString("InputPackagePage.chooseSourceFolder.title")); //$NON-NLS-1$ 
     237        dialog.setMessage(Messages 
     238                .getString("InputPackagePage.chooseSourceFolder.message")); //$NON-NLS-1$ 
     239        dialog.setEmptyListMessage(Messages 
     240                .getString("InputPackagePage.chooseSourceFolder.emptyMessage")); //$NON-NLS-1$ 
     241        dialog.setElements(roots); 
    274242        dialog.setHelpAvailable(false); 
    275243 
     244        if (defaultRoot != null) { 
     245            dialog.setInitialSelections(new Object[] { defaultRoot }); 
     246        } 
     247 
    276248        if (dialog.open() == Window.OK) { 
    277             Object element = dialog.getFirstResult(); 
    278             if (element instanceof IJavaProject) { 
    279                 IJavaProject jproject = (IJavaProject) element; 
    280                 return jproject.getPackageFragmentRoot(jproject.getProject()); 
    281             } else if (element instanceof IPackageFragmentRoot) { 
    282                 return (IPackageFragmentRoot) element; 
    283             } 
    284             return null; 
     249            return (IPackageFragmentRoot) dialog.getFirstResult(); 
    285250        } 
    286251        return null; 
    287252    } 
     253 
    288254}