package org.netbeans.gradle.project.properties;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComponent;
import org.jtrim.utils.ExceptionHelper;
import org.netbeans.gradle.project.properties.ui.ProfileBasedPanel;
import org.netbeans.spi.project.ui.support.ProjectCustomizer;
import org.openide.util.Lookup;
public final class ProfileBasedCustomizer implements ProjectCustomizer.CompositeCategoryProvider {
private final String categoryName;
private final String displayName;
private final PanelFactory panelFactory;
public ProfileBasedCustomizer(String categoryName, String displayName, final ProfileBasedPanel panel) {
this(categoryName, displayName, new PanelFactory() {
@Override
public ProfileBasedPanel createPanel() {
return panel;
}
});
ExceptionHelper.checkNotNullArgument(panel, "panel");
}
public ProfileBasedCustomizer(String categoryName, String displayName, PanelFactory panelFactory) {
ExceptionHelper.checkNotNullArgument(categoryName, "categoryName");
ExceptionHelper.checkNotNullArgument(displayName, "displayName");
ExceptionHelper.checkNotNullArgument(panelFactory, "panelFactory");
this.categoryName = categoryName;
this.displayName = displayName;
this.panelFactory = panelFactory;
}
@Override
public ProjectCustomizer.Category createCategory(Lookup context) {
return ProjectCustomizer.Category.create(categoryName, displayName, null);
}
@Override
public JComponent createComponent(ProjectCustomizer.Category category, Lookup context) {
final ProfileBasedPanel panel = panelFactory.createPanel();
category.setOkButtonListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
panel.saveProperties();
}
});
return panel;
}
public static interface PanelFactory {
public ProfileBasedPanel createPanel();
}
}