package com.dubture.composer.ui.editor.composer;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
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.BooleanFormEntry;
import com.dubture.composer.ui.parts.FormEntry;
import com.dubture.composer.ui.parts.IBooleanFormEntryListener;
public class ConfigSection extends ComposerSection {
protected FormEntry processTimeoutEntry;
protected FormEntry vendorDirEntry;
protected FormEntry binDirEntry;
protected BooleanFormEntry notifyOnInstallEntry;
public ConfigSection(ComposerFormPage page, Composite parent) {
super(page, parent, Section.DESCRIPTION);
createClient(getSection(), page.getManagedForm().getToolkit());
}
@Override
protected void createClient(Section section, FormToolkit toolkit) {
section.setText("Config");
section.setDescription("Configure your package.");
// section.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Composite client = toolkit.createComposite(section);
client.setLayout(FormLayoutFactory.createSectionClientTableWrapLayout(false, 2));
section.setClient(client);
createProcessTimeoutEntry(client, toolkit);
createVendorDirEntry(client, toolkit);
createBinDirEntry(client, toolkit);
createNotifyOnInstallEntry(client, toolkit);
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
processTimeoutEntry.setEnabled(enabled);
vendorDirEntry.setEnabled(enabled);
binDirEntry.setEnabled(enabled);
notifyOnInstallEntry.setEnabled(enabled);
}
private void createProcessTimeoutEntry(Composite client, FormToolkit toolkit) {
processTimeoutEntry = new FormEntry(client, toolkit, "process-timeout", null, false);
Integer processTimeout = composerPackage.getConfig().getProcessTimeout();
if (processTimeout != null) {
processTimeoutEntry.setValue("" + processTimeout, true);
}
processTimeoutEntry.addFormEntryListener(new FormEntryAdapter() {
public void textValueChanged(FormEntry entry) {
if (entry.getValue().isEmpty()) {
composerPackage.getConfig().remove("process-timeout");
} else {
composerPackage.getConfig().set("process-timeout", Integer.valueOf(entry.getValue()));
}
}
});
composerPackage.getConfig().addPropertyChangeListener("process-timeout", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
Integer processTimeout = composerPackage.getConfig().getProcessTimeout();
if (processTimeout == null) {
processTimeoutEntry.setValue("", true);
} else {
processTimeoutEntry.setValue("" + processTimeout, true);
}
}
});
}
private void createVendorDirEntry(Composite client, FormToolkit toolkit) {
vendorDirEntry = new FormEntry(client, toolkit, "vendor-dir", null, false);
String vendorDir = composerPackage.getConfig().getVendorDir();
if (vendorDir != null) {
vendorDirEntry.setValue(vendorDir, true);
}
vendorDirEntry.addFormEntryListener(new FormEntryAdapter() {
public void textValueChanged(FormEntry entry) {
if (entry.getValue().isEmpty()) {
composerPackage.getConfig().remove("vendor-dir");
} else {
composerPackage.getConfig().set("vendor-dir", entry.getValue());
}
}
});
composerPackage.getConfig().addPropertyChangeListener("vendor-dir", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
String vendorDir = composerPackage.getConfig().getVendorDir();
if (vendorDir != null) {
vendorDirEntry.setValue("", true);
} else {
vendorDirEntry.setValue(composerPackage.getConfig().getVendorDir(), true);
}
}
});
}
private void createBinDirEntry(Composite client, FormToolkit toolkit) {
binDirEntry = new FormEntry(client, toolkit, "bin-dir", null, false);
String binDir = composerPackage.getConfig().getBinDir();
if (binDir != null) {
binDirEntry.setValue(binDir, true);
}
binDirEntry.addFormEntryListener(new FormEntryAdapter() {
public void textValueChanged(FormEntry entry) {
if (entry.getValue().isEmpty()) {
composerPackage.getConfig().remove("bin-dir");
} else {
composerPackage.getConfig().set("bin-dir", entry.getValue());
}
}
});
composerPackage.getConfig().addPropertyChangeListener("bin-dir", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
String binDir = composerPackage.getConfig().getBinDir();
if (binDir == null) {
binDirEntry.setValue("", true);
} else {
binDirEntry.setValue(binDir, true);
}
}
});
}
private void createNotifyOnInstallEntry(Composite client, FormToolkit toolkit) {
notifyOnInstallEntry = new BooleanFormEntry(client, toolkit, "notify-on-install");
notifyOnInstallEntry.setValue(composerPackage.getConfig().getNotifyOnInstall());
notifyOnInstallEntry.addBooleanFormEntryListener(new IBooleanFormEntryListener() {
public void selectionChanged(BooleanFormEntry entry) {
if (entry.getValue()) {
composerPackage.getConfig().remove("notify-on-install");
} else {
composerPackage.getConfig().setNotifyOnInstall(entry.getValue());
}
}
});
composerPackage.getConfig().addPropertyChangeListener("notify-on-install", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
notifyOnInstallEntry.setValue(composerPackage.getConfig().getNotifyOnInstall(), true);
}
});
}
}