/* ====================================================================
*
* The ObjectStyle Group Software License, Version 1.0
*
* Copyright (c) 2002 - 2006 The ObjectStyle Group
* and individual authors of the software. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* ObjectStyle Group (http://objectstyle.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "ObjectStyle Group" and "Cayenne"
* must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact andrus@objectstyle.org.
*
* 5. Products derived from this software may not be called "ObjectStyle"
* nor may "ObjectStyle" appear in their names without prior written
* permission of the ObjectStyle Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the ObjectStyle Group. For more
* information on the ObjectStyle Group, please see
* <http://objectstyle.org/>.
*
*/
package org.objectstyle.wolips.wizards;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IContainer;
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.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.IJavaElement;
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.JavaConventions;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.search.SearchPattern;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.core.JavaModelManager;
import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.IStringButtonAdapter;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringButtonStatusDialogField;
import org.eclipse.jdt.ui.JavaElementLabelProvider;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
import org.objectstyle.wolips.bindings.utils.BindingReflectionUtils;
import org.objectstyle.wolips.core.resources.types.TypeNameCollector;
import org.objectstyle.wolips.core.resources.types.project.ProjectAdapter;
import org.objectstyle.wolips.eomodeler.utils.StringLabelProvider;
import org.objectstyle.wolips.locate.LocateException;
import org.objectstyle.wolips.locate.LocatePlugin;
import org.objectstyle.wolips.locate.result.LocalizedComponentsLocateResult;
/**
* @author mnolte
* @author uli
*/
public class WOComponentCreationPage extends WizardNewWOResourcePage {
// widgets
private static final String BODY_CHECKBOX_KEY = "WOComponentCreationWizardSection.bodyCheckbox";
private static final String API_CHECKBOX_KEY = "WOComponentCreationWizardSection.apiCheckbox";
private static final String HTML_DOCTYPE_KEY = "WOComponentCreationWizardSection.htmlDocType";
private static final String NSSTRING_ENCODING_KEY = "WOComponentCreationWizardSection.encoding";
private static final String SUPERCLASS_KEY = "WOComponentCreationWizardSection.superclass";
private Button _bodyCheckbox;
private Combo _htmlCombo;
private Combo _encodingCombo;
private Button _apiCheckbox;
private IResource[] _resourcesToReveal;
private StringButtonStatusDialogField _packageDialogField;
private StringButtonStatusDialogField _superclassDialogField;
private Object _currentSelection;
enum HTML {
STRICT_401("HTML 4.0.1 Strict", "4.0.1 strict doctype", 0),
TRANSITIONAL_401("HTML 4.0.1 Transitional", "4.0.1 transitional doctype", 1),
STRICT_XHTML10("XHTML 1.0 Strict", "XHTML 1.0 strict doctype", 2),
TRANSITIONAL_XHTML10("XHTML 1.0 Transitional", "XHTML 1.0 transitional doctype", 3),
FRAMESET_XHTML10("XHTML 1.0 Frameset", "XHTML 1.0 frameset doctype", 4),
XHTML11("XHTML 1.1", "XHTML 1.1 doctype", 5),
LAZY_OLD("Lazy Old HTML", "Lazy Old HTML", 6);
private final String _displayString;
private final String _html;
private final int _templateIndex;
// template index is just to make things easier in velocity engine
HTML(String display, String html, int templateIndex) {
_displayString = display;
_html = html;
_templateIndex = templateIndex;
}
String getDisplayString() {
return _displayString;
}
String getHTML() {
return _html;
}
int getTemplateIndex() {
return _templateIndex;
}
String getDefaultDocType() {
return TRANSITIONAL_XHTML10.getDisplayString();
}
}
enum NSSTRINGENCODING {
NSUTF8StringEncoding("NSUTF8StringEncoding"),
NSMacOSRomanStringEncoding("NSMacOSRomanStringEncoding"),
NSASCIIStringEncoding("NSASCIIStringEncoding"),
NSNEXTSTEPStringEncoding("NSNEXTSTEPStringEncoding"),
NSJapaneseEUCStringEncoding("NSJapaneseEUCStringEncoding"),
NSISOLatin1StringEncoding("NSISOLatin1StringEncoding"),
NSSymbolStringEncoding("NSSymbolStringEncoding"),
NSNonLossyASCIIStringEncoding("NSNonLossyASCIIStringEncoding"),
NSShiftJISStringEncoding("NSShiftJISStringEncoding"),
NSISOLatin2StringEncoding("NSISOLatin2StringEncoding"),
NSUnicodeStringEncoding("NSUnicodeStringEncoding"),
NSWindowsCP1251StringEncoding("NSWindowsCP1251StringEncoding"),
NSWindowsCP1252StringEncoding("NSWindowsCP1252StringEncoding"),
NSWindowsCP1253StringEncoding("NSWindowsCP1253StringEncoding"),
NSWindowsCP1254StringEncoding("NSWindowsCP1254StringEncoding"),
NSWindowsCP1250StringEncoding("NSWindowsCP1250StringEncoding"),
NSISO2022JPStringEncoding("NSISO2022JPStringEncoding"),
NSProprietaryStringEncoding("NSProprietaryStringEncoding");
private final String _encoding;
NSSTRINGENCODING(String encoding) {
_encoding = encoding;
}
String getDisplayString() {
return _encoding;
}
String getDefaultEncoding() {
return NSSTRINGENCODING.NSUTF8StringEncoding.getDisplayString();
}
}
/**
* Creates the page for the wocomponent creation wizard.
*
* @param workbench
* the workbench on which the page should be created
* @param selection
* the current selection
*/
public WOComponentCreationPage(IStructuredSelection selection) {
super("createWOComponentPage1", WOComponentCreationPage.processSelection(selection));
this.setTitle(Messages.getString("WOComponentCreationPage.title"));
this.setDescription(Messages.getString("WOComponentCreationPage.description"));
if (selection != null) {
Object selectedObject = selection.getFirstElement();
if (selectedObject instanceof IFolder) {
IJavaElement parentJavaElement = JavaCore.create((IFolder) selectedObject);
if (parentJavaElement instanceof IPackageFragment) {
_currentSelection = parentJavaElement;
setContainerFullPath(componentPathForPackage((IPackageFragment)_currentSelection));
}
else {
IFolder selectedFolder = (IFolder)selectedObject;
ProjectAdapter projectAdapter = (ProjectAdapter) selectedFolder.getProject().getAdapter(ProjectAdapter.class);
IPath rootFolder = selectedFolder.getProjectRelativePath().uptoSegment(1);
if (!rootFolder.equals(projectAdapter.getDefaultComponentsFolder().getProjectRelativePath())) {
setContainerFullPath(projectAdapter.getDefaultComponentsFolder().getFullPath());
}
}
}
else if (selectedObject instanceof IResource) {
IResource selectedResource = (IResource) selectedObject;
ProjectAdapter projectAdapter = (ProjectAdapter) selectedResource.getProject().getAdapter(ProjectAdapter.class);
setContainerFullPath(projectAdapter.getDefaultComponentsFolder().getFullPath());
}
}
}
public static IStructuredSelection processSelection(IStructuredSelection selection) {
IStructuredSelection processedSelection = null;
if (selection != null) {
Object selectedObject = selection.getFirstElement();
if (selectedObject instanceof IFile) {
selectedObject = ((IFile)selectedObject).getParent();
processedSelection = null;
}
if (selectedObject instanceof IFolder) {
IFolder currentFolder = (IFolder) selectedObject;
IJavaElement parentJavaElement = JavaCore.create(currentFolder);
if (parentJavaElement instanceof IPackageFragment) {
// Don't let you put WO's in a package
processedSelection = new StructuredSelection(currentFolder.getProject());
} else if (parentJavaElement instanceof IPackageFragmentRoot) {
// Don't let you put WO's in a source folder
processedSelection = new StructuredSelection(currentFolder.getProject());
} else if (currentFolder.getName().endsWith(".wo")) {
// Don't let you put WO's inside of WO's by accident
processedSelection = new StructuredSelection(currentFolder.getParent());
}
}
}
return processedSelection;
}
@Override
protected void initialPopulateContainerNameField() {
super.initialPopulateContainerNameField();
}
@Override
protected void createAdvancedControls(Composite parent) {
// super.createAdvancedControls(parent);
}
@Override
protected IStatus validateLinkedResource() {
return Status.OK_STATUS;
}
@Override
protected boolean validatePage() {
IStatus status = JavaConventions.validateCompilationUnitName(this.getFileName() + ".java",
CompilerOptions.VERSION_1_3, CompilerOptions.VERSION_1_3);
if (!status.isOK()) {
setErrorMessage(status.getMessage());
return false;
}
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(getContainerFullPath().segment(0));
// This may need to change depending on how we want to deal with localized components in future.
LocatePlugin locatePlugin = LocatePlugin.getDefault();
try {
LocalizedComponentsLocateResult result = locatePlugin.getLocalizedComponentsLocateResult(project, getFileName());
if (result.getResources().length > 0) {
setErrorMessage("A component by that name already exists");
return false;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Check that we aren't going to create a wocomponent inside another wocomponent
IPath path = getContainerFullPath();
if (path.lastSegment().endsWith(".wo")) {
setErrorMessage("Cannot create a component within another component");
return false;
}
return super.validatePage();
}
/**
* (non-Javadoc) Method declared on IDialogPage.
*/
public void createControl(Composite parent) {
// inherit default container and name specification widgets
super.createControl(parent);
Composite composite = (Composite) getControl();
// WorkbenchHelp.setHelp(composite,
// IReadmeConstants.CREATION_WIZARD_PAGE_CONTEXT);
this.setFileName(Messages.getString("WOComponentCreationPage.newComponent.defaultName"));
// new Label(composite, SWT.NONE); // vertical spacer
Group javaGroup = new Group(composite, SWT.NONE);
javaGroup.setText(Messages.getString("WOComponentCreationPage.creationOptions.javaFile.group"));
GridLayout javaLayout = new GridLayout();
javaLayout.numColumns = 4;
javaGroup.setLayout(javaLayout);
javaGroup.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
PackageButtonAdapter packageButtonAdapter = new PackageButtonAdapter();
_packageDialogField = new StringButtonStatusDialogField(packageButtonAdapter);
_packageDialogField.setDialogFieldListener(packageButtonAdapter);
_packageDialogField.setLabelText(NewWizardMessages.NewTypeWizardPage_package_label);
_packageDialogField.setButtonLabel(NewWizardMessages.NewTypeWizardPage_package_button);
_packageDialogField.setStatusWidthHint(NewWizardMessages.NewTypeWizardPage_default);
_packageDialogField.doFillIntoGrid(javaGroup, 4);
Text packageText = _packageDialogField.getTextControl(null);
LayoutUtil.setWidthHint(packageText, convertWidthInCharsToPixels(40));
LayoutUtil.setHorizontalGrabbing(packageText);
// JavaPackageCompletionProcessor packageCompletionProcessor= new
// JavaPackageCompletionProcessor();
// ControlContentAssistHelper.createTextContentAssistant(text,
// packageCompletionProcessor);
if (_currentSelection instanceof IPackageFragment) {
_packageDialogField.setText(((IPackageFragment) _currentSelection).getElementName());
} else {
String _package = null;
IResource _resource = ResourcesPlugin.getWorkspace().getRoot().findMember(this.getContainerFullPath());
if (_resource instanceof IFolder) {
_package = packageNameForComponentFolder((IFolder)_resource);
}
if (_package == null && (_package = packageNameForComponent("Main")) == null) {
_package = "";
}
_packageDialogField.setText(_package);
}
SuperclassButtonAdapter superclassButtonAdapter = new SuperclassButtonAdapter();
_superclassDialogField = new StringButtonStatusDialogField(superclassButtonAdapter);
_superclassDialogField.setDialogFieldListener(superclassButtonAdapter);
_superclassDialogField.setLabelText(NewWizardMessages.NewTypeWizardPage_superclass_label);
_superclassDialogField.setButtonLabel(NewWizardMessages.NewTypeWizardPage_superclass_button);
_superclassDialogField.setStatusWidthHint(NewWizardMessages.NewTypeWizardPage_default);
_superclassDialogField.doFillIntoGrid(javaGroup, 4);
String superclass = this.getDialogSettings().get(WOComponentCreationPage.SUPERCLASS_KEY);
if (superclass == null || superclass.length() == 0) {
_superclassDialogField.setText("com.webobjects.appserver.WOComponent");
}
else {
_superclassDialogField.setText(superclass);
}
Text superclassText = _superclassDialogField.getTextControl(null);
LayoutUtil.setWidthHint(superclassText, convertWidthInCharsToPixels(40));
LayoutUtil.setHorizontalGrabbing(superclassText);
new Label(composite, SWT.NONE); // vertical spacer
/*
* HTML body generation options
*/
Group optionalFilesGroup = new Group(composite, SWT.NONE);
optionalFilesGroup.setLayout(new GridLayout(3, false));
optionalFilesGroup.setText(Messages.getString("WOComponentCreationPage.creationOptions.group"));
optionalFilesGroup.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
ButtonSelectionAdaptor listener = new ButtonSelectionAdaptor();
_bodyCheckbox = new Button(optionalFilesGroup, SWT.CHECK);
_bodyCheckbox.setText(Messages.getString("WOComponentCreationPage.creationOptions.bodyTag.button"));
_bodyCheckbox.setSelection(this.getDialogSettings().getBoolean(BODY_CHECKBOX_KEY));
_bodyCheckbox.setAlignment(SWT.CENTER);
_bodyCheckbox.addListener(SWT.Selection, this);
_bodyCheckbox.addSelectionListener(listener);
Label htmlLabel = new Label(optionalFilesGroup, SWT.RIGHT);
htmlLabel.setText(Messages.getString("WOComponentCreationPage.creationOptions.bodyTag.label"));
htmlLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
_htmlCombo = new Combo(optionalFilesGroup, SWT.DROP_DOWN);
_htmlCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
populateHTMLCombo(_htmlCombo);
refreshButtonSettings(_bodyCheckbox);
_apiCheckbox = new Button(optionalFilesGroup, SWT.CHECK);
GridData apiLayoutData = new GridData();
// apiLayoutData.horizontalSpan = 3;
_apiCheckbox.setLayoutData(apiLayoutData);
_apiCheckbox.setText(Messages.getString("WOComponentCreationPage.creationOptions.apiFile.button"));
_apiCheckbox.setSelection(this.getDialogSettings().getBoolean(API_CHECKBOX_KEY));
_apiCheckbox.addListener(SWT.Selection, this);
_apiCheckbox.addSelectionListener(listener);
Label encodingLabel = new Label(optionalFilesGroup, SWT.RIGHT);
encodingLabel.setText(Messages.getString("WOComponentCreationPage.creationOptions.wooFile.label"));
encodingLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
_encodingCombo = new Combo(optionalFilesGroup, SWT.DROP_DOWN);
_encodingCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
populateStringEncodingCombo(_encodingCombo);
setPageComplete(validatePage());
}
/**
* Creates a new file resource as requested by the user. If everything is OK
* then answer true. If not, false will cause the dialog to stay open and
* the appropriate error message is shown
*
* @return whether creation was successful
*/
public boolean createComponent() {
WOComponentCreator componentCreator;
String componentName = getFileName();
String packageName = _packageDialogField.getText();
String superclassName = _superclassDialogField.getText();
IProject actualProject = ResourcesPlugin.getWorkspace().getRoot().getProject(getContainerFullPath().segment(0));
switch (getContainerFullPath().segmentCount()) {
case 0:
// not possible ( see validatePage() )
setErrorMessage("unknown error");
return false;
case 1:
componentCreator = new WOComponentCreator(actualProject, componentName, packageName, superclassName, _bodyCheckbox.getSelection(), _apiCheckbox.getSelection(), this);
break;
default:
// determine parent resource for component creator by removing
// first element (workspace) from full path
IFolder subprojectFolder = actualProject.getFolder(getContainerFullPath().removeFirstSegments(1));
componentCreator = new WOComponentCreator(subprojectFolder, componentName, packageName, superclassName, _bodyCheckbox.getSelection(), _apiCheckbox.getSelection(), this);
break;
}
this.getDialogSettings().put(WOComponentCreationPage.SUPERCLASS_KEY, _superclassDialogField.getText());
this.getDialogSettings().put(WOComponentCreationPage.BODY_CHECKBOX_KEY, _bodyCheckbox.getSelection());
this.getDialogSettings().put(WOComponentCreationPage.HTML_DOCTYPE_KEY, _htmlCombo.getText());
this.getDialogSettings().put(WOComponentCreationPage.NSSTRING_ENCODING_KEY, _encodingCombo.getText());
this.getDialogSettings().put(WOComponentCreationPage.API_CHECKBOX_KEY, _apiCheckbox.getSelection());
// logPreferences();
IRunnableWithProgress op = new WorkspaceModifyDelegatingOperation(componentCreator);
return createResourceOperation(op);
}
/*
* Debugging
*/
public void logPreferences() {
System.out.println("BODY_CHECKBOX_KEY: " + this.getDialogSettings().get(BODY_CHECKBOX_KEY));
System.out.println("HTML_DOCTYPE_KEY: " + this.getDialogSettings().get(HTML_DOCTYPE_KEY));
System.out.println("NSSTRING_ENCODING_KEY: " + this.getDialogSettings().get(NSSTRING_ENCODING_KEY));
System.out.println("API_CHECKBOX_KEY: " + this.getDialogSettings().get(API_CHECKBOX_KEY));
System.out.println("SUPERCLASS_KEY: " + this.getDialogSettings().get(WOComponentCreationPage.SUPERCLASS_KEY));
}
/**
* Populate a SWT Combo with HTML doctypes
*
* @param c
*/
public void populateHTMLCombo(Combo c) {
for (HTML entry : HTML.values()) {
c.add(entry.getDisplayString());
}
selectHTMLDocTypePreference(c);
}
/**
* Pick the previous encoding preference else default to
* HTML.TRANSITIONAL_XHTML10
*
* @param c
*/
public void selectHTMLDocTypePreference(Combo c) {
String previousDocType = this.getDialogSettings().get(HTML_DOCTYPE_KEY);
if (previousDocType != null && previousDocType.length() > 0) {
int i = 0;
for (HTML entry : HTML.values()) {
if (previousDocType.equals(entry.getDisplayString())) {
c.select(i);
return;
}
i++;
}
}
// default
c.select(3);
}
/**
* Return the HTML for the selected html doc type
*
* @return defaults to HTML.TRANSITIONAL_XHTML10
*/
public HTML getSelectedHTMLDocType() {
if (_bodyCheckbox.getSelection()) {
return getHTMLForDisplayString(_htmlCombo.getText());
}
return HTML.TRANSITIONAL_XHTML10;
}
/**
* Return HTML to insert for selected html/xhtml doc type
*
* @param displayString
* @return selected doc type or HTML.TRANSITIONAL_XHTML10
*/
public HTML getHTMLForDisplayString(String displayString) {
for (HTML entry : HTML.values()) {
if (displayString.equals(entry.getDisplayString())) {
return entry;
}
}
return HTML.TRANSITIONAL_XHTML10;
}
/**
* Populate a SWT Combo with NSStringEncoding doctypes (See NSString.h)
*
* @param c
*/
public void populateStringEncodingCombo(Combo c) {
for (NSSTRINGENCODING entry : NSSTRINGENCODING.values()) {
c.add(entry.getDisplayString());
}
selectNSStringEncodingPreference(c);
}
/**
* Pick the previous encoding preference else default to
* NSSTRINGENCODING.NSUTF8StringEncoding
*
* @param c
*/
public void selectNSStringEncodingPreference(Combo c) {
String previousEncoding = this.getDialogSettings().get(NSSTRING_ENCODING_KEY);
if (previousEncoding != null && previousEncoding.length() > 0) {
int i = 0;
for (NSSTRINGENCODING entry : NSSTRINGENCODING.values()) {
if (previousEncoding.equals(entry.getDisplayString())) {
c.select(i);
return;
}
i++;
}
}
// default
c.select(0);
}
/**
* Return current selected encoding
*
* @return defaults to NSUTF8StringEncoding
*/
public String getSelectedEncoding() {
return getEncodingForDisplayString(_encodingCombo.getText());
// return NSSTRINGENCODING.NSUTF8StringEncoding.getDisplayString();
}
/**
* Return the encoding value to insert into the .woo file
*
* @param displayString
* @return selected encoding or NSUTF8StringEncoding if not set
*/
public String getEncodingForDisplayString(String displayString) {
for (NSSTRINGENCODING entry : NSSTRINGENCODING.values()) {
if (displayString.equals(entry.getDisplayString())) {
return displayString;
}
}
return NSSTRINGENCODING.NSUTF8StringEncoding.getDefaultEncoding();
}
/**
* (non-Javadoc) Method declared on WizardNewFileCreationPage.
*/
protected String getNewFileLabel() {
return Messages.getString("WOComponentCreationPage.newComponent.label");
}
public IResource[] getResourcesToReveal() {
return _resourcesToReveal;
}
public void setResourcesToReveal(IResource[] resources) {
this._resourcesToReveal = resources;
}
protected String packageNameForComponent(String componentName) {
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(getContainerFullPath().segment(0));
try {
LocalizedComponentsLocateResult result = LocatePlugin.getDefault().getLocalizedComponentsLocateResult(project, componentName);
IType javaType;
if (result != null && (javaType = result.getDotJavaType()) != null) {
return javaType.getPackageFragment().getElementName();
}
} catch (CoreException e) {
e.printStackTrace();
} catch (LocateException e) {
e.printStackTrace();
}
return null;
}
protected String packageNameForComponentFolder(IFolder folder) {
try {
for(IResource resource : folder.members()) {
if ("wo".equals(resource.getLocation().getFileExtension())) {
return packageNameForComponent(resource.getLocation().removeFileExtension().lastSegment());
}
}
} catch (CoreException e) {
e.printStackTrace();
}
return null;
}
protected IPath componentPathForPackage(IPackageFragment _selection) {
try {
LocatePlugin locate = LocatePlugin.getDefault();
for (IJavaElement element : _selection.getChildren()) {
String componentName = locate.fileNameWithoutExtension(element.getElementName());
LocalizedComponentsLocateResult result = locate.getLocalizedComponentsLocateResult(
_selection.getJavaProject().getProject(), componentName);
IFolder[] components = result.getComponents();
if (components.length > 0) {
IContainer selectionPath = components[0].getParent();
return selectionPath.getFullPath();
}
}
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (LocateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected IPackageFragment choosePackage() {
List<IJavaElement> packagesList = new LinkedList<IJavaElement>();
try {
IProject actualProject = ResourcesPlugin.getWorkspace().getRoot().getProject(getContainerFullPath().segment(0));
IJavaProject javaProject = JavaModelManager.getJavaModelManager().getJavaModel().getJavaProject(actualProject);
IPackageFragmentRoot[] roots = javaProject.getPackageFragmentRoots();
for (int k = 0; k < roots.length; k++) {
if (roots[k].getKind() == IPackageFragmentRoot.K_SOURCE) {
IJavaElement[] children = roots[k].getChildren();
for (int i = 0; i < children.length; i++) {
packagesList.add(children[i]);
}
}
}
} catch (JavaModelException e) {
// JTourBusPlugin.log(e);
e.printStackTrace();
}
IJavaElement[] packages = packagesList.toArray(new IJavaElement[packagesList.size()]);
ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT));
dialog.setIgnoreCase(false);
dialog.setTitle(NewWizardMessages.NewTypeWizardPage_ChoosePackageDialog_title);
dialog.setMessage(NewWizardMessages.NewTypeWizardPage_ChoosePackageDialog_description);
dialog.setEmptyListMessage(NewWizardMessages.NewTypeWizardPage_ChoosePackageDialog_empty);
dialog.setFilter(_packageDialogField.getText());
dialog.setElements(packages);
if (dialog.open() == Window.OK) {
return (IPackageFragment) dialog.getFirstResult();
}
return null;
}
protected String chooseSuperclass() {
Set<String> superclasses = new HashSet<String>();
try {
IProject actualProject = ResourcesPlugin.getWorkspace().getRoot().getProject(getContainerFullPath().segment(0));
IJavaProject javaProject = JavaModelManager.getJavaModelManager().getJavaModel().getJavaProject(actualProject);
TypeNameCollector typeNameCollector = new TypeNameCollector(javaProject, false);
BindingReflectionUtils.findMatchingElementClassNames("", SearchPattern.R_PREFIX_MATCH, typeNameCollector, new NullProgressMonitor());
for (String typeName : typeNameCollector.getTypeNames()) {
// int dotIndex = typeName.lastIndexOf('.');
// if (dotIndex != -1) {
// typeName = typeName.substring(dotIndex + 1);
// }
// validValues.add("\"" + typeName + "\"");
superclasses.add(typeName);
}
} catch (JavaModelException e) {
// JTourBusPlugin.log(e);
e.printStackTrace();
}
ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), new StringLabelProvider());
dialog.setIgnoreCase(true);
dialog.setTitle(NewWizardMessages.NewTypeWizardPage_SuperClassDialog_title);
dialog.setMessage(NewWizardMessages.NewTypeWizardPage_SuperClassDialog_message);
// dialog.setEmptyListMessage(NewWizardMessages.NewTypeWiz);
dialog.setFilter(_superclassDialogField.getText());
dialog.setElements(superclasses.toArray());
if (dialog.open() == Window.OK) {
return (String) dialog.getFirstResult();
}
return null;
}
protected void refreshButtonSettings(Button button) {
if (button.equals(_bodyCheckbox)) {
if (_bodyCheckbox.getSelection()) {
_htmlCombo.setEnabled(true);
} else {
_htmlCombo.setEnabled(false);
}
}
if (button.equals(_apiCheckbox)) {
// if (_apiCheckbox.getSelection()) {
// setPageComplete(false);
// }
}
}
protected void handleSelectionEvent(SelectionEvent event) {
Widget w = event.widget;
if (w instanceof Button) {
refreshButtonSettings((Button) w);
}
}
public StringButtonStatusDialogField getPackageDialogField() {
return _packageDialogField;
}
public StringButtonStatusDialogField getSuperclassDialogField() {
return _superclassDialogField;
}
protected class PackageButtonAdapter implements IStringButtonAdapter, IDialogFieldListener {
public void changeControlPressed(DialogField _field) {
IPackageFragment pack = choosePackage();
if (pack != null) {
getPackageDialogField().setText(pack.getElementName());
}
}
public void dialogFieldChanged(DialogField _field) {
// fPackageStatus= packageChanged();
// updatePackageStatusLabel();
}
}
protected class SuperclassButtonAdapter implements IStringButtonAdapter, IDialogFieldListener {
public void changeControlPressed(DialogField _field) {
String superclass = chooseSuperclass();
if (superclass != null) {
getSuperclassDialogField().setText(superclass);
}
}
public void dialogFieldChanged(DialogField _field) {
// fPackageStatus= packageChanged();
// updatePackageStatusLabel();
}
}
protected class ButtonSelectionAdaptor implements SelectionListener {
public void widgetDefaultSelected(SelectionEvent event) {
handleSelectionEvent(event);
}
public void widgetSelected(SelectionEvent event) {
handleSelectionEvent(event);
}
}
}