/projects/eclipse_SDK-3.7.1/plugins/org.eclipse.jdt.ui.source_3.7.1.r371_v20110824-0800/org/eclipse/jdt/internal/ui/preferences/JavaBuildConfigurationBlock.java
Java | 328 lines | 236 code | 71 blank | 21 comment | 19 complexity | f20debfe77c91e5b63651d8a2663fd5f MD5 | raw file
- /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation 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:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
- package org.eclipse.jdt.internal.ui.preferences;
- 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.eclipse.swt.widgets.Label;
- import org.eclipse.swt.widgets.Text;
- import org.eclipse.core.runtime.IStatus;
- import org.eclipse.core.resources.IProject;
- import org.eclipse.core.resources.IResource;
- import org.eclipse.core.resources.IWorkspace;
- import org.eclipse.core.resources.ResourcesPlugin;
- import org.eclipse.jface.dialogs.IDialogSettings;
- import org.eclipse.jface.layout.PixelConverter;
- import org.eclipse.ui.forms.widgets.ExpandableComposite;
- import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
- import org.eclipse.jdt.core.JavaCore;
- import org.eclipse.jdt.internal.corext.util.Messages;
- import org.eclipse.jdt.launching.JavaRuntime;
- import org.eclipse.jdt.internal.ui.JavaPlugin;
- import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
- import org.eclipse.jdt.internal.ui.dialogs.StatusUtil;
- import org.eclipse.jdt.internal.ui.wizards.IStatusChangeListener;
- public class JavaBuildConfigurationBlock extends OptionsConfigurationBlock {
- private static final String SETTINGS_SECTION_NAME= "JavaBuildConfigurationBlock"; //$NON-NLS-1$
- private static final Key PREF_PB_MAX_PER_UNIT= getJDTCoreKey(JavaCore.COMPILER_PB_MAX_PER_UNIT);
- private static final Key PREF_RESOURCE_FILTER= getJDTCoreKey(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER);
- private static final Key PREF_BUILD_INVALID_CLASSPATH= getJDTCoreKey(JavaCore.CORE_JAVA_BUILD_INVALID_CLASSPATH);
- private static final Key PREF_BUILD_CLEAN_OUTPUT_FOLDER= getJDTCoreKey(JavaCore.CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER);
- private static final Key PREF_ENABLE_EXCLUSION_PATTERNS= getJDTCoreKey(JavaCore.CORE_ENABLE_CLASSPATH_EXCLUSION_PATTERNS);
- private static final Key PREF_ENABLE_MULTIPLE_OUTPUT_LOCATIONS= getJDTCoreKey(JavaCore.CORE_ENABLE_CLASSPATH_MULTIPLE_OUTPUT_LOCATIONS);
- private static final Key PREF_PB_INCOMPLETE_BUILDPATH= getJDTCoreKey(JavaCore.CORE_INCOMPLETE_CLASSPATH);
- private static final Key PREF_PB_CIRCULAR_BUILDPATH= getJDTCoreKey(JavaCore.CORE_CIRCULAR_CLASSPATH);
- private static final Key PREF_PB_INCOMPATIBLE_JDK_LEVEL= getJDTCoreKey(JavaCore.CORE_INCOMPATIBLE_JDK_LEVEL);
- private static final Key PREF_PB_DUPLICATE_RESOURCE= getJDTCoreKey(JavaCore.CORE_JAVA_BUILD_DUPLICATE_RESOURCE);
- private static final Key PREF_RECREATE_MODIFIED_CLASS_FILES= getJDTCoreKey(JavaCore.CORE_JAVA_BUILD_RECREATE_MODIFIED_CLASS_FILES_IN_OUTPUT_FOLDER);
- private static final Key PREF_PB_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE= getJDTLaunchingKey(JavaRuntime.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE);
- // values
- private static final String ERROR= JavaCore.ERROR;
- private static final String WARNING= JavaCore.WARNING;
- private static final String IGNORE= JavaCore.IGNORE;
- private static final String ABORT= JavaCore.ABORT;
- private static final String CLEAN= JavaCore.CLEAN;
- private static final String ENABLED= JavaCore.ENABLED;
- private static final String DISABLED= JavaCore.DISABLED;
- private PixelConverter fPixelConverter;
- private IStatus fMaxNumberProblemsStatus, fResourceFilterStatus;
- public JavaBuildConfigurationBlock(IStatusChangeListener context, IProject project, IWorkbenchPreferenceContainer container) {
- super(context, project, getKeys(), container);
- fMaxNumberProblemsStatus= new StatusInfo();
- fResourceFilterStatus= new StatusInfo();
- }
- private static Key[] getKeys() {
- Key[] keys= new Key[] {
- PREF_PB_MAX_PER_UNIT, PREF_RESOURCE_FILTER, PREF_BUILD_INVALID_CLASSPATH, PREF_PB_INCOMPLETE_BUILDPATH, PREF_PB_CIRCULAR_BUILDPATH,
- PREF_BUILD_CLEAN_OUTPUT_FOLDER, PREF_PB_DUPLICATE_RESOURCE,
- PREF_PB_INCOMPATIBLE_JDK_LEVEL, PREF_ENABLE_EXCLUSION_PATTERNS, PREF_ENABLE_MULTIPLE_OUTPUT_LOCATIONS, PREF_RECREATE_MODIFIED_CLASS_FILES,
- PREF_PB_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE
- };
- return keys;
- }
- /*
- * @see org.eclipse.jface.preference.PreferencePage#createContents(Composite)
- */
- @Override
- protected Control createContents(Composite parent) {
- fPixelConverter= new PixelConverter(parent);
- setShell(parent.getShell());
- Composite mainComp= new Composite(parent, SWT.NONE);
- mainComp.setFont(parent.getFont());
- GridLayout layout= new GridLayout();
- layout.marginHeight= 0;
- layout.marginWidth= 0;
- mainComp.setLayout(layout);
- Composite othersComposite= createBuildPathTabContent(mainComp);
- GridData gridData= new GridData(GridData.FILL, GridData.FILL, true, true);
- gridData.heightHint= fPixelConverter.convertHeightInCharsToPixels(20);
- othersComposite.setLayoutData(gridData);
- validateSettings(null, null, null);
- return mainComp;
- }
- private Composite createBuildPathTabContent(Composite parent) {
- String[] abortIgnoreValues= new String[] { ABORT, IGNORE };
- String[] cleanIgnoreValues= new String[] { CLEAN, IGNORE };
- String[] enableDisableValues= new String[] { ENABLED, DISABLED };
- String[] enableIgnoreValues= new String[] { ENABLED, IGNORE };
- String[] errorWarning= new String[] { ERROR, WARNING };
- String[] errorWarningLabels= new String[] {
- PreferencesMessages.JavaBuildConfigurationBlock_error,
- PreferencesMessages.JavaBuildConfigurationBlock_warning
- };
- String[] errorWarningIgnore= new String[] { ERROR, WARNING, IGNORE };
- String[] errorWarningIgnoreLabels= new String[] {
- PreferencesMessages.JavaBuildConfigurationBlock_error,
- PreferencesMessages.JavaBuildConfigurationBlock_warning,
- PreferencesMessages.JavaBuildConfigurationBlock_ignore
- };
- int nColumns= 3;
- final ScrolledPageContent pageContent = new ScrolledPageContent(parent);
- GridLayout layout= new GridLayout();
- layout.numColumns= nColumns;
- layout.marginHeight= 0;
- layout.marginWidth= 0;
- Composite composite= pageContent.getBody();
- composite.setLayout(layout);
- String label= PreferencesMessages.JavaBuildConfigurationBlock_section_general;
- ExpandableComposite excomposite= createStyleSection(composite, label, nColumns);
- Composite othersComposite= new Composite(excomposite, SWT.NONE);
- excomposite.setClient(othersComposite);
- othersComposite.setLayout(new GridLayout(nColumns, false));
- label= PreferencesMessages.JavaBuildConfigurationBlock_pb_max_per_unit_label;
- Text text= addTextField(othersComposite, label, PREF_PB_MAX_PER_UNIT, 0, 0);
- GridData gd= (GridData) text.getLayoutData();
- gd.widthHint= fPixelConverter.convertWidthInCharsToPixels(8);
- gd.horizontalAlignment= GridData.END;
- text.setTextLimit(6);
- label= PreferencesMessages.JavaBuildConfigurationBlock_enable_exclusion_patterns_label;
- addCheckBox(othersComposite, label, PREF_ENABLE_EXCLUSION_PATTERNS, enableDisableValues, 0);
- label= PreferencesMessages.JavaBuildConfigurationBlock_enable_multiple_outputlocations_label;
- addCheckBox(othersComposite, label, PREF_ENABLE_MULTIPLE_OUTPUT_LOCATIONS, enableDisableValues, 0);
- label= PreferencesMessages.JavaBuildConfigurationBlock_section_build_path_problems;
- excomposite= createStyleSection(composite, label, nColumns);
- othersComposite= new Composite(excomposite, SWT.NONE);
- excomposite.setClient(othersComposite);
- othersComposite.setLayout(new GridLayout(nColumns, false));
- label= PreferencesMessages.JavaBuildConfigurationBlock_build_invalid_classpath_label;
- addCheckBox(othersComposite, label, PREF_BUILD_INVALID_CLASSPATH, abortIgnoreValues, 0);
- label= PreferencesMessages.JavaBuildConfigurationBlock_pb_incomplete_build_path_label;
- addComboBox(othersComposite, label, PREF_PB_INCOMPLETE_BUILDPATH, errorWarning, errorWarningLabels, 0);
- label= PreferencesMessages.JavaBuildConfigurationBlock_pb_build_path_cycles_label;
- addComboBox(othersComposite, label, PREF_PB_CIRCULAR_BUILDPATH, errorWarning, errorWarningLabels, 0);
- label= PreferencesMessages.JavaBuildConfigurationBlock_pb_check_prereq_binary_level_label;
- addComboBox(othersComposite, label, PREF_PB_INCOMPATIBLE_JDK_LEVEL, errorWarningIgnore, errorWarningIgnoreLabels, 0);
- label= PreferencesMessages.JavaBuildConfigurationBlock_pb_strictly_compatible_jre_not_available_label;
- addComboBox(othersComposite, label, PREF_PB_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE, errorWarningIgnore, errorWarningIgnoreLabels, 0);
- label= PreferencesMessages.JavaBuildConfigurationBlock_section_output_folder;
- excomposite= createStyleSection(composite, label, nColumns);
- othersComposite= new Composite(excomposite, SWT.NONE);
- excomposite.setClient(othersComposite);
- othersComposite.setLayout(new GridLayout(nColumns, false));
- label= PreferencesMessages.JavaBuildConfigurationBlock_pb_duplicate_resources_label;
- addComboBox(othersComposite, label, PREF_PB_DUPLICATE_RESOURCE, errorWarning, errorWarningLabels, 0);
- label= PreferencesMessages.JavaBuildConfigurationBlock_build_clean_outputfolder_label;
- addCheckBox(othersComposite, label, PREF_BUILD_CLEAN_OUTPUT_FOLDER, cleanIgnoreValues, 0);
- label= PreferencesMessages.JavaBuildConfigurationBlock_build_recreate_modified;
- addCheckBox(othersComposite, label, PREF_RECREATE_MODIFIED_CLASS_FILES, enableIgnoreValues, 0);
- label= PreferencesMessages.JavaBuildConfigurationBlock_resource_filter_label;
- text= addTextField(othersComposite, label, PREF_RESOURCE_FILTER, 0, 0);
- gd= (GridData) text.getLayoutData();
- gd.grabExcessHorizontalSpace= true;
- gd.widthHint= fPixelConverter.convertWidthInCharsToPixels(10);
- Label description= new Label(othersComposite, SWT.WRAP);
- description.setText(PreferencesMessages.JavaBuildConfigurationBlock_resource_filter_description);
- gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL);
- gd.horizontalSpan= nColumns;
- gd.widthHint= fPixelConverter.convertWidthInCharsToPixels(60);
- description.setLayoutData(gd);
- IDialogSettings section= JavaPlugin.getDefault().getDialogSettings().getSection(SETTINGS_SECTION_NAME);
- restoreSectionExpansionStates(section);
- return pageContent;
- }
- /* (non-javadoc)
- * Update fields and validate.
- * @param changedKey Key that changed, or null, if all changed.
- */
- @Override
- protected void validateSettings(Key changedKey, String oldValue, String newValue) {
- if (!areSettingsEnabled()) {
- return;
- }
- if (changedKey != null) {
- if (PREF_PB_MAX_PER_UNIT.equals(changedKey)) {
- fMaxNumberProblemsStatus= validateMaxNumberProblems();
- } else if (PREF_RESOURCE_FILTER.equals(changedKey)) {
- fResourceFilterStatus= validateResourceFilters();
- } else {
- return;
- }
- } else {
- updateEnableStates();
- fMaxNumberProblemsStatus= validateMaxNumberProblems();
- fResourceFilterStatus= validateResourceFilters();
- }
- IStatus status= StatusUtil.getMostSevere(new IStatus[] { fMaxNumberProblemsStatus, fResourceFilterStatus });
- fContext.statusChanged(status);
- }
- private void updateEnableStates() {
- }
- @Override
- protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
- String title= PreferencesMessages.JavaBuildConfigurationBlock_needsbuild_title;
- String message;
- if (workspaceSettings) {
- message= PreferencesMessages.JavaBuildConfigurationBlock_needsfullbuild_message;
- } else {
- message= PreferencesMessages.JavaBuildConfigurationBlock_needsprojectbuild_message;
- }
- return new String[] { title, message };
- }
- private IStatus validateMaxNumberProblems() {
- String number= getValue(PREF_PB_MAX_PER_UNIT);
- StatusInfo status= new StatusInfo();
- if (number.length() == 0) {
- status.setError(PreferencesMessages.JavaBuildConfigurationBlock_empty_input);
- } else {
- try {
- int value= Integer.parseInt(number);
- if (value <= 0) {
- status.setError(Messages.format(PreferencesMessages.JavaBuildConfigurationBlock_invalid_input, number));
- }
- } catch (NumberFormatException e) {
- status.setError(Messages.format(PreferencesMessages.JavaBuildConfigurationBlock_invalid_input, number));
- }
- }
- return status;
- }
- private IStatus validateResourceFilters() {
- String text= getValue(PREF_RESOURCE_FILTER);
- IWorkspace workspace= ResourcesPlugin.getWorkspace();
- String[] filters= getTokens(text, ","); //$NON-NLS-1$
- for (int i= 0; i < filters.length; i++) {
- String fileName= filters[i].replace('*', 'x');
- int resourceType= IResource.FILE;
- int lastCharacter= fileName.length() - 1;
- if (lastCharacter >= 0 && fileName.charAt(lastCharacter) == '/') {
- fileName= fileName.substring(0, lastCharacter);
- resourceType= IResource.FOLDER;
- }
- IStatus status= workspace.validateName(fileName, resourceType);
- if (status.matches(IStatus.ERROR)) {
- String message= Messages.format(PreferencesMessages.JavaBuildConfigurationBlock_filter_invalidsegment_error, status.getMessage());
- return new StatusInfo(IStatus.ERROR, message);
- }
- }
- return new StatusInfo();
- }
- /* (non-Javadoc)
- * @see org.eclipse.jdt.internal.ui.preferences.OptionsConfigurationBlock#dispose()
- */
- @Override
- public void dispose() {
- IDialogSettings settings= JavaPlugin.getDefault().getDialogSettings().addNewSection(SETTINGS_SECTION_NAME);
- storeSectionExpansionStates(settings);
- super.dispose();
- }
- }