/******************************************************************************* * Copyright (c) 2009 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.cdi.ui.preferences; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.jboss.tools.cdi.core.CDICorePlugin; import org.jboss.tools.cdi.core.CDIUtil; import org.jboss.tools.common.ui.preferences.SettingsPage; import org.jboss.tools.common.ui.widget.editor.IFieldEditor; import org.jboss.tools.common.ui.widget.editor.IFieldEditorFactory; /** * @author Alexey Kazakov */ public class CDISettingsPreferencePage extends SettingsPage { public static final String ID = "org.jboss.tools.cdi.ui.propertyPages.CDISettingsPreferencePage"; private IProject project; private boolean cdiEnabled; private boolean initialState; private boolean generateBeansXml; /* * (non-Javadoc) * @see org.eclipse.ui.dialogs.PropertyPage#setElement(org.eclipse.core.runtime.IAdaptable) */ @Override public void setElement(IAdaptable element) { super.setElement(element); project = (IProject) getElement().getAdapter(IProject.class); } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) */ @Override protected Control createContents(Composite parent) { Composite root = new Composite(parent, SWT.NONE); GridData gd = new GridData(); gd.horizontalSpan = 1; gd.horizontalAlignment = GridData.FILL; gd.grabExcessHorizontalSpace = true; gd.grabExcessVerticalSpace = false; GridLayout gridLayout = new GridLayout(1, false); root.setLayout(gridLayout); Composite generalGroup = new Composite(root, SWT.NONE); generalGroup.setLayoutData(gd); gridLayout = new GridLayout(4, false); generalGroup.setLayout(gridLayout); initialState = isCDIEnabled(project); IFieldEditor cdiSupportCheckBox = IFieldEditorFactory.INSTANCE.createCheckboxEditor( CDIPreferencesMessages.CDI_SETTINGS_PREFERENCE_PAGE_CDI_SUPPORT, CDIPreferencesMessages.CDI_SETTINGS_PREFERENCE_PAGE_CDI_SUPPORT, initialState); cdiSupportCheckBox.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { Object value = evt.getNewValue(); if (value instanceof Boolean) { boolean v = ((Boolean) value).booleanValue(); setEnabledCDISuport(v); } } }); cdiEnabled = isCDIEnabled(project); registerEditor(cdiSupportCheckBox, generalGroup); generateBeansXml = false; // IFieldEditor generateBeansXmlCheckBox = IFieldEditorFactory.INSTANCE.createCheckboxEditor( // CDIUIMessages.CDI_GENERATE_BEANS_XML, CDIUIMessages.CDI_GENERATE_BEANS_XML, generateBeansXml); // generateBeansXmlCheckBox.addPropertyChangeListener(new PropertyChangeListener() { // public void propertyChange(PropertyChangeEvent evt) { // Object value = evt.getNewValue(); // if (value instanceof Boolean) { // boolean v = ((Boolean) value).booleanValue(); // generateBeansXml = v; // } // } // }); // registerEditor(generateBeansXmlCheckBox, generalGroup); validate(); checkGenerateBeansXml(); return root; } private void checkGenerateBeansXml() { // getEditor(CDIUIMessages.CDI_GENERATE_BEANS_XML).setEnabled(!initialState && cdiEnabled); } /* * (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#performDefaults() */ @Override protected void performDefaults() { getEditor(CDIPreferencesMessages.CDI_SETTINGS_PREFERENCE_PAGE_CDI_SUPPORT).setValue(isCDIEnabled(project)); // getEditor(CDIUIMessages.CDI_GENERATE_BEANS_XML).setValue(true); validate(); } /* * (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#performOk() */ @Override public boolean performOk() { if(isCDIEnabled()!=initialState) { if(isCDIEnabled()) { addCDISupport(project); } else { removeCDISupport(project); } } return true; } private void addCDISupport(IProject project) { if(project==null) { return; } CDIUtil.enableCDI(project, generateBeansXml, new NullProgressMonitor()); } private void removeCDISupport(IProject project) { CDIUtil.disableCDI(project); } private boolean isCDIEnabled(IProject project) { return CDICorePlugin.getCDI(project, false)!=null; } private boolean isCDIEnabled() { return cdiEnabled; } public void setEnabledCDISuport(boolean enabled) { cdiEnabled = enabled; editorRegistry.get(CDIPreferencesMessages.CDI_SETTINGS_PREFERENCE_PAGE_CDI_SUPPORT).setValue(enabled); checkGenerateBeansXml(); } /* * (non-Javadoc) * @see org.jboss.tools.common.ui.preferences.SettingsPage#validate() */ @Override protected void validate() { } }