Java tutorial
/******************************************************************************* * This file is protected by Copyright. * Please refer to the COPYRIGHT file distributed with this source distribution. * * This file is part of REDHAWK IDE. * * 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 *******************************************************************************/ package gov.redhawk.ide.codegen.ui; import gov.redhawk.codegen.validation.OutputDirectoryValidator; import gov.redhawk.ide.codegen.CodegenFactory; import gov.redhawk.ide.codegen.CodegenPackage; import gov.redhawk.ide.codegen.ICodeGeneratorDescriptor; import gov.redhawk.ide.codegen.IPropertyDescriptor; import gov.redhawk.ide.codegen.ITemplateDesc; import gov.redhawk.ide.codegen.ImplementationSettings; import gov.redhawk.ide.codegen.Property; import gov.redhawk.ide.codegen.RedhawkCodegenActivator; import gov.redhawk.ide.codegen.provider.CodegenItemProviderAdapterFactory; import gov.redhawk.ide.codegen.ui.internal.CustomPropertyItemProvider; import gov.redhawk.ide.codegen.ui.internal.PropertyDialog; import gov.redhawk.ide.codegen.ui.internal.WaveDevItemProviderAdapterFactoryAdapter; import gov.redhawk.ide.codegen.util.CodegenFileHelper; import gov.redhawk.ui.util.EMFEmptyStringToNullUpdateValueStrategy; import gov.redhawk.ui.util.SWTUtil; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import mil.jpeojtrs.sca.spd.Implementation; import mil.jpeojtrs.sca.spd.SoftPkg; import org.eclipse.core.databinding.UpdateValueStrategy; import org.eclipse.core.databinding.ValidationStatusProvider; import org.eclipse.core.databinding.conversion.Converter; import org.eclipse.core.databinding.observable.Observables; import org.eclipse.core.databinding.observable.list.IObservableList; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.databinding.observable.value.WritableValue; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.databinding.EMFDataBindingContext; import org.eclipse.emf.databinding.EMFObservables; import org.eclipse.emf.databinding.EMFUpdateValueStrategy; import org.eclipse.emf.ecore.util.EContentAdapter; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory; import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.jface.databinding.swt.SWTObservables; import org.eclipse.jface.databinding.viewers.ViewersObservables; import org.eclipse.jface.databinding.wizard.WizardPageSupport; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.window.Window; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; 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.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; /** * The Class CodeGneratorWizardPage. * * @since 2.1 */ public class DefaultGeneratorPropertiesWizardPage extends WizardPage implements ICodegenWizardPage { private static final int TOOLTIP_DELAY_MILLIS = 300; private static final int TOOLTIP_DISPLAY_TIME_MILLIS = 5000; private class AllRequiredPropertiesValidator extends ValidationStatusProvider { private final WritableValue status; private final IObservableList targets; private final IObservableList models; public AllRequiredPropertiesValidator() { this.status = new WritableValue(); this.status.setValue(Status.OK_STATUS); this.targets = Observables.emptyObservableList(); this.models = Observables.emptyObservableList(); DefaultGeneratorPropertiesWizardPage.this.implSettings.eAdapters().add(new EContentAdapter() { /** * {@inheritDoc} */ @Override public void notifyChanged(final Notification msg) { super.notifyChanged(msg); if (DefaultGeneratorPropertiesWizardPage.this.selectedTemplate == null) { return; } final IPropertyDescriptor[] properties = DefaultGeneratorPropertiesWizardPage.this.selectedTemplate .getPropertyDescriptors(); final ArrayList<IPropertyDescriptor> missing = new ArrayList<IPropertyDescriptor>(); for (final IPropertyDescriptor propDesc : properties) { if (propDesc.isRequired()) { boolean found = false; final Iterator<Property> propIterator = DefaultGeneratorPropertiesWizardPage.this.implSettings .getProperties().iterator(); while (propIterator.hasNext()) { if (propDesc.getKey().equals(propIterator.next().getId())) { found = true; } } if (!found) { missing.add(propDesc); } } } IStatus retVal = Status.OK_STATUS; if (!missing.isEmpty()) { final StringBuilder builder = new StringBuilder(); for (final IPropertyDescriptor propDesc : missing) { builder.append(", " + propDesc.getKey()); } retVal = new Status(IStatus.ERROR, RedhawkCodegenUiActivator.getPluginId(), "Missing property" + builder.toString(), null); } final IStatus finalRetVal = retVal; if (!status.isDisposed()) { AllRequiredPropertiesValidator.this.status.getRealm().exec(new Runnable() { @Override public void run() { if (status.isDisposed()) { return; } AllRequiredPropertiesValidator.this.status.setValue(finalRetVal); } }); } } }); } /** * {@inheritDoc} */ @Override public IObservableList getModels() { return this.models; } /** * {@inheritDoc} */ @Override public IObservableList getTargets() { return this.targets; } /** * {@inheritDoc} */ @Override public IObservableValue getValidationStatus() { return this.status; } } private static final ImageDescriptor TITLE_IMAGE = null; private final EMFDataBindingContext context = new EMFDataBindingContext(); private ImplementationSettings implSettings; private ICodeGeneratorDescriptor codegen = null; private ITemplateDesc selectedTemplate = null; private WizardPageSupport support; private TableViewer propertiesViewer; private ComposedAdapterFactory adapterFactory; private Text generatorLabel = null; private Text outputDirText = null; private ComboViewer templateViewer; private boolean configured; private boolean created; private boolean canFlip = false; private boolean canFinish = false; private SoftPkg softPkg; private String componentType; /** * The Constructor. */ public DefaultGeneratorPropertiesWizardPage() { super("codeGeneratorPage", "Setup Code Generation", DefaultGeneratorPropertiesWizardPage.TITLE_IMAGE); setDescription("Set configuration values of this implementation's code generation properties."); setPageComplete(false); } /** * @since 7.0 */ @Override public void configure(final SoftPkg softPkg, final Implementation spd, final ICodeGeneratorDescriptor desc, final ImplementationSettings implSettings, final String componentType) { this.softPkg = softPkg; this.implSettings = implSettings; this.codegen = desc; this.componentType = componentType; if (desc != null) { final ITemplateDesc[] temps = RedhawkCodegenActivator.getCodeGeneratorTemplatesRegistry() .findTemplatesByCodegen(desc.getId(), componentType); if (this.created) { this.templateViewer.setInput(temps); } final boolean selectDefault = (implSettings.getTemplate() == null) || (implSettings.getTemplate().length() == 0); // Select the appropriate template for (final ITemplateDesc temp : temps) { if ((selectDefault && !temp.notDefaultableGenerator()) || temp.getId().equals(implSettings.getTemplate())) { this.selectedTemplate = temp; if (this.created) { this.templateViewer.setSelection(new StructuredSelection(temp)); this.templateViewer.getCombo().setToolTipText(temp.getDescription()); } break; } } } else { this.templateViewer.setInput(new ITemplateDesc[0]); this.selectedTemplate = null; this.templateViewer.getCombo().setToolTipText(""); } if ((this.implSettings.getProperties().size() == 0) && (this.selectedTemplate != null)) { for (final IPropertyDescriptor prop : this.selectedTemplate.getPropertyDescriptors()) { if (prop.isRequired() && !prop.isDeprecated()) { final Property p = CodegenFactory.eINSTANCE.createProperty(); p.setId(prop.getKey()); p.setValue(prop.getDefaultValue()); this.implSettings.getProperties().add(p); } } } if (!this.context.getBindings().isEmpty()) { this.context.dispose(); } if (this.created) { bind(); } this.configured = true; } /** * {@inheritDoc} */ @Override public void setVisible(final boolean visible) { super.setVisible(visible); if (visible) { setPageComplete(true); } } /** * {@inheritDoc} */ @Override public void createControl(final Composite parent) { // SUPPRESS CHECKSTYLE MethodLength final Composite client = new Composite(parent, SWT.NULL); client.setLayout(new GridLayout(2, false)); Label label; final GridDataFactory labelFactory = GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.FILL); label = new Label(client, SWT.NULL); label.setText("Generator:"); label.setLayoutData(labelFactory.create()); this.generatorLabel = new Text(client, SWT.READ_ONLY | SWT.SINGLE | SWT.BORDER); this.generatorLabel.setEnabled(false); this.generatorLabel.setLayoutData(GridDataFactory.fillDefaults().grab(true, false).create()); label = new Label(client, SWT.NULL); label.setText("Template:"); this.templateViewer = new ComboViewer(client, SWT.BORDER | SWT.SINGLE | SWT.READ_ONLY | SWT.DROP_DOWN); this.templateViewer.getControl() .setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); this.templateViewer.setContentProvider(new ArrayContentProvider()); this.templateViewer.setLabelProvider(new LabelProvider() { /** * {@inheritDoc} */ @Override public String getText(final Object element) { if (element instanceof ITemplateDesc) { return ((ITemplateDesc) element).getName(); } return super.getText(element); } }); this.templateViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(final SelectionChangedEvent event) { final ITemplateDesc desc = (ITemplateDesc) ((IStructuredSelection) event.getSelection()) .getFirstElement(); if (desc != null) { if (desc != DefaultGeneratorPropertiesWizardPage.this.selectedTemplate) { DefaultGeneratorPropertiesWizardPage.this.selectedTemplate = desc; // Remove the old templates properties final EList<Property> properties = DefaultGeneratorPropertiesWizardPage.this.implSettings .getProperties(); if (properties.size() != 0) { properties.clear(); } // Add the new templates properties for (final IPropertyDescriptor value : desc.getPropertyDescriptors()) { if (!value.isDeprecated()) { final Property p = CodegenFactory.eINSTANCE.createProperty(); p.setId(value.getKey()); p.setValue(value.getDefaultValue()); properties.add(p); } } // Update the properties displayed DefaultGeneratorPropertiesWizardPage.this.propertiesViewer .setInput(desc.getPropertyDescriptors()); } // Save the new template and update the tooltip DefaultGeneratorPropertiesWizardPage.this.implSettings.setTemplate(desc.getId()); DefaultGeneratorPropertiesWizardPage.this.templateViewer.getCombo() .setToolTipText(desc.getDescription()); } else { DefaultGeneratorPropertiesWizardPage.this.implSettings.setTemplate(null); } } }); label = new Label(client, SWT.NULL); label.setText("Output Directory:"); this.outputDirText = new Text(client, SWT.BORDER); this.outputDirText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); createExtraArea(client, labelFactory, ((GridLayout) client.getLayout()).numColumns); label = new Label(client, SWT.NULL); label.setText("Properties:"); label.setLayoutData(GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.TOP).create()); final Composite tableComp = new Composite(client, SWT.NULL); final GridLayout layout = SWTUtil.TABLE_ENTRY_LAYOUT_FACTORY.create(); tableComp.setLayout(layout); tableComp.setLayoutData(GridDataFactory.fillDefaults().span(2, 1).grab(true, true).create()); final Table table = new Table(tableComp, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION); table.setLayoutData(GridDataFactory.fillDefaults().span(1, 3).grab(true, true).create()); // SUPPRESS CHECKSTYLE // MagicNumber table.setLinesVisible(true); table.setHeaderVisible(true); final TableLayout tableLayout = new TableLayout(); tableLayout.addColumnData(new ColumnWeightData(40, 100, true)); // SUPPRESS CHECKSTYLE MagicNumber tableLayout.addColumnData(new ColumnWeightData(60, 70, true)); // SUPPRESS CHECKSTYLE MagicNumber table.setLayout(tableLayout); final TableColumn idColumn = new TableColumn(table, SWT.NULL); idColumn.setText("Name"); final TableColumn valueColumn = new TableColumn(table, SWT.NULL); valueColumn.setText("Value"); this.propertiesViewer = new TableViewer(table); ColumnViewerToolTipSupport.enableFor(this.propertiesViewer); final TableViewerColumn idViewer = new TableViewerColumn(this.propertiesViewer, idColumn); idViewer.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(final Object element) { String text = ""; if (element instanceof Property) { if (((Property) element).getId().length() != 0) { final ICodeGeneratorDescriptor generator = RedhawkCodegenActivator .getCodeGeneratorsRegistry().findCodegen( DefaultGeneratorPropertiesWizardPage.this.implSettings.getGeneratorId()); final ITemplateDesc template = getTemplateDesc(generator); for (final IPropertyDescriptor propDesc : template.getPropertyDescriptors()) { if (propDesc.getKey().equals(((Property) element).getId())) { text = propDesc.getName(); break; } } } } return text; }; @Override public String getToolTipText(final Object element) { String text = "No description available for this property"; if (element instanceof Property) { if (((Property) element).getId().length() != 0) { final ICodeGeneratorDescriptor generator = RedhawkCodegenActivator .getCodeGeneratorsRegistry().findCodegen( DefaultGeneratorPropertiesWizardPage.this.implSettings.getGeneratorId()); final ITemplateDesc template = getTemplateDesc(generator); for (final IPropertyDescriptor propDesc : template.getPropertyDescriptors()) { if (propDesc.getKey().equals(((Property) element).getId())) { text = propDesc.getDescription(); break; } } } } return text; }; @Override public Point getToolTipShift(final Object object) { return new Point(5, 5); // SUPPRESS CHECKSTYLE MagicNumber } @Override public int getToolTipDisplayDelayTime(final Object object) { return DefaultGeneratorPropertiesWizardPage.TOOLTIP_DELAY_MILLIS; } @Override public int getToolTipTimeDisplayed(final Object object) { return DefaultGeneratorPropertiesWizardPage.TOOLTIP_DISPLAY_TIME_MILLIS; } }); final TableViewerColumn valueViewer = new TableViewerColumn(this.propertiesViewer, valueColumn); valueViewer.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(final Object element) { String text = ""; if (element instanceof Property) { final Property prop = (Property) element; if (prop.getId().length() != 0) { final ICodeGeneratorDescriptor generator = RedhawkCodegenActivator .getCodeGeneratorsRegistry().findCodegen( DefaultGeneratorPropertiesWizardPage.this.implSettings.getGeneratorId()); final ITemplateDesc template = getTemplateDesc(generator); for (final IPropertyDescriptor propDesc : template.getPropertyDescriptors()) { if (propDesc.getKey().equals(prop.getId())) { text = propDesc.getDefaultValue(); for (final Property tempProp : DefaultGeneratorPropertiesWizardPage.this.implSettings .getProperties()) { if (tempProp.getId().equals(prop.getId())) { text = tempProp.getValue(); break; } } break; } } } } return text; }; }); this.propertiesViewer.setContentProvider(new AdapterFactoryContentProvider(getAdapterFactory())); this.propertiesViewer.setComparator(createPropertiesViewerComparator()); this.propertiesViewer.setFilters(createPropertiesViewerFilter()); this.propertiesViewer.setColumnProperties(new String[] { CodegenPackage.Literals.PROPERTY__ID.getName(), CodegenPackage.Literals.PROPERTY__VALUE.getName() }); final Button addButton = new Button(tableComp, SWT.PUSH); addButton.setText("Add..."); addButton.setLayoutData(GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).create()); addButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { handleAddProperty(); } }); final Button editButton = new Button(tableComp, SWT.PUSH); editButton.setText("Edit"); editButton.setLayoutData(GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).create()); editButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { handleEditProperty(); } }); editButton.setEnabled(false); final Button removeButton = new Button(tableComp, SWT.PUSH); removeButton.setText("Remove"); removeButton.setLayoutData(GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).create()); removeButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { handleRemoveProperty(); } }); removeButton.setEnabled(!this.propertiesViewer.getSelection().isEmpty()); this.propertiesViewer.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(final SelectionChangedEvent event) { removeButton.setEnabled(!event.getSelection().isEmpty()); editButton.setEnabled(!event.getSelection().isEmpty()); } }); if (this.configured) { bind(); } this.created = true; setControl(client); setPageComplete(false); } /** * This method is used to add extra Generator Settings information for * subclasses. * * @param parent the parent composite * @param labelFactory the GridDataFactory for creating labels * @param numColumns the number of columns for the current layout */ protected void createExtraArea(final Composite parent, final GridDataFactory labelFactory, final int numColumns) { } private void bind() { initFields(); this.context.bindValue(ViewersObservables.observeSingleSelection(this.templateViewer), EMFObservables.observeValue(this.implSettings, CodegenPackage.Literals.IMPLEMENTATION_SETTINGS__TEMPLATE), createTemplateTargetToModel(), createTemplateModelToTarget()); this.context.bindValue(SWTObservables.observeText(this.outputDirText, SWT.Modify), EMFObservables.observeValue(this.implSettings, CodegenPackage.Literals.IMPLEMENTATION_SETTINGS__OUTPUT_DIR), new UpdateValueStrategy().setAfterConvertValidator(new OutputDirectoryValidator(this.softPkg)), null); if ((this.implSettings.getOutputDir() == null) || "".equals(this.implSettings.getOutputDir().trim())) { setDefaults(); } else { selectInitialTemplate(false); } this.propertiesViewer.setInput(this.implSettings); this.context.addValidationStatusProvider(new AllRequiredPropertiesValidator()); this.support = WizardPageSupport.create(this, this.context); } private void initFields() { this.generatorLabel.setText(this.codegen.getName()); final ITemplateDesc[] temps = RedhawkCodegenActivator.getCodeGeneratorTemplatesRegistry() .findTemplatesByCodegen(this.codegen.getId(), this.componentType); this.templateViewer.setInput(temps); } private void selectInitialTemplate(final boolean setDefault) { final ITemplateDesc[] temps = RedhawkCodegenActivator.getCodeGeneratorTemplatesRegistry() .findTemplatesByCodegen(this.codegen.getId(), this.componentType); final ITemplateDesc[] input = temps; String templateId = this.implSettings.getTemplate(); // Use this to select the legacy code generator template if (setDefault && "src/".equals(templateId) && (this.implSettings.getProperties().size() > 0)) { templateId = this.implSettings.getGeneratorId(); } if (templateId != null) { for (final ITemplateDesc temp : input) { if (temp.getId().equals(templateId)) { this.implSettings.setTemplate(templateId); this.templateViewer.setSelection(new StructuredSelection(temp)); this.templateViewer.getCombo().setToolTipText(temp.getDescription()); break; } } } else { for (final ITemplateDesc temp : input) { if (!temp.notDefaultableGenerator()) { this.implSettings.setTemplate(temp.getId()); this.templateViewer.setSelection(new StructuredSelection(temp)); this.templateViewer.getCombo().setToolTipText(temp.getDescription()); break; } } } } private void setDefaults() { if (this.codegen != null) { if (this.generatorLabel != null) { this.generatorLabel.setText(this.codegen.getName()); } if (this.templateViewer != null) { this.selectInitialTemplate(true); } this.setPageComplete(!this.selectedTemplate.hasSettings()); this.implSettings.setOutputDir(CodegenFileHelper.createDefaultOutputDir(this.softPkg, this.codegen)); if (this.outputDirText != null) { this.outputDirText.setText(this.implSettings.getOutputDir()); } this.implSettings.setGeneratorId(this.codegen.getId()); } else { if (this.generatorLabel != null) { this.generatorLabel.setText(""); } if (this.templateViewer != null) { this.templateViewer.setInput(Collections.EMPTY_LIST); this.templateViewer.setSelection(new StructuredSelection()); this.selectedTemplate = null; } if (this.outputDirText != null) { this.outputDirText.setText(""); } this.implSettings.setGeneratorId(null); } } /** * Handle remove property. */ protected void handleRemoveProperty() { this.implSettings.getProperties() .remove(((IStructuredSelection) this.propertiesViewer.getSelection()).getFirstElement()); } /** * Handle edit property. */ protected void handleEditProperty() { final Property oldValue = (Property) ((IStructuredSelection) this.propertiesViewer.getSelection()) .getFirstElement(); final Property propNewValue = EcoreUtil.copy(oldValue); final PropertyDialog dialog = new PropertyDialog(getShell(), "Edit Property", propNewValue, this.getTemplateDesc(this.codegen)); if (dialog.open() == Window.OK) { EcoreUtil.replace(this.implSettings, CodegenPackage.Literals.IMPLEMENTATION_SETTINGS__PROPERTIES, oldValue, dialog.getValue()); } } /** * Handle add property. */ protected void handleAddProperty() { final PropertyDialog dialog = new PropertyDialog(getShell(), "Add Property", null, this.getTemplateDesc(this.codegen)); if (dialog.open() == Window.OK) { this.implSettings.getProperties().add(dialog.getValue()); } } /** * Creates the properties viewer filter. * * @return the viewer filter[] */ private ViewerFilter[] createPropertiesViewerFilter() { final ViewerFilter[] filters = new ViewerFilter[1]; filters[0] = new ViewerFilter() { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { if (element instanceof IPropertyDescriptor) { return !((IPropertyDescriptor) element).isDeprecated(); } return true; } }; return filters; } /** * Creates the properties viewer comparator. * * @return the viewer comparator */ private ViewerComparator createPropertiesViewerComparator() { return new ViewerComparator(); } /** * Gets the adapter factory. * * @return the adapter factory */ private AdapterFactory getAdapterFactory() { if (this.adapterFactory == null) { this.adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); this.adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory()); final WaveDevItemProviderAdapterFactoryAdapter adapter = new WaveDevItemProviderAdapterFactoryAdapter(); adapter.setPropertyAdapter(new CustomPropertyItemProvider(adapter)); this.adapterFactory.addAdapterFactory(adapter); this.adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory()); this.adapterFactory.addAdapterFactory(new CodegenItemProviderAdapterFactory()); } return this.adapterFactory; } /** * {@inheritDoc} */ @Override public void dispose() { if (this.support != null) { this.support.dispose(); } if (this.adapterFactory != null) { this.adapterFactory.dispose(); } if (this.context != null) { this.context.dispose(); } super.dispose(); } /** * Gets the implSettings. * * @return the implSettings */ @Override public ImplementationSettings getSettings() { return this.implSettings; } /** * Set the implSettings. * * @param tempImpl * @since 3.0 */ public void setSettings(final ImplementationSettings tempImpl) { this.implSettings = tempImpl; } /** * @return */ private UpdateValueStrategy createTemplateModelToTarget() { final EMFUpdateValueStrategy strategy = new EMFUpdateValueStrategy(); strategy.setConverter(new Converter(String.class, ITemplateDesc.class) { @Override public Object convert(final Object fromObject) { if (fromObject == null) { return null; } final String templateId = fromObject.toString(); final ITemplateDesc template = RedhawkCodegenActivator.getCodeGeneratorTemplatesRegistry() .findTemplate(templateId); return template; } }); return strategy; } /** * @return */ private UpdateValueStrategy createTemplateTargetToModel() { final EMFEmptyStringToNullUpdateValueStrategy strategy = new EMFEmptyStringToNullUpdateValueStrategy(); strategy.setConverter(new Converter(ITemplateDesc.class, String.class) { @Override public Object convert(final Object fromObject) { if (fromObject == null) { return null; } final ITemplateDesc desc = (ITemplateDesc) fromObject; return desc.getId(); } }); return strategy; } @Override public boolean canFlipToNextPage() { return this.canFlip && notLastPage(); } /** * Checks to see if this Wizard page is the last one in the wizard pages list. * @return True if this page is not the last page */ private boolean notLastPage() { IWizardPage[] pages = getWizard().getPages(); return pages[pages.length - 1] != this; } /** * @since 3.0 */ @Override public boolean canFinish() { return this.canFinish; } /** * @since 3.0 */ @Override public void setCanFlipToNextPage(final boolean canFlip) { this.canFlip = canFlip; } /** * @since 3.0 */ @Override public void setCanFinish(final boolean canFinish) { this.canFinish = canFinish; } private ITemplateDesc getTemplateDesc(final ICodeGeneratorDescriptor generator) { String templateId = this.implSettings.getTemplate(); // If the templateId is null or old style, select the legacy code // generator template if the implementationSettings has existing props if (((templateId == null) || ("src/".equals(templateId))) && (this.implSettings.getProperties().size() > 0)) { templateId = this.implSettings.getGeneratorId(); } ITemplateDesc template = null; ITemplateDesc genTemplate = null; final ITemplateDesc[] temps = RedhawkCodegenActivator.getCodeGeneratorTemplatesRegistry() .findTemplatesByCodegen(generator.getId()); for (final ITemplateDesc temp : temps) { // Keep track of the default generator template if (temp.getId().equals(generator.getId())) { genTemplate = temp; } if (temp.getId().equals(templateId)) { template = temp; break; } } // If we didn't find the template for some reason, return the default // generator template return (template != null) ? template : genTemplate; // SUPPRESS CHECKSTYLE AvoidInline } }