Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrik Suzzi2013-10-29 21:05:46 +0000
committerLars Vogel2013-11-04 14:11:58 +0000
commit30bf45a1875855bc48e1ef09fd4d1997453320b7 (patch)
treeb11d2818b45051b513093530d2d9dfa4ecfbd5df
parenta85b4f59a061f6b7b439b8b64c71d3982dbe682c (diff)
downloadorg.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.java109
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);
-
+
}
}
}

Back to the top