Java tutorial
/******************************************************************************* * Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.com) and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Soyatec - initial API and implementation *******************************************************************************/ package org.eclipse.e4.xwt.tools.ui.designer.dialogs; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.e4.xwt.internal.utils.LoggerManager; import org.eclipse.e4.xwt.tools.ui.designer.wizards.AccessorConfigureInfo; import org.eclipse.e4.xwt.tools.ui.designer.wizards.ExternalizeStringsCommon; 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.JavaModelException; import org.eclipse.jdt.core.search.IJavaSearchConstants; import org.eclipse.jdt.core.search.IJavaSearchScope; import org.eclipse.jdt.core.search.SearchEngine; import org.eclipse.jdt.internal.ui.JavaPlugin; import org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog; import org.eclipse.jdt.internal.ui.wizards.TypedElementSelectionValidator; import org.eclipse.jdt.internal.ui.wizards.TypedViewerFilter; import org.eclipse.jdt.ui.JavaElementComparator; import org.eclipse.jdt.ui.JavaElementLabelProvider; import org.eclipse.jdt.ui.StandardJavaElementContentProvider; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.StatusDialog; import org.eclipse.jface.util.Policy; import org.eclipse.jface.util.Util; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; 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.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Widget; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ElementListSelectionDialog; import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; import org.eclipse.ui.progress.IProgressService; /** * @author chenxiaoru (xiaoru.chen@soyatec.com) */ @SuppressWarnings("restriction") public class AccessorConfigurationDialog extends StatusDialog { private String sourceFolder; private String sourcePackage; private String className; private String propertyFolder; private String propertyPackage; private String propertyName; private Text classNameText; private Text sourcePackageText; private Text sourceFolderText; private Text propertyNameText; private Text propertyPackageText; private Text propertyFolderText; private Button sourcePackagButton; private Button chooseClassTypeButton; private Button propertyPackagButton; private Button choosePropertyTypeButton; private Button propertyFolderButton; private Label classDefaultLabel; private Label propertyDefaultLabel; private Label propertyLabel; private boolean isError = false; private IPackageFragmentRoot classRoot; private IPackageFragmentRoot propertyRoot; private IStatus fLastStatus; private IPackageFragment propertyFragment; private IPackageFragment classFragment; private AccessorConfigureInfo info; Object[] propertyFileNames; Object[] classFileNames; public AccessorConfigurationDialog(Shell parent, AccessorConfigureInfo info) { super(parent); this.info = info; } protected Control createDialogArea(Composite ancestor) { if (info.getClassRoot() != null) { classRoot = info.getClassRoot(); classFragment = classRoot.getPackageFragment(info.getSourcePackage()); classFileNames = createFileListInput(".java", classFragment); } if (info.getPropertyRoot() != null) { propertyRoot = info.getPropertyRoot(); propertyFragment = propertyRoot.getPackageFragment(info.getPropertyPackage()); propertyFileNames = createFileListInput(".properties", propertyFragment); } Composite parent = (Composite) super.createDialogArea(ancestor); Composite container = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 3; container.setLayout(layout); String resourceLabelContens = "Resource bundle accessor class(will be created if it does not exist):"; createClassLabel(container, resourceLabelContens); createClassFolderField(container); createClassPackageField(container); createClassNameField(container); drawLine(container); String propertyLabelContens = "Property file location and name:"; createPropertyLabel(container, propertyLabelContens); createPropertyFolderField(container); createPropertyPackageField(container); createPropertyNameField(container); getExistPropertyFile(); return parent; } /** * draw a line on container. * * @param container */ private void drawLine(Composite container) { Label hLabel = new Label(container, SWT.SEPARATOR | SWT.HORIZONTAL); GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); gridData.horizontalSpan = 3; gridData.heightHint = 20; hLabel.setLayoutData(gridData); } private void createClassLabel(Composite container, String labelContents) { Label classLabel = new Label(container, SWT.NONE); GridData gridData = new GridData(); gridData.horizontalSpan = 3; gridData.heightHint = 20; classLabel.setText(labelContents); classLabel.setLayoutData(gridData); } private void createPropertyLabel(Composite container, String labelContents) { propertyLabel = new Label(container, SWT.NONE); GridData gridData = new GridData(); gridData.horizontalSpan = 3; gridData.heightHint = 20; gridData.widthHint = 350; propertyLabel.setText(labelContents); propertyLabel.setLayoutData(gridData); } private void createClassFolderField(Composite container) { Label sourceFolderLabel = new Label(container, SWT.NONE); GridData gridData = new GridData(); sourceFolderLabel.setText("Source folder:"); sourceFolderLabel.setLayoutData(gridData); sourceFolderText = new Text(container, SWT.BORDER); gridData = new GridData(GridData.FILL_HORIZONTAL); sourceFolderText.setLayoutData(gridData); sourceFolderText.setText(info.getSourceFolder()); sourceFolder = sourceFolderText.getText(); sourceFolderText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { sourceFolder = sourceFolderText.getText(); setNewRoot("/" + sourceFolder, true); checkFomat(); } }); Button sourceFolderButton = new Button(container, SWT.PUSH); sourceFolderButton.setText("Browse..."); sourceFolderButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { classRoot = chooseSourceContainer(classRoot); IPath path = classRoot.getPath(); sourceFolderText.setText(path.toString().substring(1)); } }); } private void createClassPackageField(Composite container) { Label sourcePackageLabel = new Label(container, SWT.NONE); GridData gridData = new GridData(); sourcePackageLabel.setText("Package:"); sourcePackageLabel.setLayoutData(gridData); Composite classPackageField = new Composite(container, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 4; layout.marginHeight = 0; layout.marginWidth = 0; classPackageField.setLayout(layout); gridData = new GridData(GridData.FILL_HORIZONTAL); classPackageField.setLayoutData(gridData); sourcePackageText = new Text(classPackageField, SWT.BORDER); gridData = new GridData(GridData.FILL_HORIZONTAL); sourcePackageText.setLayoutData(gridData); sourcePackageText.setText(info.getSourcePackage()); sourcePackage = sourcePackageText.getText(); sourcePackageText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { sourcePackage = sourcePackageText.getText(); checkFomat(); if (getSourcePackage() == null || ("").equals(getSourcePackage())) { classDefaultLabel.setText("(default)"); } } }); classDefaultLabel = new Label(classPackageField, SWT.NONE); gridData = new GridData(); gridData.widthHint = 100; classDefaultLabel.setLayoutData(gridData); sourcePackagButton = new Button(container, SWT.PUSH); sourcePackagButton.setText("Browse..."); sourcePackagButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Widget widget = e.widget; choosePackage(widget, classRoot); } }); } private void createClassNameField(Composite container) { Label classNameLabel = new Label(container, SWT.NONE); GridData gridData = new GridData(); classNameLabel.setText("Class name:"); classNameLabel.setLayoutData(gridData); classNameText = new Text(container, SWT.BORDER); gridData = new GridData(GridData.FILL_HORIZONTAL); classNameText.setLayoutData(gridData); classNameText.setText(info.getClassName()); className = classNameText.getText(); classNameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { className = classNameText.getText(); checkFomat(); } }); chooseClassTypeButton = new Button(container, SWT.PUSH); chooseClassTypeButton.setText("Browse..."); chooseClassTypeButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { browseForAccessorClass(classRoot); } }); } private void createPropertyFolderField(Composite container) { Label propertyFolderLabel = new Label(container, SWT.NONE); GridData gridData = new GridData(); propertyFolderLabel.setText("Source folder:"); propertyFolderLabel.setLayoutData(gridData); propertyFolderText = new Text(container, SWT.BORDER); gridData = new GridData(GridData.FILL_HORIZONTAL); propertyFolderText.setLayoutData(gridData); propertyFolderText.setText(info.getPropertyFolder()); propertyFolder = propertyFolderText.getText(); propertyFolderText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { propertyFolder = propertyFolderText.getText(); setNewRoot("/" + propertyFolder, false); checkFomat(); } }); propertyFolderButton = new Button(container, SWT.PUSH); propertyFolderButton.setText("Browse..."); propertyFolderButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { propertyRoot = chooseSourceContainer(propertyRoot); IPath path = propertyRoot.getPath(); propertyFolderText.setText(path.toString().substring(1)); } }); } private void createPropertyPackageField(Composite container) { Label propertyPackageLabel = new Label(container, SWT.NONE); GridData gridData = new GridData(); propertyPackageLabel.setText("Package:"); propertyPackageLabel.setLayoutData(gridData); Composite propertyPackageField = new Composite(container, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 4; layout.marginHeight = 0; layout.marginWidth = 0; propertyPackageField.setLayout(layout); gridData = new GridData(GridData.FILL_HORIZONTAL); propertyPackageField.setLayoutData(gridData); propertyPackageText = new Text(propertyPackageField, SWT.BORDER); gridData = new GridData(GridData.FILL_HORIZONTAL); propertyPackageText.setLayoutData(gridData); propertyPackageText.setText(info.getPropertyPackage()); propertyPackage = propertyPackageText.getText(); propertyPackageText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { propertyPackage = propertyPackageText.getText(); checkFomat(); if (getPropertyPackage() == null || ("").equals(getPropertyPackage())) { propertyDefaultLabel.setText("(default)"); } } }); propertyDefaultLabel = new Label(propertyPackageField, SWT.NONE); gridData = new GridData(); gridData.widthHint = 100; propertyDefaultLabel.setLayoutData(gridData); propertyPackagButton = new Button(container, SWT.PUSH); propertyPackagButton.setText("Browse..."); propertyPackagButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Widget widget = e.widget; choosePackage(widget, propertyRoot); } }); } private void createPropertyNameField(Composite container) { Label propertyNameLabel = new Label(container, SWT.NONE); GridData gridData = new GridData(); propertyNameLabel.setText("Porperty File name:"); propertyNameLabel.setLayoutData(gridData); propertyNameText = new Text(container, SWT.BORDER); gridData = new GridData(GridData.FILL_HORIZONTAL); propertyNameText.setLayoutData(gridData); propertyNameText.setText(info.getPropertyName()); propertyName = propertyNameText.getText(); propertyNameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { propertyName = propertyNameText.getText(); checkFomat(); } }); choosePropertyTypeButton = new Button(container, SWT.PUSH); choosePropertyTypeButton.setText("Browse..."); choosePropertyTypeButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { browseForPropertyFile(); } }); } protected void browseForAccessorClass(IPackageFragmentRoot root) { IProgressService service = PlatformUI.getWorkbench().getProgressService(); IJavaSearchScope scope = root != null ? SearchEngine.createJavaSearchScope(new IJavaElement[] { root }) : SearchEngine.createWorkspaceScope(); FilteredTypesSelectionDialog dialog = new FilteredTypesSelectionDialog(getShell(), false, service, scope, IJavaSearchConstants.CLASS); dialog.setTitle("Choose a Type"); dialog.setInitialPattern("*Messages"); classFileNames = createFileListInput(".java", classFragment); if (dialog.open() == Window.OK) { IType selectedType = (IType) dialog.getFirstResult(); if (selectedType != null) { classNameText.setText(selectedType.getElementName()); } } } private void browseForPropertyFile() { ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), new JavaElementLabelProvider()); dialog.setIgnoreCase(false); dialog.setTitle("Choose the property file:"); dialog.setMessage("Choose the property file:"); dialog.setElements(createFileListInput(".properties", propertyFragment)); propertyFileNames = createFileListInput(".properties", propertyFragment); dialog.setFilter('*' + "properties"); if (dialog.open() == Window.OK) { IFile selectedFile = (IFile) dialog.getFirstResult(); if (selectedFile != null) propertyNameText.setText( selectedFile.getName().substring(0, selectedFile.getName().lastIndexOf(".properties"))); } } private Object[] createFileListInput(String extension, IPackageFragment fragment) { try { if (fragment == null) return new Object[0]; List result = new ArrayList(1); if (".java".equals(extension)) { Object[] java = fragment.getChildren(); return java; } Object[] nonjava = fragment.getNonJavaResources(); for (int i = 0; i < nonjava.length; i++) { if (isAlrightFile(nonjava[i], extension)) result.add(nonjava[i]); } return result.toArray(); } catch (JavaModelException e) { return new Object[0]; } } private static boolean isAlrightFile(Object o, String extension) { if (!(o instanceof IFile)) return false; IFile file = (IFile) o; return (extension.equals('.' + file.getFileExtension())); } /** * Set the root null. * * @param isClass */ private void setRootNull(boolean isClass) { if (isClass) { classRoot = null; } else { propertyRoot = null; } } /** * While user change the sourceFolderText or propertyFolderText's nameMap,refresh the root. * * @param path */ private void setNewRoot(String path, boolean isClass) { int start = path.indexOf("/"); IResource container = ResourcesPlugin.getWorkspace().getRoot().findMember(new Path(path)); if (path.length() == 0 || container == null || (container.getType() & (IResource.PROJECT | IResource.FOLDER)) == 0) { setRootNull(isClass); } else if ((path.indexOf("/", path.indexOf("/", start + 1) + 1) != -1) || (path.indexOf("\\") != -1)) { setRootNull(isClass); } else { try { final IFile file = ExternalizeStringsCommon.getIFile(path, ""); IJavaProject javaProject = JavaCore.create(file.getProject()); IPackageFragmentRoot fragmentRoot[] = javaProject.getAllPackageFragmentRoots(); for (int i = 0; i < fragmentRoot.length; i++) { if (fragmentRoot[i].getResource() != null) { if (isClass) { classRoot = fragmentRoot[i]; } else { propertyRoot = fragmentRoot[i]; } break; } } } catch (CoreException e) { LoggerManager.log(e); } } } protected void choosePackage(Widget widget, IPackageFragmentRoot root) { IJavaElement[] packages = null; try { if (root != null && root.exists()) { packages = root.getChildren(); } } catch (JavaModelException e) { // no need to react } if (packages == null) { packages = new IJavaElement[0]; } ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT)); dialog.setIgnoreCase(true); dialog.setTitle("Package Selection"); dialog.setMessage("Choose the destination package:"); dialog.setElements(packages); if (dialog.open() == Window.OK) { IPackageFragment fragment = (IPackageFragment) dialog.getFirstResult(); if (widget.equals(sourcePackagButton)) { sourcePackageText.setText(fragment.getElementName()); // classFilePath = fragment.getPath().toString(); classFragment = fragment; } else if (widget.equals(propertyPackagButton)) { propertyPackageText.setText(fragment.getElementName()); // propertyFilePath = fragment.getPath().toString(); propertyFragment = fragment; } } } /** * Uses the standard container selection dialog to choose the new value for the container field. */ private IPackageFragmentRoot chooseSourceContainer(IPackageFragmentRoot root) { Class[] acceptedClasses = new Class[] { IPackageFragmentRoot.class, IJavaProject.class }; TypedElementSelectionValidator validator = new TypedElementSelectionValidator(acceptedClasses, false) { public boolean isSelectedValid(Object element) { try { if (element instanceof IJavaProject) { IJavaProject jproject = (IJavaProject) element; IPath path = jproject.getProject().getFullPath(); return (jproject.findPackageFragmentRoot(path) != null); } else if (element instanceof IPackageFragmentRoot) { return (((IPackageFragmentRoot) element).getKind() == IPackageFragmentRoot.K_SOURCE); } return true; } catch (JavaModelException e) { JavaPlugin.log(e.getStatus()); // just log, no ui in validation } return false; } }; acceptedClasses = new Class[] { IJavaModel.class, IPackageFragmentRoot.class, IJavaProject.class }; ViewerFilter filter = new TypedViewerFilter(acceptedClasses) { public boolean select(Viewer viewer, Object parent, Object element) { if (element instanceof IPackageFragmentRoot) { try { return (((IPackageFragmentRoot) element).getKind() == IPackageFragmentRoot.K_SOURCE); } catch (JavaModelException e) { JavaPlugin.log(e.getStatus()); // just log, no ui in validation return false; } } return super.select(viewer, parent, element); } }; StandardJavaElementContentProvider provider = new StandardJavaElementContentProvider(); ILabelProvider labelProvider = new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT); ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getShell(), labelProvider, provider); dialog.setValidator(validator); dialog.setComparator(new JavaElementComparator()); dialog.setTitle("Source Folder Selection"); dialog.setMessage("Choose a source folder:"); dialog.addFilter(filter); dialog.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot())); if (dialog.open() == Window.OK) { Object element = dialog.getFirstResult(); if (element instanceof IJavaProject) { IJavaProject jproject = (IJavaProject) element; return jproject.getPackageFragmentRoot(jproject.getProject()); } else if (element instanceof IPackageFragmentRoot) { return (IPackageFragmentRoot) element; } return null; } return root; } /** * Ensures that both file path are set. */ private void checkFilePath(String path, boolean isPackage, boolean isClass) { IResource container = ResourcesPlugin.getWorkspace().getRoot().findMember(new Path(path)); if (path.length() == 0 && !isPackage) { updateStatus("Both sources folder must be specified"); return; } if (container == null || (container.getType() & (IResource.PROJECT | IResource.FOLDER)) == 0) { if (isPackage && !("").equals(path)) { updateStatus("The apecified package for the resource bundle is invalid."); return; } else if (!isPackage) { updateStatus("Both source folders must exist"); return; } } if (!container.isAccessible()) { updateStatus("Both projects must be writable"); return; } if (!isPackage) { int start = path.indexOf("/"); if ((path.indexOf("/", path.indexOf("/", start + 1) + 1) != -1) || (path.indexOf("\\") != -1)) { updateStatus("Both source folders must exist"); setRootNull(isClass); return; } } updateStatus(""); } /** * Ensures that both file path are set. */ private void checkPackage(String path, String packageName, boolean isProperty) { if (packageName == null || packageName.length() == 0) { if (isProperty) { updateStatus("Incorret package."); return; } } if ((packageName.indexOf("/") != -1) || (packageName.indexOf("\\") != -1)) { updateStatus("The apecified package for the resource bundle is invalid."); return; } checkFilePath(path, true, !isProperty); } /** * check the name of the file. */ private void checkFileName() { String regex = "^([_|a-zA-Z])[_\\w]*$"; if ("".equals(getClassName())) { updateStatus("The class name must be specified."); } else { Matcher matcher = Pattern.compile(regex).matcher(className); if (!(matcher.find())) { updateStatus("The type name\"" + className + "\"is not a valid indentifier."); } else { updateStatus(""); } } } /** * Check all the text value fomat. * * @param message */ private void checkFomat() { checkFilePath("/" + sourceFolder, false, true); if (isError) return; checkFilePath("/" + propertyFolder, false, false); if (isError) return; checkPackage(getClassFilePath(), getSourcePackage(), false); if (isError) return; checkFileName(); if (isError) return; checkPackage(getPropertyFilePath(), getPropertyPackage(), true); if (isError) return; if ("".equals(getPropertyName())) { updateStatus("The Property File Name must be specified. "); } else { updateStatus(""); getExistPropertyFile(); } } private void updateStatus(String message) { if (message != null && !"".equals(message)) { isError = true; fLastStatus = new Status(IStatus.ERROR, JavaCore.PLUGIN_ID, -1, message, null); setPropertyFieldEnable(true); } else { isError = false; fLastStatus = new Status(IStatus.OK, Policy.JFACE, IStatus.OK, Util.ZERO_LENGTH_STRING, null); } updateStatus(fLastStatus); } private void getExistPropertyFile() { try { final IFile file = ExternalizeStringsCommon.getIFile(getClassFilePath(), className + ".java"); int keyBegin = getClassFilePath().indexOf("/", 1) + 1; int keyEnd = getClassFilePath().indexOf("/", keyBegin + 1); String sourceKey = getClassFilePath().substring(keyBegin, keyEnd); if (file.exists()) { // Get the property file's folder. IJavaProject javaProject = JavaCore.create(file.getProject()); String propertyFolder = javaProject.getElementName() + "/" + sourceKey; // Get the property file's package and name. StringBuffer contents = ExternalizeStringsCommon.getHistoryContents(file); String findKey = "BUNDLE_NAME"; int index = contents.toString().indexOf(findKey); int start = contents.indexOf("\"", index); int end = contents.indexOf("\"", start + 1); String path = contents.substring(start + 1, end); String propertyPackage = path.substring(0, path.lastIndexOf(".")); String propertyName = path.substring(path.lastIndexOf(".") + 1); if (!propertyFolder.equals(propertyFolderText.getText())) { propertyFolderText.setText(propertyFolder); } if (!propertyPackage.equals(propertyPackageText.getText())) { propertyPackageText.setText(propertyPackage); } if (!propertyName.equals(propertyNameText.getText())) { propertyNameText.setText(propertyName); } setPropertyFieldEnable(false); } else { setPropertyFieldEnable(true); } } catch (CoreException e) { LoggerManager.log(e); } catch (IOException e) { LoggerManager.log(e); } } /** * Notifies that the ok button of this dialog has been pressed. * <p> * The <code>Dialog</code> implementation of this framework method sets this dialog's return code to <code>Window.OK</code> and closes the dialog. Subclasses may override. * </p> */ protected void okPressed() { if (checkFileExist(getClassName(), ".java", classFileNames, getClassFilePath())) { return; } if (checkFileExist(getPropertyName(), ".properties", propertyFileNames, getPropertyFilePath())) { return; } setReturnCode(OK); close(); } /** * Check the file whether already exist with different case. */ private boolean checkFileExist(String name, String extension, Object[] names, String path) { Object[] fileNames = names; String fileExist; for (int i = 0; i < fileNames.length; i++) { if (".java".equals(extension)) { fileExist = ((IJavaElement) fileNames[i]).getElementName(); } else { fileExist = ((IFile) fileNames[i]).getName(); } String fileExistName = fileExist.substring(0, fileExist.lastIndexOf(extension)); if ((!name.equals(fileExistName)) && name.toLowerCase().equals(fileExistName.toLowerCase())) { showFileExistDialog(name, extension, path); return true; } } return false; } /** * If file already exist but with different case,show the dialog. */ private void showFileExistDialog(String name, String extension, String path) { String dialogMessage = "File '" + path.replace(".", "/") + "/" + name + extension + "' already exist with different case."; String[] dialogButtonLabels = { "Ok" }; MessageDialog messageDialog = new MessageDialog(getShell(), "Configure Accessor Class", null, dialogMessage, MessageDialog.ERROR, dialogButtonLabels, 1); messageDialog.open(); } /** * Set the property file configure field disabled or enabled. * * @param b */ private void setPropertyFieldEnable(boolean b) { String propertyLabelContens; if (b) { propertyLabelContens = "Property file location and name:"; } else { propertyLabelContens = "Property file location and name(Default exist file):"; } if (!(propertyLabelContens).equals(propertyLabel.getText())) { propertyLabel.setText(propertyLabelContens); } propertyFolderButton.setEnabled(b); propertyPackagButton.setEnabled(b); choosePropertyTypeButton.setEnabled(b); propertyFolderText.setEnabled(b); propertyPackageText.setEnabled(b); propertyNameText.setEnabled(b); } public IPackageFragmentRoot getclassRoot() { return classRoot; } public String getClassFilePath() { return "/" + sourceFolder + "/" + getSourcePackage().replace(".", "/"); } public String getSourceFolder() { return sourceFolder; } public String getSourcePackage() { return sourcePackage; } public String getClassName() { return className; } public IPackageFragmentRoot getPropertyRoot() { return propertyRoot; } public String getPropertyFolder() { return propertyFolder; } public String getPropertyFilePath() { return "/" + propertyFolder + "/" + getPropertyPackage().replace(".", "/"); } public String getPropertyPackage() { return propertyPackage; } public String getPropertyName() { return propertyName; } }