| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| package org.apache.click.eclipse.ui.wizard; |
| |
| import java.text.MessageFormat; |
| import java.util.ArrayList; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.StringTokenizer; |
| |
| import org.apache.click.eclipse.ClickPlugin; |
| import org.apache.click.eclipse.ClickUtils; |
| import org.apache.click.eclipse.preferences.Template; |
| import org.apache.click.eclipse.ui.fieldassist.FieldAssistUtils; |
| import org.apache.click.eclipse.ui.fieldassist.PackageNameContentProposalProvider; |
| import org.apache.click.eclipse.ui.fieldassist.TypeNameContentProposalProvider; |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IFolder; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.IWorkspaceRoot; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jdt.core.IJavaElement; |
| import org.eclipse.jdt.core.IJavaModel; |
| import org.eclipse.jdt.core.IJavaProject; |
| import org.eclipse.jdt.core.IPackageFragment; |
| import org.eclipse.jdt.core.IPackageFragmentRoot; |
| import org.eclipse.jdt.core.IType; |
| import org.eclipse.jdt.core.JavaCore; |
| import org.eclipse.jdt.core.search.SearchEngine; |
| import org.eclipse.jdt.internal.core.JarPackageFragmentRoot; |
| import org.eclipse.jdt.internal.core.JavaProject; |
| import org.eclipse.jdt.internal.core.search.JavaSearchScope; |
| import org.eclipse.jdt.internal.ui.dialogs.PackageSelectionDialog; |
| import org.eclipse.jdt.internal.ui.dialogs.StatusInfo; |
| import org.eclipse.jdt.internal.ui.util.BusyIndicatorRunnableContext; |
| import org.eclipse.jdt.internal.ui.wizards.TypedElementSelectionValidator; |
| import org.eclipse.jdt.internal.ui.wizards.TypedViewerFilter; |
| import org.eclipse.jdt.internal.ui.wizards.buildpaths.FolderSelectionDialog; |
| import org.eclipse.jdt.ui.IJavaElementSearchConstants; |
| import org.eclipse.jdt.ui.JavaUI; |
| import org.eclipse.jface.dialogs.IDialogSettings; |
| import org.eclipse.jface.dialogs.ProgressMonitorDialog; |
| import org.eclipse.jface.fieldassist.TextContentAdapter; |
| import org.eclipse.jface.fieldassist.TextControlCreator; |
| import org.eclipse.jface.operation.IRunnableContext; |
| import org.eclipse.jface.viewers.Viewer; |
| import org.eclipse.jface.viewers.ViewerFilter; |
| import org.eclipse.jface.wizard.WizardPage; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.FocusAdapter; |
| import org.eclipse.swt.events.FocusEvent; |
| 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.Group; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.swt.widgets.Text; |
| import org.eclipse.ui.dialogs.ISelectionStatusValidator; |
| import org.eclipse.ui.dialogs.SelectionDialog; |
| import org.eclipse.ui.fieldassist.ContentAssistField; |
| import org.eclipse.ui.model.WorkbenchContentProvider; |
| import org.eclipse.ui.model.WorkbenchLabelProvider; |
| import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds; |
| |
| /** |
| * <ul> |
| * <li>TODO Reload initial values when the project is selected.</li> |
| * </ul> |
| * |
| * @author Naoki Takezoe |
| */ |
| public class NewClickPageWizardPage extends WizardPage { |
| |
| private List<Template> templates = Template.loadFromPreference(); |
| private Combo template; |
| private Text project; |
| private Button browseProject; |
| private Button createPageHTML; |
| private Text parentFolder; |
| private Button browseParent; |
| private Text pageName; |
| private Button createPageClass; |
| private Text sourceFolder; |
| private Text packageName; |
| private Text superClass; |
| private Text className; |
| private Button browseSource; |
| private Button browsePackage; |
| private Button browseSuperClass; |
| private Button addToClickXML; |
| |
| private Object selection; |
| private String initialClassName; |
| private String initialPageName; |
| private boolean insertClassName = true; |
| private TypeNameContentProposalProvider typeAssistProvider = null; |
| private PackageNameContentProposalProvider packageAssistProvider = null; |
| |
| public NewClickPageWizardPage(String pageName, Object selection, |
| String initialClassName, String initialPageName) { |
| super(pageName); |
| |
| this.selection = selection; |
| this.initialClassName = initialClassName; |
| this.initialPageName = initialPageName; |
| |
| setTitle(ClickPlugin.getString("wizard.newPage.title")); |
| setDescription(ClickPlugin.getString("wizard.newPage.description")); |
| } |
| |
| public void createControl(Composite parent) { |
| IDialogSettings settings = |
| ClickPlugin.getDefault().getDialogSettings().getSection( |
| NewClickPageWizard.SECTION_NEW_CLICK_PAGE); |
| |
| String initClassName = this.initialClassName; |
| String initPackage = ""; |
| if(this.initialClassName != null){ |
| int index = this.initialClassName.lastIndexOf('.'); |
| if(index >= 0){ |
| initPackage = this.initialClassName.substring(0, index); |
| initClassName = this.initialClassName.substring(index + 1); |
| } |
| } |
| |
| Composite composite = new Composite(parent, SWT.NULL); |
| |
| composite.setLayoutData(new GridData(GridData.FILL_BOTH)); |
| composite.setLayout(new GridLayout(1, false)); |
| |
| Composite projectPanel = new Composite(composite, SWT.NULL); |
| GridLayout layout = new GridLayout(3, false); |
| projectPanel.setLayout(layout); |
| projectPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| ClickUtils.createLabel(projectPanel, ClickPlugin.getString("wizard.newPage.project")); |
| |
| project = new Text(projectPanel, SWT.BORDER); |
| project.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| IJavaProject initProject = null; |
| |
| if(selection!=null){ |
| initProject = ClickUtils.getJavaProject(selection); |
| try { |
| if(initProject!=null && initProject.getProject().hasNature(JavaCore.NATURE_ID)){ |
| project.setText(initProject.getElementName()); |
| } |
| } catch(Exception ex){} |
| } |
| project.addModifyListener(new ModifyListener(){ |
| public void modifyText(ModifyEvent e){ |
| validate(); |
| } |
| }); |
| browseProject = new Button(projectPanel, SWT.PUSH); |
| browseProject.setText(ClickPlugin.getString("action.browse")); |
| browseProject.addSelectionListener(new SelectionAdapter(){ |
| public void widgetSelected(SelectionEvent evt){ |
| selectProject(); |
| validate(); |
| } |
| }); |
| |
| packageAssistProvider = new PackageNameContentProposalProvider(initProject); |
| typeAssistProvider = new TypeNameContentProposalProvider(initProject); |
| |
| ClickUtils.createLabel(projectPanel, ClickPlugin.getString("preferences.template") + ":"); |
| template = new Combo(projectPanel, SWT.READ_ONLY); |
| for(int i=0;i<templates.size();i++){ |
| template.add(((Template)templates.get(i)).getName()); |
| if(i==0){ |
| template.setText(((Template)templates.get(i)).getName()); |
| } |
| } |
| |
| Group htmlGroup = new Group(composite, SWT.NULL); |
| htmlGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| htmlGroup.setLayout(new GridLayout(3, false)); |
| htmlGroup.setText(ClickPlugin.getString("wizard.newPage.templateGroup")); |
| |
| createPageHTML = new Button(htmlGroup, SWT.CHECK); |
| createPageHTML.setText(ClickPlugin.getString("wizard.newPage.templateGroup.checkbox")); |
| createPageHTML.setLayoutData(createGridData(3)); |
| createPageHTML.setSelection(settings.getBoolean(NewClickPageWizard.SHOULD_CREATE_HTML)); |
| createPageHTML.addSelectionListener(new SelectionAdapter(){ |
| public void widgetSelected(SelectionEvent evt){ |
| updateHTMLGroup(); |
| validate(); |
| } |
| }); |
| |
| String initFolder = ""; |
| String initPageName = this.initialPageName; |
| if(initPageName!=null){ |
| int index = initPageName.indexOf('/'); |
| if(index >= 0){ |
| initFolder = initPageName.substring(0, index); |
| initPageName = initPageName.substring(index + 1); |
| if(!initFolder.startsWith("/")){ |
| initFolder = "/" + initFolder; |
| } |
| } |
| } |
| |
| ClickUtils.createLabel(htmlGroup, ClickPlugin.getString("wizard.newPage.templateGroup.parentFolder")); |
| parentFolder = new Text(htmlGroup, SWT.BORDER); |
| parentFolder.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| if(selection instanceof IFolder){ |
| parentFolder.setText(((IFolder)selection).getProjectRelativePath().toString() + initFolder); |
| } else if(selection!=null){ |
| IJavaProject project = ClickUtils.getJavaProject(selection); |
| if(project!=null){ |
| parentFolder.setText(ClickUtils.getWebAppRootFolder(project.getProject()) + initFolder); |
| } |
| } |
| parentFolder.addModifyListener(new ModifyListener(){ |
| public void modifyText(ModifyEvent e){ |
| validate(); |
| } |
| }); |
| |
| browseParent = new Button(htmlGroup, SWT.PUSH); |
| browseParent.setText(ClickPlugin.getString("action.browse")); |
| browseParent.addSelectionListener(new SelectionAdapter(){ |
| public void widgetSelected(SelectionEvent evt){ |
| selectFolder(); |
| } |
| }); |
| |
| ClickUtils.createLabel(htmlGroup, ClickPlugin.getString("wizard.newPage.templateGroup.filename")); |
| pageName = new Text(htmlGroup, SWT.BORDER); |
| pageName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| if(initPageName!=null){ |
| pageName.setText(initPageName); |
| } |
| pageName.addModifyListener(new ModifyListener(){ |
| public void modifyText(ModifyEvent e){ |
| if(className.getText().length()==0){ |
| insertClassName = true; |
| } |
| if(insertClassName && createPageClass.getSelection()){ |
| String page = pageName.getText(); //.replaceFirst("\\..*?$", ""); |
| int index = page.lastIndexOf('.'); |
| if(index >= 0){ |
| page = page.substring(0, index); |
| } |
| StringTokenizer tokenizer = new StringTokenizer(page, "_-"); |
| String name = ""; |
| while (tokenizer.hasMoreTokens()) { |
| String token = tokenizer.nextToken(); |
| token = Character.toUpperCase(token.charAt(0)) + token.substring(1); |
| name += token; |
| } |
| className.setText(name); |
| } |
| validate(); |
| } |
| }); |
| pageName.addFocusListener(new FocusAdapter(){ |
| public void focusLost(FocusEvent e) { |
| insertClassName = className.getText().length()==0; |
| } |
| }); |
| |
| Group classGroup = new Group(composite, SWT.NULL); |
| classGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| classGroup.setLayout(new GridLayout(3, false)); |
| classGroup.setText(ClickPlugin.getString("wizard.newPage.pageClassGroup")); |
| |
| createPageClass = new Button(classGroup, SWT.CHECK); |
| createPageClass.setText(ClickPlugin.getString("wizard.newPage.pageClassGroup.checkbox")); |
| createPageClass.setLayoutData(createGridData(3)); |
| createPageClass.setSelection(settings.getBoolean(NewClickPageWizard.SHOULD_CREATE_CLASS)); |
| createPageClass.addSelectionListener(new SelectionAdapter(){ |
| public void widgetSelected(SelectionEvent evt){ |
| updateClassGroup(); |
| validate(); |
| } |
| }); |
| |
| ClickUtils.createLabel(classGroup, ClickPlugin.getString("wizard.newPage.pageClassGroup.sourceFolder")); |
| Composite sourceField = FieldAssistUtils.createNullDecoratedPanel(classGroup, false); |
| sourceFolder = new Text(sourceField, SWT.BORDER); |
| sourceField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| sourceFolder.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| IJavaProject project = ClickUtils.getJavaProject(selection); |
| IPackageFragmentRoot root = ClickUtils.getSourceFolder(selection); |
| |
| if(root != null){ |
| sourceFolder.setText(root.getPath().makeRelativeTo(project.getPath()).toString()); |
| } else if(selection != null){ |
| try { |
| if(project!=null){ |
| IPackageFragmentRoot[] roots = project.getPackageFragmentRoots(); |
| if(roots.length >= 1){ |
| sourceFolder.setText(roots[0].getPath().makeRelativeTo(project.getPath()).toString()); |
| } |
| } |
| } catch(Exception ex){ |
| ClickPlugin.log(ex); |
| } |
| } |
| sourceFolder.addModifyListener(new ModifyListener(){ |
| public void modifyText(ModifyEvent e){ |
| validate(); |
| } |
| }); |
| |
| browseSource = new Button(classGroup, SWT.PUSH); |
| browseSource.setText(ClickPlugin.getString("action.browse")); |
| browseSource.addSelectionListener(new SelectionAdapter(){ |
| public void widgetSelected(SelectionEvent evt){ |
| selectSourceFolder(); |
| } |
| }); |
| |
| ClickUtils.createLabel(classGroup, ClickPlugin.getString("wizard.newPage.pageClassGroup.package")); |
| ContentAssistField packageField = new ContentAssistField(classGroup, SWT.BORDER, |
| new TextControlCreator(), new TextContentAdapter(), packageAssistProvider, |
| ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS, new char[0]); |
| packageName = (Text)packageField.getControl(); |
| packageField.getLayoutControl().setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| if(selection instanceof IPackageFragment){ |
| packageName.setText(((IPackageFragment)selection).getElementName()); |
| } else if(initPackage!=null && initPackage.length()!=0){ |
| packageName.setText(initPackage); |
| } else if(getProject()!=null){ |
| String pagesPackage = ClickUtils.getPagePackageName(getProject()); |
| if(pagesPackage != null){ |
| packageName.setText(pagesPackage); |
| } |
| } |
| packageName.addModifyListener(new ModifyListener(){ |
| public void modifyText(ModifyEvent e){ |
| validate(); |
| } |
| }); |
| |
| browsePackage = new Button(classGroup, SWT.PUSH); |
| browsePackage.setText(ClickPlugin.getString("action.browse")); |
| browsePackage.addSelectionListener(new SelectionAdapter(){ |
| public void widgetSelected(SelectionEvent evt){ |
| IRunnableContext context= new BusyIndicatorRunnableContext(); |
| int style = PackageSelectionDialog.F_REMOVE_DUPLICATES | |
| PackageSelectionDialog.F_SHOW_PARENTS | |
| PackageSelectionDialog.F_HIDE_DEFAULT_PACKAGE; |
| |
| JavaSearchScope scope = new JavaSearchScope(); |
| try { |
| IJavaProject project = JavaCore.create(getProject()); |
| scope.add((JavaProject)project, JavaSearchScope.SOURCES, new HashSet<Integer>(2, 1)); |
| } catch(Exception ex){ |
| ClickPlugin.log(ex); |
| } |
| |
| PackageSelectionDialog dialog = new PackageSelectionDialog(getShell(), context, style, scope); |
| dialog.setMultipleSelection(false); |
| if(dialog.open()==PackageSelectionDialog.OK){ |
| Object[] result = dialog.getResult(); |
| if(result.length >= 1){ |
| IPackageFragment fragment = (IPackageFragment)result[0]; |
| packageName.setText(fragment.getElementName()); |
| } |
| } |
| } |
| }); |
| |
| ClickUtils.createLabel(classGroup, ClickPlugin.getString("wizard.newPage.pageClassGroup.classname")); |
| Composite classField = FieldAssistUtils.createNullDecoratedPanel(classGroup, false); |
| className = new Text(classField, SWT.BORDER); |
| classField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| className.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| if(initClassName!=null){ |
| className.setText(initClassName); |
| } |
| className.addModifyListener(new ModifyListener(){ |
| public void modifyText(ModifyEvent e){ |
| validate(); |
| } |
| }); |
| |
| ClickUtils.createLabel(classGroup, ""); |
| |
| ClickUtils.createLabel(classGroup, ClickPlugin.getString("wizard.newPage.pageClassGroup.superclass")); |
| ContentAssistField superClassField = new ContentAssistField(classGroup, SWT.BORDER, |
| new TextControlCreator(), new TextContentAdapter(), typeAssistProvider, |
| ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS, new char[0]); |
| superClass = (Text)superClassField.getControl(); |
| superClassField.getLayoutControl().setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| superClass.setText(settings.get(NewClickPageWizard.SUPERCLASS)); |
| superClass.addModifyListener(new ModifyListener(){ |
| public void modifyText(ModifyEvent e){ |
| validate(); |
| } |
| }); |
| browseSuperClass = new Button(classGroup, SWT.PUSH); |
| browseSuperClass.setText(ClickPlugin.getString("action.browse")); |
| browseSuperClass.addSelectionListener(new SelectionAdapter(){ |
| public void widgetSelected(SelectionEvent evt){ |
| Shell shell = getShell(); |
| try { |
| IJavaProject project = JavaCore.create(getProject()); |
| |
| SelectionDialog dialog = JavaUI.createTypeDialog( |
| shell, new ProgressMonitorDialog(shell), |
| SearchEngine.createJavaSearchScope(new IJavaElement[]{project}), |
| IJavaElementSearchConstants.CONSIDER_CLASSES,false); |
| |
| if(dialog.open()==SelectionDialog.OK){ |
| Object[] result = dialog.getResult(); |
| superClass.setText(((IType)result[0]).getFullyQualifiedName()); |
| } |
| } catch(Exception ex){ |
| ClickPlugin.log(ex); |
| } |
| } |
| }); |
| |
| ClickUtils.createLabel(composite, ""); |
| |
| addToClickXML = new Button(composite, SWT.CHECK); |
| addToClickXML.setText(ClickPlugin.getString("wizard.newPage.addMapping")); |
| addToClickXML.setSelection(settings.getBoolean(NewClickPageWizard.SHOULD_ADD_TO_CLICK_XML)); |
| if(getProject()!=null && ClickUtils.getAutoMapping(getProject())){ |
| addToClickXML.setSelection(false); |
| } |
| |
| updateHTMLGroup(); |
| updateClassGroup(); |
| validate(); |
| setControl(composite); |
| } |
| |
| private void updateHTMLGroup(){ |
| parentFolder.setEnabled(createPageHTML.getSelection()); |
| browseParent.setEnabled(createPageHTML.getSelection()); |
| pageName.setEnabled(createPageHTML.getSelection()); |
| } |
| |
| private void updateClassGroup(){ |
| sourceFolder.setEnabled(createPageClass.getSelection()); |
| browseSource.setEnabled(createPageClass.getSelection()); |
| packageName.setEnabled(createPageClass.getSelection()); |
| browsePackage.setEnabled(createPageClass.getSelection()); |
| className.setEnabled(createPageClass.getSelection()); |
| superClass.setEnabled(createPageClass.getSelection()); |
| browseSuperClass.setEnabled(createPageClass.getSelection()); |
| } |
| |
| private void validate(){ |
| IProject project = getProject(); |
| if(project!=null){ |
| packageAssistProvider.setJavaProject(JavaCore.create(project)); |
| } |
| if(project==null){ |
| setMessage(ClickPlugin.getString("wizard.newPage.error.selectProject"), ERROR); |
| setPageComplete(false); |
| browsePackage.setEnabled(false); |
| browseParent.setEnabled(false); |
| browseSource.setEnabled(false); |
| return; |
| } else if(!ClickUtils.isClickProject(getProject())){ |
| setMessage(MessageFormat.format( |
| ClickPlugin.getString("wizard.newPage.error.notClickProject"), getProject().getName()), ERROR); |
| setPageComplete(false); |
| browsePackage.setEnabled(false); |
| browseParent.setEnabled(false); |
| browseSource.setEnabled(false); |
| return; |
| } else { |
| browsePackage.setEnabled(createPageClass.getSelection()); |
| browseParent.setEnabled(createPageClass.getSelection()); |
| browseSource.setEnabled(createPageHTML.getSelection()); |
| } |
| |
| if(createPageHTML.getSelection() || createPageClass.getSelection()){ |
| if(template.getText().length()==0){ |
| setMessage(ClickPlugin.getString("wizard.newPage.error.noTemplate"), ERROR); |
| setPageComplete(false); |
| return; |
| } |
| } |
| |
| // for the HTML file part |
| if(createPageHTML.getSelection()){ |
| if(!existsFolder(parentFolder.getText())){ |
| setMessage(MessageFormat.format( |
| ClickPlugin.getString("wizard.newPage.error.folderDoesNotExist"), parentFolder.getText()), ERROR); |
| setPageComplete(false); |
| return; |
| } else if(pageName.getText().equals("")){ |
| setMessage(ClickPlugin.getString("wizard.newPage.error.pageIsEmpty"), ERROR); |
| setPageComplete(false); |
| return; |
| } else if(existsFile(parentFolder.getText(), pageName.getText())){ |
| setMessage(ClickPlugin.getString("wizard.newPage.error.fileAlreadyExists"), ERROR); |
| setPageComplete(false); |
| return; |
| } |
| } |
| |
| // for the page class part |
| if(createPageClass.getSelection()){ |
| if(!existsFolder(sourceFolder.getText())){ |
| setMessage(MessageFormat.format( |
| ClickPlugin.getString("wizard.newPage.error.folderDoesNotExist"), sourceFolder.getText()), ERROR); |
| setPageComplete(false); |
| return; |
| } else if(!isValidPackageName(packageName.getText())){ |
| setMessage(MessageFormat.format( |
| ClickPlugin.getString("wizard.newPage.error.packageIsInvalid1"), packageName.getText()), ERROR); |
| setPageComplete(false); |
| return; |
| } else if(packageName.getText().endsWith(".")){ |
| setMessage(ClickPlugin.getString("wizard.newPage.error.packageIsInvalid2"), ERROR); |
| setPageComplete(false); |
| return; |
| } else if(className.getText().equals("")){ |
| setMessage(ClickPlugin.getString("wizard.newPage.error.typeIsEmpty"), ERROR); |
| setPageComplete(false); |
| return; |
| } else if(!isValidTypeName(className.getText())){ |
| setMessage(MessageFormat.format( |
| ClickPlugin.getString("wizard.newPage.error.typeIsInvalid"), |
| new Object[]{ className.getText() }), ERROR); |
| setPageComplete(false); |
| return; |
| } else if(existsClass(sourceFolder.getText(), packageName.getText(), className.getText())){ |
| setMessage(ClickPlugin.getString("wizard.newPage.error.typeAlreadyExists"), ERROR); |
| setPageComplete(false); |
| return; |
| } else if(packageName.getText().equals("")){ |
| setMessage(ClickPlugin.getString("wizard.newPage.error.defaultPackage"), WARNING); |
| setPageComplete(true); |
| return; |
| } |
| } |
| |
| // all valid |
| setMessage(null); |
| setPageComplete(true); |
| } |
| |
| private boolean isValidPackageName(String packageName){ |
| for(int i=0;i<packageName.length();i++){ |
| char c = packageName.charAt(i); |
| if(i==0){ |
| if(!Character.isJavaIdentifierStart(c)){ |
| return false; |
| } |
| } else { |
| if(c=='.'){ |
| continue; |
| } else if(!Character.isJavaIdentifierPart(c)){ |
| return false; |
| } |
| } |
| } |
| return true; |
| } |
| |
| private boolean isValidTypeName(String className){ |
| for(int i=0;i<className.length();i++){ |
| char c = className.charAt(i); |
| if(i==0){ |
| if(!Character.isJavaIdentifierStart(c)){ |
| return false; |
| } |
| } else { |
| if(!Character.isJavaIdentifierPart(c)){ |
| return false; |
| } |
| } |
| } |
| return true; |
| } |
| |
| private boolean existsFolder(String folder){ |
| if(folder.equals("")){ |
| return true; // TODO ?? |
| } |
| |
| IProject project = getProject(); |
| return project.getFolder(folder).exists(); |
| } |
| |
| private boolean existsFile(String parentFolder, String fileName){ |
| IProject project = getProject(); |
| IFile file = null; |
| if(parentFolder.equals("")){ |
| file = project.getFile(fileName); |
| } else { |
| file = project.getFolder(parentFolder).getFile(fileName); |
| } |
| return file.exists(); |
| } |
| |
| private boolean existsClass(String sourceFolder, String packageName, String className){ |
| try { |
| IProject project = getProject(); |
| IResource resource = project.getProject(); |
| if(!sourceFolder.equals("")){ |
| resource = project.getFolder(sourceFolder); |
| } |
| |
| IJavaProject javaProject = JavaCore.create(project); |
| IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(resource); |
| IPackageFragment fragment = root.getPackageFragment(packageName); |
| if(!fragment.exists()){ |
| return false; |
| } |
| |
| ICompilationUnit unit = fragment.getCompilationUnit(className + ".java"); |
| return unit.exists(); |
| |
| } catch(Exception ex){ |
| ex.printStackTrace(); |
| return false; |
| } |
| } |
| |
| private GridData createGridData(int colspan){ |
| GridData gd = new GridData(); |
| gd.horizontalSpan = colspan; |
| return gd; |
| } |
| |
| private void selectProject(){ |
| IWorkspaceRoot wsroot = ResourcesPlugin.getWorkspace().getRoot(); |
| |
| // required validator |
| ISelectionStatusValidator validator = new ISelectionStatusValidator(){ |
| private IStatus fgErrorStatus= new StatusInfo(IStatus.ERROR, ""); //$NON-NLS-1$ |
| private IStatus fgOKStatus= new StatusInfo(); |
| |
| public IStatus validate(Object[] selection){ |
| if(selection==null || selection.length != 1){ |
| return fgErrorStatus; |
| } |
| return fgOKStatus; |
| } |
| }; |
| |
| // select only IJavaProject |
| ViewerFilter filter = new ViewerFilter(){ |
| public boolean select(Viewer viewer, Object parentElement, Object element){ |
| try { |
| if(element instanceof IProject){ |
| if(((IProject)element).hasNature(JavaCore.NATURE_ID)){ |
| return true; |
| } |
| } |
| } catch(Exception ex){} |
| return false; |
| } |
| }; |
| |
| FolderSelectionDialog dialog = new FolderSelectionDialog( |
| getShell(), new WorkbenchLabelProvider(), new WorkbenchContentProvider()); |
| |
| dialog.setTitle(ClickPlugin.getString("wizard.newPage.dialog.selectProject")); |
| |
| dialog.setInput(wsroot); |
| dialog.setValidator(validator); |
| dialog.addFilter(filter); |
| dialog.setInitialSelection(getProject()); |
| if (dialog.open() == FolderSelectionDialog.OK) { |
| project.setText(((IProject)dialog.getFirstResult()).getName()); |
| } |
| } |
| |
| private void selectFolder() { |
| try { |
| IProject currProject = getProject(); |
| IWorkspaceRoot wsroot = ResourcesPlugin.getWorkspace().getRoot(); |
| IResource init = null; |
| if(parentFolder.getText().length()!=0){ |
| init = currProject.getFolder(parentFolder.getText()); |
| if(!init.exists()){ |
| init = null; |
| } |
| } |
| Class<?>[] acceptedClasses = new Class<?>[] { IProject.class, IFolder.class }; |
| ISelectionStatusValidator validator = new TypedElementSelectionValidator(acceptedClasses, false); |
| IProject[] allProjects = wsroot.getProjects(); |
| List<IProject> rejectedElements = new ArrayList<IProject>(allProjects.length); |
| for (int i = 0; i < allProjects.length; i++) { |
| if (!allProjects[i].equals(currProject)) { |
| rejectedElements.add(allProjects[i]); |
| } |
| } |
| ViewerFilter filter = new TypedViewerFilter(acceptedClasses, rejectedElements.toArray()); |
| |
| FolderSelectionDialog dialog = new FolderSelectionDialog( |
| getShell(), new WorkbenchLabelProvider(), new WorkbenchContentProvider()); |
| |
| dialog.setTitle(ClickPlugin.getString("wizard.newPage.dialog.selectFolder")); |
| //dialog.setMessage(HTMLPlugin.getResourceString("HTMLProjectPropertyPage.WebRoot")); |
| |
| dialog.setInput(wsroot); |
| dialog.setValidator(validator); |
| dialog.addFilter(filter); |
| dialog.setInitialSelection(init); |
| if (dialog.open() == FolderSelectionDialog.OK) { |
| parentFolder.setText(((IFolder)dialog.getFirstResult()).getProjectRelativePath().toString()); |
| } |
| |
| } catch (Throwable t) { |
| ClickPlugin.log(t); |
| } |
| } |
| |
| private void selectSourceFolder() { |
| try { |
| Class<?>[] acceptedClasses = new Class<?>[] { IJavaModel.class, IJavaProject.class, IPackageFragmentRoot.class }; |
| ISelectionStatusValidator validator = new TypedElementSelectionValidator(acceptedClasses, false); |
| |
| IPackageFragmentRoot init = null; |
| IJavaProject project = JavaCore.create(getProject()); |
| |
| IPackageFragmentRoot[] roots = project.getPackageFragmentRoots(); |
| List<IJavaElement> rejectedElements = new ArrayList<IJavaElement>(); |
| for (int i = 0; i < roots.length; i++) { |
| if (roots[i] instanceof JarPackageFragmentRoot) { |
| rejectedElements.add(roots[i]); |
| } else if(roots[i] instanceof IPackageFragmentRoot){ |
| if(((IPackageFragmentRoot)roots[i]).isArchive() || ((IPackageFragmentRoot)roots[i]).isExternal()){ |
| rejectedElements.add(roots[i]); |
| } else { |
| if(roots[i].getResource().getProjectRelativePath().toString().equals(sourceFolder.getText())){ |
| init = roots[i]; |
| } |
| } |
| } |
| } |
| IJavaModel model = (IJavaModel)project.getParent(); |
| IJavaProject[] projects = model.getJavaProjects(); |
| for(int i=0;i<projects.length;i++){ |
| if(!projects[i].equals(project)){ |
| rejectedElements.add(projects[i]); |
| } |
| } |
| |
| ViewerFilter filter = new TypedViewerFilter(acceptedClasses, rejectedElements.toArray()); |
| |
| FolderSelectionDialog dialog = new FolderSelectionDialog( |
| getShell(), new WorkbenchLabelProvider(), new WorkbenchContentProvider()); |
| |
| dialog.setTitle(ClickPlugin.getString("wizard.newPage.dialog.selectSourceFolder")); |
| //dialog.setMessage(HTMLPlugin.getResourceString("HTMLProjectPropertyPage.WebRoot")); |
| |
| dialog.setInput(model); |
| dialog.setValidator(validator); |
| dialog.addFilter(filter); |
| dialog.setInitialSelection(init); |
| if (dialog.open() == FolderSelectionDialog.OK) { |
| IPackageFragmentRoot root = (IPackageFragmentRoot) dialog.getFirstResult(); |
| sourceFolder.setText(root.getPath().makeRelativeTo(project.getPath()).toString()); |
| } |
| |
| } catch (Throwable t) { |
| ClickPlugin.log(t); |
| } |
| } |
| |
| /** |
| * Returns the wizard should create a HTML file or not. |
| * @return |
| */ |
| public boolean shouldCreateHTML(){ |
| return createPageHTML.getSelection(); |
| } |
| |
| /** |
| * Returns the project relative path of the parent folder of the HTML file. |
| * @return the project relative path of the parent folder |
| */ |
| public String getParentFolder(){ |
| return parentFolder.getText(); |
| } |
| |
| /** |
| * Returns the HTML filename. |
| * @return the HTML filename |
| */ |
| public String getFilename(){ |
| return pageName.getText(); |
| } |
| |
| public boolean shouldCreateClass(){ |
| return createPageClass.getSelection(); |
| } |
| |
| /** |
| * Returns the project relative path of the source folder of the page class. |
| * @return the project relative path of the source folder |
| */ |
| public String getSourceFolder(){ |
| return sourceFolder.getText(); |
| } |
| |
| /** |
| * Returns the package name of the page class. |
| * @return the package name |
| */ |
| public String getPackageName(){ |
| return packageName.getText(); |
| } |
| |
| /** |
| * Returns the class name of the page class. |
| * @return the class name |
| */ |
| public String getClassName(){ |
| return className.getText(); |
| } |
| |
| /** |
| * Returns the wizard should add the page mapping to click.xml or not. |
| * @return |
| */ |
| public boolean shouldAddToClickXML(){ |
| return addToClickXML.getSelection(); |
| } |
| |
| public String getSuperClass(){ |
| return superClass.getText(); |
| } |
| |
| public Template getTemplate(){ |
| return (Template)templates.get(template.getSelectionIndex()); |
| } |
| |
| public IProject getProject(){ |
| try { |
| IWorkspaceRoot wsroot = ResourcesPlugin.getWorkspace().getRoot(); |
| IProject project = wsroot.getProject(this.project.getText()); |
| if(project.hasNature(JavaCore.NATURE_ID)){ |
| return project; |
| } |
| } catch(Exception ex){ |
| } |
| return null; |
| } |
| |
| } |