package com.dubture.composer.ui.editor.composer;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.eclipse.jface.fieldassist.AutoCompleteField;
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.fieldassist.FieldDecoration;
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
import org.eclipse.jface.fieldassist.TextContentAdapter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.forms.widgets.TableWrapData;
import com.dubture.composer.ui.converter.Keywords2StringConverter;
import com.dubture.composer.ui.converter.License2StringConverter;
import com.dubture.composer.ui.converter.String2KeywordsConverter;
import com.dubture.composer.ui.converter.String2LicenseConverter;
import com.dubture.composer.ui.editor.ComboFormEntryAdapter;
import com.dubture.composer.ui.editor.ComposerFormPage;
import com.dubture.composer.ui.editor.ComposerSection;
import com.dubture.composer.ui.editor.FormEntryAdapter;
import com.dubture.composer.ui.editor.FormLayoutFactory;
import com.dubture.composer.ui.parts.ComboFormEntry;
import com.dubture.composer.ui.parts.FormEntry;
import com.dubture.composer.ui.parts.WeblinkFormEntry;
import com.dubture.getcomposer.core.ComposerConstants;
public class GeneralSection extends ComposerSection {
private FormEntry nameEntry;
private FormEntry descriptionEntry;
private FormEntry typeEntry;
private FormEntry keywordsEntry;
private FormEntry homepageEntry;
private FormEntry licenseEntry;
private ComboFormEntry minimumStabilityEntry;
public GeneralSection(ComposerFormPage page, Composite parent) {
super(page, parent, Section.DESCRIPTION);
createClient(getSection(), page.getManagedForm().getToolkit());
}
@Override
protected void createClient(Section section, FormToolkit toolkit) {
section.setText("General Information");
section.setDescription("This section describes general information about this package.");
section.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
Composite client = toolkit.createComposite(section);
client.setLayout(FormLayoutFactory.createSectionClientTableWrapLayout(false, 2));
section.setClient(client);
createNameEntry(client, toolkit);
createDescriptionEntry(client, toolkit);
createTypeEntry(client, toolkit);
createKeywordsEntry(client, toolkit);
createHomepageEntry(client, toolkit);
createLicenseEntry(client, toolkit);
createStabilityEntry(client, toolkit);
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
nameEntry.setEnabled(enabled);
descriptionEntry.setEnabled(enabled);
typeEntry.setEnabled(enabled);
keywordsEntry.setEnabled(enabled);
homepageEntry.setEnabled(enabled);
licenseEntry.setEnabled(enabled);
minimumStabilityEntry.setEditable(enabled);
}
private void createNameEntry(Composite client, FormToolkit toolkit) {
nameEntry = new FormEntry(client, toolkit, "Name", null, false);
nameEntry.setValue(composerPackage.getName(), true);
nameEntry.addFormEntryListener(new FormEntryAdapter() {
public void textValueChanged(FormEntry entry) {
composerPackage.set("name", entry.getValue());
}
});
composerPackage.addPropertyChangeListener("name", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
nameEntry.setValue(composerPackage.getName(), true);
}
});
}
private void createDescriptionEntry(Composite client, FormToolkit toolkit) {
descriptionEntry = new FormEntry(client, toolkit, "Description", null, false);
descriptionEntry.setValue(composerPackage.getDescription(), true);
descriptionEntry.addFormEntryListener(new FormEntryAdapter() {
public void textValueChanged(FormEntry entry) {
composerPackage.set("description", entry.getValue());
}
});
composerPackage.addPropertyChangeListener("description", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
descriptionEntry.setValue(composerPackage.getDescription(), true);
}
});
}
private void createTypeEntry(Composite client, FormToolkit toolkit) {
typeEntry = new FormEntry(client, toolkit, "Type", null, false);
typeEntry.setValue(composerPackage.getType(), true);
ControlDecoration decoration = new ControlDecoration(typeEntry.getText(), SWT.TOP | SWT.LEFT);
FieldDecoration indicator = FieldDecorationRegistry.getDefault().
getFieldDecoration(FieldDecorationRegistry.DEC_CONTENT_PROPOSAL);
decoration.setImage(indicator.getImage());
decoration.setDescriptionText(indicator.getDescription() + "(Ctrl+Space)");
decoration.setShowOnlyOnFocus(true);
new AutoCompleteField(typeEntry.getText(), new TextContentAdapter(), ComposerConstants.TYPES);
typeEntry.addFormEntryListener(new FormEntryAdapter() {
public void textValueChanged(FormEntry entry) {
composerPackage.set("type", entry.getValue());
}
});
composerPackage.addPropertyChangeListener("type", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
typeEntry.setValue(composerPackage.getType(), true);
}
});
}
private void createKeywordsEntry(Composite client, FormToolkit toolkit) {
keywordsEntry = new FormEntry(client, toolkit, "Keywords", null, false);
final Keywords2StringConverter converter = new Keywords2StringConverter();
keywordsEntry.setValue(converter.convert(composerPackage.getKeywords()), true);
keywordsEntry.addFormEntryListener(new FormEntryAdapter() {
String2KeywordsConverter converter;
public void focusGained(FormEntry entry) {
converter = new String2KeywordsConverter(composerPackage);
}
public void focusLost(FormEntry entry) {
converter.convert(entry.getValue());
}
});
composerPackage.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
if (e.getPropertyName().startsWith("keywords")) {
keywordsEntry.setValue(converter.convert(composerPackage.getKeywords()), true);
}
}
});
}
private void createHomepageEntry(Composite client, FormToolkit toolkit) {
homepageEntry = new WeblinkFormEntry(client, toolkit, "Homepage");
homepageEntry.setValue(composerPackage.getHomepage());
homepageEntry.addFormEntryListener(new FormEntryAdapter() {
public void textValueChanged(FormEntry entry) {
composerPackage.set("homepage", entry.getValue());
}
});
composerPackage.addPropertyChangeListener("homepage", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
homepageEntry.setValue(composerPackage.getHomepage(), true);
}
});
}
private void createLicenseEntry(Composite client, FormToolkit toolkit) {
licenseEntry = new FormEntry(client, toolkit, "License", null, false);
ControlDecoration decoration = new ControlDecoration(licenseEntry.getText(), SWT.TOP | SWT.LEFT);
FieldDecoration indicator = FieldDecorationRegistry.getDefault().
getFieldDecoration(FieldDecorationRegistry.DEC_CONTENT_PROPOSAL);
decoration.setImage(indicator.getImage());
decoration.setDescriptionText(indicator.getDescription() + "(Ctrl+Space)");
decoration.setShowOnlyOnFocus(true);
new AutoCompleteField(licenseEntry.getText(), new LicenseContentAdapter(), ComposerConstants.LICENSES);
final License2StringConverter converter = new License2StringConverter();
licenseEntry.setValue(converter.convert(composerPackage.getLicense()), true);
licenseEntry.addFormEntryListener(new FormEntryAdapter() {
String2LicenseConverter converter;
public void focusGained(FormEntry entry) {
converter = new String2LicenseConverter(composerPackage);
}
public void focusLost(FormEntry entry) {
converter.convert(entry.getValue());
}
});
composerPackage.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
if (e.getPropertyName().startsWith("license")) {
licenseEntry.setValue(converter.convert(composerPackage.getLicense()), true);
}
}
});
}
private void createStabilityEntry(Composite client, FormToolkit toolkit) {
minimumStabilityEntry = new ComboFormEntry(client, toolkit, "Minimum Stability", SWT.FLAT | SWT.READ_ONLY);
minimumStabilityEntry.getComboPart().setItems(ComposerConstants.STABILITIES);
minimumStabilityEntry.setValue(composerPackage.getMinimumStability(), true);
minimumStabilityEntry.addComboFormEntryListener(new ComboFormEntryAdapter() {
public void selectionChanged(ComboFormEntry entry) {
composerPackage.set("minimum-stability", entry.getValue());
}
});
composerPackage.addPropertyChangeListener("minimum-stability", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
minimumStabilityEntry.setValue(composerPackage.getMinimumStability(), true);
}
});
}
}