/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 *******************************************************************************/ package org.ebayopensource.turmeric.eclipse.maven.ui.preferences; import java.util.Collection; import java.util.TreeSet; import org.apache.commons.lang.StringUtils; import org.apache.maven.artifact.Artifact; import org.apache.maven.repository.metadata.ArtifactMetadata; import org.ebayopensource.turmeric.eclipse.core.logging.SOALogger; import org.ebayopensource.turmeric.eclipse.core.resources.constants.SOAProjectConstants.SOAFrameworkLibrary; import org.ebayopensource.turmeric.eclipse.maven.core.utils.MavenCoreUtils; import org.ebayopensource.turmeric.eclipse.mavenapi.impl.MavenEclipseUtil; import org.ebayopensource.turmeric.eclipse.repositorysystem.core.GlobalRepositorySystem; import org.ebayopensource.turmeric.eclipse.repositorysystem.core.ISOAOrganizationProvider; import org.ebayopensource.turmeric.eclipse.utils.core.VersionUtil; import org.ebayopensource.turmeric.eclipse.utils.ui.UIUtil; import org.eclipse.jface.fieldassist.AutoCompleteField; import org.eclipse.jface.fieldassist.TextContentAdapter; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.StringFieldEditor; 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.Group; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; /** * The Class TurmericSOAConfigPrefPage. * * @author yayu */ public class TurmericSOAConfigPrefPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { private IWorkbench workbench; private static final SOALogger logger = SOALogger.getLogger(); private StringFieldEditor preferredVerEditor; /** * Instantiates a new turmeric soa config pref page. * */ public TurmericSOAConfigPrefPage() { super("Turmeric SOA Configurations", FieldEditorPreferencePage.GRID); this.setPreferenceStore(TurmericSOAConfigPrefInitializer.getPreferenceStore()); } @Override public void init(IWorkbench workbench) { this.workbench = workbench; } @Override protected void createFieldEditors() { final IPreferenceStore prefStore = TurmericSOAConfigPrefInitializer.getPreferenceStore(); final Composite composite = getFieldEditorParent(); try { final Group group = new Group(composite, SWT.SHADOW_ETCHED_IN); group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); GridLayout layout = new GridLayout(2, false); group.setLayout(layout); group.setText("Framework Version Configurations"); final ISOAOrganizationProvider orgProvider = GlobalRepositorySystem.instanceOf().getActiveRepositorySystem().getActiveOrganizationProvider(); String soatoolsId = orgProvider.getSOAFrameworkLibraryIdentifier(SOAFrameworkLibrary.SOATOOLS); final ArtifactMetadata metadata = MavenEclipseUtil.artifactMetadata(soatoolsId); BooleanFieldEditor overwriteEditor = new BooleanFieldEditor(TurmericSOAConfigPrefInitializer.PREF_KEY_OVERWRITE_PREFERRED_VERSOIN, "Overwrite Preferred Version", group) { @Override protected void valueChanged(boolean oldValue, boolean newValue) { enableVersionEditor(newValue); super.valueChanged(oldValue, newValue); } private void enableVersionEditor(boolean newValue) { if (preferredVerEditor != null) { preferredVerEditor.setEnabled(newValue, group); if (newValue == true && StringUtils.isBlank(preferredVerEditor.getStringValue())) { TurmericSOAConfigPrefPage.this.setErrorMessage("preferred version must not be empty"); preferredVerEditor.setErrorMessage("preferred version must not be empty"); } } } @Override protected void doLoadDefault() { super.doLoadDefault(); enableVersionEditor(getBooleanValue()); } }; addField(overwriteEditor); final Collection<String> versions = new TreeSet<String>(); if (metadata != null) { for (Artifact artifact: MavenCoreUtils.mavenEclipseAPI() .findArtifactByNameAndGroup(metadata.getArtifactId(), metadata.getGroupId())) { versions.add(artifact.getVersion()); } } final String minVersion = orgProvider.getMinimumRequiredTurmericFrameworkVersion(); this.preferredVerEditor = new StringFieldEditor(TurmericSOAConfigPrefInitializer.PREF_KEY_TURMERIC_PREFERRED_VERSOIN, "Preferred Turmeric Version:", group) { @Override protected boolean doCheckState() { if (VersionUtil.compare(getStringValue(), minVersion) < 0) { this.setErrorMessage("Preferred version must be equal to or greater than " + minVersion); return false; } return super.doCheckState(); } }; this.preferredVerEditor.setEmptyStringAllowed(false); this.preferredVerEditor.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE); addField(preferredVerEditor); if (versions.isEmpty() == false) { Text verText = this.preferredVerEditor.getTextControl(group); new AutoCompleteField(verText, new TextContentAdapter(), versions.toArray(new String[0])); } this.preferredVerEditor.setEnabled(prefStore.getBoolean( TurmericSOAConfigPrefInitializer.PREF_KEY_OVERWRITE_PREFERRED_VERSOIN), group); prefStore.setValue(TurmericSOAConfigPrefInitializer.PREF_KEY_MINIMUM_REQUIRED_VERSOIN, minVersion); prefStore.setDefault(TurmericSOAConfigPrefInitializer.PREF_KEY_MINIMUM_REQUIRED_VERSOIN, minVersion); StringFieldEditor text = new StringFieldEditor( TurmericSOAConfigPrefInitializer.PREF_KEY_MINIMUM_REQUIRED_VERSOIN, "Minimum Required Version:", group); text.getTextControl(group).setEditable(false); text.setStringValue(orgProvider.getMinimumRequiredTurmericFrameworkVersion()); addField(text); } catch (Exception e) { logger.error(e); UIUtil.showErrorDialog(e); } } }