/*******************************************************************************
* Copyright (c) 2012 VMware, Inc.
* 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:
* VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.wizard.ui;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.ui.JavaElementLabelProvider;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
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.Display;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.forms.events.ExpansionAdapter;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
import org.springframework.ide.eclipse.beans.core.namespaces.NamespaceUtils;
import org.springframework.ide.eclipse.beans.ui.BeansUIImages;
import org.springframework.ide.eclipse.beans.ui.editor.util.BeansEditorUtils;
import org.springframework.ide.eclipse.config.core.schemas.BeansSchemaConstants;
import org.springframework.ide.eclipse.core.java.Introspector;
import org.springframework.ide.eclipse.core.java.JdtUtils;
import org.springframework.ide.eclipse.wizard.Messages;
import org.springframework.ide.eclipse.wizard.WizardPlugin;
import org.springframework.ide.eclipse.wizard.core.WizardContentAssistConverter;
import org.springsource.ide.eclipse.commons.core.StatusHandler;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* Wizard page for specifying bean properties
* @author Terry Denney
* @author Leo Dos Santos
* @author Christian Dupuis
* @since 2.0
*/
@SuppressWarnings("restriction")
public class BeanPropertiesWizardPage extends AbstractBeanWizardPage {
private Table propertiesTable, constructorArgsTable;
private Image[] errorImages, warningImages;
private int propertyProblemCounter, constArgProblemCounter;
private static final int PROPERTY = 0, CONSTRUCTOR_ARG = 1;
private final Set<String> definedProperties;
private ComboViewer constructorCombo;
private IStructuredContentProvider comboContentProvider;
private static final String DEFAULT_MESSAGE = Messages.getString("BeanPropertiesWizardPage.TITLE_DESCRIPTION"); //$NON-NLS-1$
private Button ignoreErrorButton;
private static final String ICON_PATH_PREFIX = "icons/full/etool16/", ERROR_ICON = "error.gif",
WARNING_ICON = "warning.gif", ERROR_ICON2 = "error2.gif", WARNING_ICON2 = "warning2.gif";
protected BeanPropertiesWizardPage(String pageName, BeanWizard wizard) {
super(pageName, wizard);
setTitle(Messages.getString("BeanPropertiesWizardPage.TITLE")); //$NON-NLS-1$
setDescription(Messages.getString("BeanPropertiesWizardPage.TITLE_DESCRIPTION")); //$NON-NLS-1$
this.definedProperties = new HashSet<String>();
this.propertyProblemCounter = 0;
this.constArgProblemCounter = 0;
}
protected boolean checkCanProceed(int kind) {
if (kind == PROPERTY) {
return true;
}
if (!constructorCombo.getSelection().isEmpty()) {
boolean confirmed = MessageDialog
.openConfirm(
getShell(),
Messages.getString("BeanPropertiesWizardPage.CONFIRM_CONSTRUCTOR_CHANGE_DIALOG_TITLE"), Messages.getString("BeanPropertiesWizardPage.CONFIRM_CONSTRUCTOR_CHANGE_DIALOG_MESSAGE")); //$NON-NLS-1$ //$NON-NLS-2$
if (confirmed) {
constructorCombo.setSelection(StructuredSelection.EMPTY);
}
return confirmed;
}
return true;
}
private void createButtons(final int kind, Composite parent, final String nodeName, final Table table) {
Composite rightContainer = new Composite(parent, SWT.NONE);
rightContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true));
GridLayout rightLayout = new GridLayout();
rightLayout.marginHeight = 0;
rightLayout.marginWidth = 0;
rightContainer.setLayout(rightLayout);
GridData buttonData = new GridData();
Button addButton = new Button(rightContainer, SWT.NONE);
addButton.setText(Messages.getString("BeanPropertiesWizardPage.ADD_BUTTON_LABEL")); //$NON-NLS-1$
addButton.setLayoutData(buttonData);
addButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (checkCanProceed(kind)) {
IDOMElement newElement = createNewChild(kind, nodeName);
String title = null;
if (kind == PROPERTY) {
title = Messages.getString("BeanPropertiesWizardPage.NEW_PROPERTY_DIALOG_TITLE"); //$NON-NLS-1$
}
else if (kind == CONSTRUCTOR_ARG) {
title = Messages.getString("BeanPropertiesWizardPage.NEW_CONSTRUCTOR_ARG_DIALOG_TITLE"); //$NON-NLS-1$
}
BeanChildDialog dialog = createDialog(kind, newElement, title, true);
int status = dialog.open();
if (status == Dialog.OK) {
createElementItem(kind, newElement);
}
else {
wizard.getNewBean().removeChild(newElement);
}
}
}
});
Button editButton = new Button(rightContainer, SWT.NONE);
editButton.setText(Messages.getString("BeanPropertiesWizardPage.EDIT_LABEL")); //$NON-NLS-1$
editButton.setLayoutData(buttonData);
editButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
editSelectedElementItem(kind, table);
}
});
Button removeButton = new Button(rightContainer, SWT.NONE);
removeButton.setText(Messages.getString("BeanPropertiesWizardPage.REMOVE_LABEL")); //$NON-NLS-1$
removeButton.setLayoutData(buttonData);
removeButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (checkCanProceed(kind)) {
removeSelected(kind, table);
}
}
});
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseDoubleClick(MouseEvent e) {
editSelectedElementItem(kind, table);
}
});
}
private void createCombo(Composite sectionComposite) {
constructorCombo = new ComboViewer(sectionComposite);
comboContentProvider = new IStructuredContentProvider() {
public void dispose() {
}
public Object[] getElements(Object inputElement) {
IFile beanFile = wizard.getBeanFile();
if (beanFile == null) {
return new Object[0];
}
String className = BeansEditorUtils.getClassNameForBean(beanFile, wizard.getOriginalDocument(), wizard
.getNewBean());
IType type = JdtUtils.getJavaType(beanFile.getProject(), className);
Set<IMethod> constructors = null;
try {
constructors = Introspector.findAllConstructors(type);
}
catch (JavaModelException e) {
StatusHandler.log(new Status(IStatus.ERROR, WizardPlugin.PLUGIN_ID,
"Failed to populate constructor combo.", e));
}
if (constructors == null) {
return new Object[0];
}
return constructors.toArray();
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
};
constructorCombo.setContentProvider(comboContentProvider);
constructorCombo.setInput(this);
constructorCombo.setLabelProvider(new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT));
constructorCombo.addFilter(new ViewerFilter() {
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (element instanceof IMethod) {
IMethod method = (IMethod) element;
try {
return method.getParameterNames().length > 0;
}
catch (JavaModelException e) {
StatusHandler.log(new Status(IStatus.ERROR, WizardPlugin.PLUGIN_ID,
"Failed to populate constructor combo.", e));
}
}
return false;
}
});
GridData comboData = new GridData(SWT.FILL, SWT.FILL, true, false);
comboData.horizontalSpan = 2;
comboData.widthHint = 400;
constructorCombo.getControl().setLayoutData(comboData);
constructorCombo.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
ISelection selection = constructorCombo.getSelection();
if (selection instanceof StructuredSelection) {
StructuredSelection structuredSelection = (StructuredSelection) selection;
Object[] items = structuredSelection.toArray();
if (items.length == 1) {
IMethod constructor = (IMethod) items[0];
int numParam = constructor.getNumberOfParameters();
int itemCount = constructorArgsTable.getItemCount();
if (itemCount != numParam) {
if (itemCount > 0) {
boolean confirmed = MessageDialog
.openConfirm(
getShell(),
Messages
.getString("BeanPropertiesWizardPage.CHANG_CONSTRUCTOR_ARGS_CONFIRM_DIALOG_TITLE"), Messages.getString("BeanPropertiesWizardPage.CHANG_CONSTRUCTOR_ARGS_CONFIRM_DIALOG_MESSAGE")); //$NON-NLS-1$ //$NON-NLS-2$
if (!confirmed) {
return;
}
constructorArgsTable.removeAll();
}
for (int i = 0; i < numParam; i++) {
IDOMElement child = createNewChild(CONSTRUCTOR_ARG,
BeansSchemaConstants.ELEM_CONSTRUCTOR_ARG);
createElementItem(CONSTRUCTOR_ARG, child);
}
constructorArgsTable.redraw();
}
}
}
}
});
}
private void createConstructorArgsSection(Composite container) {
Composite sectionComposite = createSection(container, Messages
.getString("BeanPropertiesWizardPage.CONSTRUCTOR_ARGS_SECTION_TITLE"), false); //$NON-NLS-1$
createCombo(sectionComposite);
constructorArgsTable = createTable(sectionComposite);
TableColumn valueColumn = new TableColumn(constructorArgsTable, SWT.NONE);
valueColumn.setText(Messages.getString("BeanPropertiesWizardPage.VALUE/REF_COLUMN_TITLE")); //$NON-NLS-1$
valueColumn.setWidth(250);
createButtons(CONSTRUCTOR_ARG, sectionComposite, BeansSchemaConstants.ELEM_CONSTRUCTOR_ARG,
constructorArgsTable);
}
public void createControl(Composite parent) {
try {
String prefix = WizardPlugin.getDefault().getBundle().getEntry("/") + ICON_PATH_PREFIX;
Display display = getShell().getDisplay();
errorImages = new Image[] {
new Image(display, ImageDescriptor.createFromURL(new URL(prefix + ERROR_ICON)).getImageData()),
new Image(display, ImageDescriptor.createFromURL(new URL(prefix + ERROR_ICON2)).getImageData()) };
warningImages = new Image[] {
new Image(display, ImageDescriptor.createFromURL(new URL(prefix + WARNING_ICON)).getImageData()),
new Image(display, ImageDescriptor.createFromURL(new URL(prefix + WARNING_ICON2)).getImageData()) };
}
catch (MalformedURLException e) {
StatusHandler.log(new Status(IStatus.ERROR, WizardPlugin.PLUGIN_ID,
"Failed to create bean properties wizard page.", e));
}
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(new GridLayout());
Composite topContainer = new Composite(container, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginWidth = 0;
layout.marginRight = 0;
topContainer.setLayout(layout);
topContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
Composite bottomContainer = new Composite(container, SWT.NONE);
GridLayout layout2 = new GridLayout();
layout2.marginWidth = 0;
bottomContainer.setLayout(layout2);
bottomContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
createPropertySection(topContainer);
createConstructorArgsSection(bottomContainer);
ignoreErrorButton = wizard.createIgnoreErrorButton(container, this);
ignoreErrorButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
validateElements();
updateMessage();
}
});
populateValues();
setControl(container);
}
private BeanChildDialog createDialog(int kind, IDOMElement element, String title, boolean isNew) {
if (kind == PROPERTY) {
return new PropertyDialog(getShell(), wizard, element, title, definedProperties, isNew);
}
else if (kind == CONSTRUCTOR_ARG) {
return new ConstructorArgDialog(getShell(), wizard, element, title, isNew);
}
return null;
}
private void createElementItem(int kind, IDOMElement newElement) {
Table table = null;
if (kind == PROPERTY) {
table = propertiesTable;
definedProperties.add(newElement.getAttribute(BeansSchemaConstants.ATTR_NAME));
}
else if (kind == CONSTRUCTOR_ARG) {
table = constructorArgsTable;
}
TableItem item = new TableItem(table, SWT.NONE);
item.setData(newElement);
item.setText(getElementItemText(kind, newElement));
if (kind == PROPERTY) {
propertyProblemCounter += validateElement(kind, newElement, item);
}
else {
constArgProblemCounter += validateElement(kind, newElement, item);
}
updateMessage();
}
private IDOMElement createNewChild(int kind, String nodeName) {
IDOMElement newBean = wizard.getNewBean();
IDOMElement newChild = (IDOMElement) newBean.getOwnerDocument().createElementNS(
NamespaceUtils.DEFAULT_NAMESPACE_URI, nodeName);
if (kind == PROPERTY) {
newBean.appendChild(newChild);
}
else {
// find the first property child and insert constructor arg before
// it
NodeList childNodes = newBean.getChildNodes();
Node firstPropertyNode = null;
for (int i = 0; i < childNodes.getLength(); i++) {
Node childNode = childNodes.item(i);
String childNodeName = childNode.getNodeName();
if (childNodeName.equals(BeansSchemaConstants.ELEM_PROPERTY)) {
firstPropertyNode = childNode;
break;
}
}
if (firstPropertyNode != null) {
newBean.insertBefore(newChild, firstPropertyNode);
}
else {
newBean.appendChild(newChild);
}
}
return newChild;
}
private void createPropertySection(Composite container) {
Composite sectionComposite = createSection(container, Messages
.getString("BeanPropertiesWizardPage.PROPERTIES_SECTION_TITLE"), true); //$NON-NLS-1$
propertiesTable = createTable(sectionComposite);
TableColumn nameColumn = new TableColumn(propertiesTable, SWT.NONE);
nameColumn.setText(Messages.getString("BeanPropertiesWizardPage.NAME_COLUMN_TITLE")); //$NON-NLS-1$
nameColumn.setWidth(150);
TableColumn valueColumn = new TableColumn(propertiesTable, SWT.NONE);
valueColumn.setText(Messages.getString("BeanPropertiesWizardPage.VALUE/REF_COLUMN_TITLE")); //$NON-NLS-1$
valueColumn.setWidth(250);
createButtons(PROPERTY, sectionComposite, BeansSchemaConstants.ELEM_PROPERTY, propertiesTable);
}
private Composite createSection(final Composite container, String title, boolean expanded) {
final ExpandableComposite section = new FormToolkit(getShell().getDisplay()).createExpandableComposite(
container, ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR | ExpandableComposite.COMPACT);
section.setText(title);
GridData sectionData = new GridData(SWT.FILL, SWT.TOP, true, false);
section.clientVerticalSpacing = 0;
section.setLayoutData(sectionData);
section.setBackground(container.getBackground());
Composite sectionComposite = new Composite(section, SWT.NONE);
section.setClient(sectionComposite);
GridLayout layout = new GridLayout(2, false);
layout.marginWidth = 0;
sectionComposite.setLayout(layout);
section.addExpansionListener(new ExpansionAdapter() {
@Override
public void expansionStateChanged(ExpansionEvent e) {
getShell().pack();
}
});
section.setExpanded(expanded);
return sectionComposite;
}
private Table createTable(Composite container) {
GridData tableData = new GridData(SWT.FILL, SWT.FILL, true, true);
tableData.heightHint = 100;
Table table = new Table(container, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI);
table.setLayoutData(tableData);
table.setLinesVisible(true);
table.setHeaderVisible(true);
return table;
}
@Override
public void dispose() {
if (errorImages != null) {
errorImages[0].dispose();
errorImages[1].dispose();
warningImages[0].dispose();
warningImages[1].dispose();
}
}
private void editSelectedElementItem(int kind, Table table) {
TableItem[] selectedItems = table.getSelection();
if (selectedItems.length == 1) {
TableItem item = selectedItems[0];
IDOMElement element = (IDOMElement) item.getData();
int numProblemPreEdit = validateElement(kind, element, item);
String title = null;
if (kind == PROPERTY) {
title = Messages.getString("BeanPropertiesWizardPage.EDIT_PROPERTY_DIALOG_TITLE"); //$NON-NLS-1$
definedProperties.remove(element.getAttribute(BeansSchemaConstants.ATTR_NAME));
}
else if (kind == CONSTRUCTOR_ARG) {
title = Messages.getString("BeanPropertiesWizardPage.EDIT_CONSTRUCTOR_ARG_DIALOG_TITLE"); //$NON-NLS-1$
}
BeanChildDialog dialog = createDialog(kind, element, title, false);
int status = dialog.open();
if (status == Dialog.OK) {
item.setText(getElementItemText(kind, element));
int numProblemPostEdit = validateElement(kind, element, item);
if (kind == PROPERTY) {
definedProperties.add(element.getAttribute(BeansSchemaConstants.ATTR_NAME));
propertyProblemCounter += (numProblemPostEdit - numProblemPreEdit);
}
else {
constArgProblemCounter += (numProblemPostEdit - numProblemPreEdit);
}
}
}
updateMessage();
}
private void fillConstructorDropdownBox() {
constructorCombo.refresh(true);
}
private String getElementAttributeText(IDOMElement element, String attributeName) {
if (element.hasAttribute(attributeName)) {
return element.getAttribute(attributeName);
}
else {
return Messages.getString("BeanPropertiesWizardPage.EMPTY_CELL_LABEL"); //$NON-NLS-1$
}
}
private String[] getElementItemText(int kind, IDOMElement element) {
String name = getElementAttributeText(element, BeansSchemaConstants.ATTR_NAME);
String valueRef = getElementAttributeText(element, BeansSchemaConstants.ATTR_REF);
if (valueRef.equals(Messages.getString("BeanPropertiesWizardPage.EMPTY_CELL_LABEL"))) { //$NON-NLS-1$
valueRef = getElementAttributeText(element, BeansSchemaConstants.ATTR_VALUE);
}
if (kind == PROPERTY) {
return new String[] { name, valueRef };
}
if (kind == CONSTRUCTOR_ARG) {
return new String[] { valueRef };
}
return null;
}
@Override
public boolean isPageComplete() {
if (propertyProblemCounter < 0 || constArgProblemCounter < 0) {
validateElements();
}
return BeanWizard.getIgnoreError() || (propertyProblemCounter == 0 && constArgProblemCounter == 0);
}
private void populateValues() {
IDOMElement newBean = wizard.getNewBean();
if (newBean == null) {
return;
}
NodeList childNodes = newBean.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
Node childNode = childNodes.item(i);
if (childNode instanceof IDOMElement) {
IDOMElement domNode = (IDOMElement) childNode;
String nodeName = domNode.getNodeName();
if (nodeName != null) {
if (nodeName.equals(BeansSchemaConstants.ELEM_PROPERTY)) {
createElementItem(PROPERTY, domNode);
}
else if (nodeName.equals(BeansSchemaConstants.ELEM_CONSTRUCTOR_ARG)) {
createElementItem(CONSTRUCTOR_ARG, domNode);
}
}
}
}
Object[] elements = comboContentProvider.getElements(this);
int itemCount = constructorArgsTable.getItemCount();
for (Object element : elements) {
if (element instanceof IMethod) {
IMethod constructor = (IMethod) element;
try {
String[] parameterNames = constructor.getParameterNames();
if (parameterNames != null && parameterNames.length == itemCount) {
constructorCombo.setSelection(new StructuredSelection(constructor));
}
}
catch (JavaModelException e) {
StatusHandler.log(new Status(IStatus.ERROR, WizardPlugin.PLUGIN_ID,
"Failed to populate constructor combo.", e));
}
}
}
}
private void removeSelected(int kind, Table table) {
TableItem[] items = table.getItems();
int[] indices = table.getSelectionIndices();
IDOMElement newBean = wizard.getNewBean();
for (int index : indices) {
TableItem item = items[index];
Object data = item.getData();
if (data != null && data instanceof IDOMElement) {
IDOMElement element = (IDOMElement) data;
if (kind == PROPERTY) {
propertyProblemCounter -= validateElement(kind, element, item);
}
else {
constArgProblemCounter -= validateElement(kind, element, item);
}
newBean.removeChild(element);
if (kind == PROPERTY) {
definedProperties.remove(element.getAttribute(BeansSchemaConstants.ATTR_NAME));
}
}
}
table.remove(indices);
updateMessage();
}
public void resetProblemCounter() {
propertyProblemCounter = -1;
constArgProblemCounter = -1;
}
@Override
public void updateMessage() {
String text = "error";
if (BeanWizard.getIgnoreError()) {
text = "warning";
}
if (propertyProblemCounter > 0) {
if (propertyProblemCounter == 1) {
setDialogMessage("There is 1 " + text + " in the Properties section.");
}
else {
setDialogMessage("There are " + propertyProblemCounter + " " + text + "s in the Properties section.");
}
}
else if (constArgProblemCounter > 0) {
if (constArgProblemCounter == 1) {
setDialogMessage("There is 1 " + text + " in the Constructor Args section.");
}
else {
setDialogMessage("There are " + constArgProblemCounter + " " + text
+ "s in the Constructor Args section.");
}
}
else {
setMessage(DEFAULT_MESSAGE);
}
if (isCurrentPage()) {
getWizard().getContainer().updateButtons();
}
}
private boolean validateAttribute(String attributeValue, String attributeName, IDOMElement property,
TableItem item, int kind) {
boolean errorFound = false;
Image[] images;
if (BeanWizard.getIgnoreError()) {
images = warningImages;
}
else {
images = errorImages;
}
int index = 0;
if (attributeValue != null) {
WizardContentAssistConverter contentAssistConverter = new WizardContentAssistConverter(property, property
.getAttributeNode(attributeName), wizard.getBeanFile(), wizard.getOriginalDocument());
if (attributeName.equals(BeansSchemaConstants.ATTR_NAME)) {
errorFound = contentAssistConverter.getPropertyProposals(attributeValue, true).isEmpty();
if (errorFound) {
item.setImage(index, images[index]);
}
else {
item.setImage(index, BeansUIImages.getImage(BeansUIImages.IMG_OBJS_PROPERTY));
}
}
else if (attributeName.equals(BeansSchemaConstants.ATTR_REF)) {
if (kind == PROPERTY) {
index = 1;
}
if (attributeValue.length() == 0) {
item.setImage(index, null);
}
else {
errorFound = contentAssistConverter.getReferenceableBeanDescriptions(attributeValue, true)
.isEmpty();
if (errorFound) {
item.setImage(index, images[index]);
}
else {
item.setImage(index, null);
}
}
}
}
if (kind == PROPERTY) {
propertiesTable.update();
}
return errorFound;
}
private int validateElement(int kind, IDOMElement property, TableItem item) {
int counter = 0;
if (kind == PROPERTY) {
if (validateAttribute(property.getAttribute(BeansSchemaConstants.ATTR_NAME),
BeansSchemaConstants.ATTR_NAME, property, item, kind)) {
counter++;
}
}
if (validateAttribute(property.getAttribute(BeansSchemaConstants.ATTR_REF), BeansSchemaConstants.ATTR_REF,
property, item, kind)) {
counter++;
}
return counter;
}
public void validateElements() {
fillConstructorDropdownBox();
propertyProblemCounter = 0;
TableItem[] items = propertiesTable.getItems();
for (TableItem item : items) {
Object data = item.getData();
if (data instanceof IDOMElement) {
IDOMElement property = (IDOMElement) data;
if (property.getNodeName().equals(BeansSchemaConstants.ELEM_PROPERTY)) {
propertyProblemCounter += validateElement(PROPERTY, property, item);
}
}
}
constArgProblemCounter = 0;
items = constructorArgsTable.getItems();
for (TableItem item : items) {
Object data = item.getData();
if (data instanceof IDOMElement) {
IDOMElement constructorArg = (IDOMElement) data;
if (constructorArg.getNodeName().equals(BeansSchemaConstants.ELEM_CONSTRUCTOR_ARG)) {
constArgProblemCounter += validateElement(CONSTRUCTOR_ARG, constructorArg, item);
}
}
}
ignoreErrorButton.setSelection(BeanWizard.getIgnoreError());
updateMessage();
}
}