diff options
author | Patrik Suzzi | 2013-10-29 21:05:46 +0000 |
---|---|---|
committer | Lars Vogel | 2013-11-04 14:11:58 +0000 |
commit | 30bf45a1875855bc48e1ef09fd4d1997453320b7 (patch) | |
tree | b11d2818b45051b513093530d2d9dfa4ecfbd5df | |
parent | a85b4f59a061f6b7b439b8b64c71d3982dbe682c (diff) | |
download | org.eclipse.e4.tools-30bf45a1875855bc48e1ef09fd4d1997453320b7.tar.gz org.eclipse.e4.tools-30bf45a1875855bc48e1ef09fd4d1997453320b7.tar.xz org.eclipse.e4.tools-30bf45a1875855bc48e1ef09fd4d1997453320b7.zip |
Bug 417008 - creating a new handler class overwrites an existing classI20131108-0930I20131107-2200I20131106-2200I20131105-2200I20131104-2200
Change-Id: I09cd8b69fca44ca03f6776d5b788b706d4226551
Signed-off-by: Patrik Suzzi <psuzzi@gmail.com>
-rw-r--r-- | bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java | 109 |
1 files changed, 70 insertions, 39 deletions
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java index 6c728526..3cbd9364 100644 --- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java +++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/classes/AbstractNewClassPage.java @@ -20,11 +20,15 @@ import org.eclipse.core.databinding.UpdateValueStrategy; import org.eclipse.core.databinding.beans.BeanProperties; import org.eclipse.core.databinding.conversion.Converter; import org.eclipse.core.databinding.validation.IValidator; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.e4.internal.tools.ToolsPlugin; +import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaModel; import org.eclipse.jdt.core.IJavaProject; @@ -107,43 +111,62 @@ public abstract class AbstractNewClassPage extends WizardPage { public void removePropertyChangeListener(PropertyChangeListener listener) { support.removePropertyChangeListener(listener); } + + public static boolean exists(IPackageFragmentRoot pFragmentRoot, IPackageFragment pPackageFragment, String pName){ + + if( pFragmentRoot==null ) + return false; + + String cuName = pName + ".java"; + IFile file; + + if( pPackageFragment != null ) { + ICompilationUnit unit = pPackageFragment.getCompilationUnit(cuName); + IResource resource = unit.getResource(); + file = (IFile) resource; + } else { + IFolder p = (IFolder) pFragmentRoot.getResource(); + file = p.getFile(cuName); + } + return file.exists(); + } } private JavaClass clazz; private IPackageFragmentRoot froot; - private IWorkspaceRoot fWorkspaceRoot; + private final IWorkspaceRoot fWorkspaceRoot; private String initialString; - + protected AbstractNewClassPage(String pageName, String title, String description, IPackageFragmentRoot froot, IWorkspaceRoot fWorkspaceRoot) { super(pageName); this.froot = froot; this.fWorkspaceRoot = fWorkspaceRoot; - + setTitle(title); setDescription(description); } - + protected AbstractNewClassPage(String pageName, String title, String description, IPackageFragmentRoot froot, IWorkspaceRoot fWorkspaceRoot, String initialString){ this(pageName,title,description,froot,fWorkspaceRoot); this.initialString=initialString; } - + public void createControl(Composite parent) { final Image img = new Image(parent.getDisplay(), getClass().getClassLoader().getResourceAsStream("/icons/full/wizban/newclass_wiz.png")); setImageDescriptor(ImageDescriptor.createFromImage(img)); - + parent.addDisposeListener(new DisposeListener() { - + public void widgetDisposed(DisposeEvent e) { img.dispose(); setImageDescriptor(null); } }); - parent = new Composite(parent, SWT.NULL); + parent = new Composite(parent, SWT.NULL); parent.setLayoutData(new GridData(GridData.FILL_BOTH)); parent.setLayout(new GridLayout(3, false)); - + clazz = createInstance(); if ((froot!=null)&&(initialString!=null)){ clazz.setPackageFragment(froot.getPackageFragment(parseInitialStringForPackage(initialString)==null?"":parseInitialStringForPackage(initialString))); @@ -151,7 +174,7 @@ public abstract class AbstractNewClassPage extends WizardPage { } DataBindingContext dbc = new DataBindingContext(); WizardPageSupport.create(this, dbc); - + { Label l = new Label(parent, SWT.NONE); l.setText("Source folder"); @@ -159,11 +182,11 @@ public abstract class AbstractNewClassPage extends WizardPage { Text t = new Text(parent, SWT.BORDER); t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); t.setEditable(false); - + final Binding bd = dbc.bindValue( - WidgetProperties.text().observe(t), - BeanProperties.value("fragmentRoot").observe(clazz), - new UpdateValueStrategy().setBeforeSetValidator(new PFRootValidator()), + WidgetProperties.text().observe(t), + BeanProperties.value("fragmentRoot").observe(clazz), + new UpdateValueStrategy().setBeforeSetValidator(new PFRootValidator()), new UpdateValueStrategy().setConverter(new PackageFragmentRootToStringConverter()) ); @@ -175,9 +198,9 @@ public abstract class AbstractNewClassPage extends WizardPage { IPackageFragmentRoot root = choosePackageRoot(); if( root != null ) { froot = root; - clazz.setFragmentRoot(root); + clazz.setFragmentRoot(root); } - bd.updateModelToTarget(); + bd.updateModelToTarget(); } }); } @@ -189,12 +212,12 @@ public abstract class AbstractNewClassPage extends WizardPage { t.setEditable(true); t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); final Binding bd = dbc.bindValue( - WidgetProperties.text(SWT.Modify).observe(t), + WidgetProperties.text(SWT.Modify).observe(t), BeanProperties.value("packageFragment").observe(clazz), - new UpdateValueStrategy().setConverter(new StringToPackageFragmentConverter(clazz)), + new UpdateValueStrategy().setConverter(new StringToPackageFragmentConverter(clazz)), new UpdateValueStrategy().setConverter(new PackageFragmentToStringConverter()) ); - + Button b = new Button(parent, SWT.PUSH); b.setText("Browse ..."); b.addSelectionListener(new SelectionAdapter() { @@ -202,7 +225,7 @@ public abstract class AbstractNewClassPage extends WizardPage { public void widgetSelected(SelectionEvent e) { IPackageFragment fragment = choosePackage(); if( fragment != null ) { - clazz.setPackageFragment(fragment); + clazz.setPackageFragment(fragment); } bd.updateModelToTarget(); //TODO Find out why this is needed } @@ -217,8 +240,8 @@ public abstract class AbstractNewClassPage extends WizardPage { Text t = new Text(parent, SWT.BORDER); t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - dbc.bindValue(textProp.observe(t), BeanProperties.value("name", String.class).observe(clazz), - new UpdateValueStrategy().setBeforeSetValidator(new ClassnameValidator()),null); + dbc.bindValue(textProp.observe(t), BeanProperties.value("name", String.class).observe(clazz), + new UpdateValueStrategy().setBeforeSetValidator(new ClassnameValidator(clazz)),null); new Label(parent, SWT.NONE); } @@ -227,17 +250,17 @@ public abstract class AbstractNewClassPage extends WizardPage { Label l = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL); l.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, false, false, 3, 1)); } - + createFields(parent, dbc); setControl(parent); } - + private String parseInitialStringForPackage(String initialString2) { if (initialString2==null) return null; int ioBC = initialString2.indexOf("bundleclass://"); int iSecondSlash = initialString2.lastIndexOf('/'); if ( - + (initialString2.length()==0)||//empty (ioBC==-1)||//no bundle class (iSecondSlash==-1)||//no package &| class name @@ -250,13 +273,13 @@ public abstract class AbstractNewClassPage extends WizardPage { String packageString = initialString2.substring(iSecondSlash+1, lastDot); return packageString; } - + private String parseInitialStringForClassName(String initialString){ if (initialString==null) return null; int ioBC = initialString.indexOf("bundleclass://"); int iSecondSlash = initialString.lastIndexOf('/'); if ( - + (initialString.length()==0)||//empty (ioBC==-1)||//no bundle class (iSecondSlash==-1)||//no package &| class name @@ -332,7 +355,7 @@ public abstract class AbstractNewClassPage extends WizardPage { } return null; } - + private IPackageFragment choosePackage() { IJavaElement[] packages= null; try { @@ -371,27 +394,35 @@ public abstract class AbstractNewClassPage extends WizardPage { public JavaClass getClazz() { return clazz; } - + static class ClassnameValidator implements IValidator { + private final JavaClass clazz; + + public ClassnameValidator(JavaClass clazz) { + this.clazz = clazz; + } + public IStatus validate(Object value) { String name = value.toString(); if (name.length()==0) return new Status(IStatus.ERROR,ToolsPlugin.PLUGIN_ID,"Name must not be empty"); if ((name.indexOf('.')!=-1)||(name.trim().indexOf(' ')!=-1)) return new Status(IStatus.ERROR,ToolsPlugin.PLUGIN_ID,"Name must not be qualified or contain spaces"); + if( JavaClass.exists(clazz.getFragmentRoot(), clazz.getPackageFragment(), name) ) + return new Status(IStatus.ERROR,ToolsPlugin.PLUGIN_ID,"Java Class already exists"); return JavaConventions.validateJavaTypeName(name,JavaCore.VERSION_1_3,JavaCore.VERSION_1_3); } } - + static class PFRootValidator implements IValidator { public IStatus validate(Object value) { String name = value.toString(); if (name.length()==0) return new Status(IStatus.ERROR,ToolsPlugin.PLUGIN_ID,"Source folder must not be empty"); - + return new Status(IStatus.OK,ToolsPlugin.PLUGIN_ID,""); } @@ -411,13 +442,13 @@ public abstract class AbstractNewClassPage extends WizardPage { return f.getPath().makeRelative().toString(); } } - + static class PackageFragmentToStringConverter extends Converter { public PackageFragmentToStringConverter() { super(IPackageFragment.class, String.class); } - + public Object convert(Object fromObject) { if( fromObject == null ) { return ""; @@ -426,24 +457,24 @@ public abstract class AbstractNewClassPage extends WizardPage { return f.getElementName(); } } - + static class StringToPackageFragmentConverter extends Converter { - private JavaClass clazz; + private final JavaClass clazz; public StringToPackageFragmentConverter(JavaClass clazz) { super(String.class, IPackageFragment.class); this.clazz = clazz; } - + public Object convert(Object fromObject) { if (clazz.getFragmentRoot()==null) return null; - if( fromObject == null ) { + if (fromObject == null) { return clazz.getFragmentRoot().getPackageFragment(""); } - + return clazz.getFragmentRoot().getPackageFragment((String) fromObject); - + } } } |