diff --git a/api.web.webmodule/apichanges.xml b/api.web.webmodule/apichanges.xml --- a/api.web.webmodule/apichanges.xml +++ b/api.web.webmodule/apichanges.xml @@ -106,6 +106,21 @@ + + + Adding WebModuleExtender.Savable interface + + + + + +

+ Added interface WebModuleExtender.Savable for ability to + save framework settings of already included extender after confirming + project customizer. +

+
+
Adding ability to listen on WebModuleImplementation2 changes diff --git a/api.web.webmodule/manifest.mf b/api.web.webmodule/manifest.mf --- a/api.web.webmodule/manifest.mf +++ b/api.web.webmodule/manifest.mf @@ -1,5 +1,5 @@ Manifest-Version: 1.0 OpenIDE-Module: org.netbeans.api.web.webmodule -OpenIDE-Module-Specification-Version: 1.25 +OpenIDE-Module-Specification-Version: 1.26 OpenIDE-Module-Layer: org/netbeans/modules/web/webmodule/resources/layer.xml OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/web/webmodule/Bundle.properties diff --git a/api.web.webmodule/nbproject/project.xml b/api.web.webmodule/nbproject/project.xml --- a/api.web.webmodule/nbproject/project.xml +++ b/api.web.webmodule/nbproject/project.xml @@ -50,6 +50,15 @@ org.netbeans.api.web.webmodule + org.netbeans.api.annotations.common + + + + 1 + 1.11 + + + org.netbeans.api.java diff --git a/api.web.webmodule/src/org/netbeans/modules/web/spi/webmodule/WebModuleExtender.java b/api.web.webmodule/src/org/netbeans/modules/web/spi/webmodule/WebModuleExtender.java --- a/api.web.webmodule/src/org/netbeans/modules/web/spi/webmodule/WebModuleExtender.java +++ b/api.web.webmodule/src/org/netbeans/modules/web/spi/webmodule/WebModuleExtender.java @@ -33,6 +33,7 @@ import java.util.Set; import javax.swing.JComponent; import javax.swing.event.ChangeListener; +import org.netbeans.api.annotations.common.NonNull; import org.netbeans.modules.web.api.webmodule.WebModule; import org.openide.filesystems.FileObject; import org.openide.util.HelpCtx; @@ -97,8 +98,27 @@ * Called to extend the given web module with the web framework * corresponding to this extender. * - * @param webModule the web module to be extender; never null. + * @param webModule the web module to be extended; never null. * @return the set of newly created files in the web module. */ public abstract Set extend(WebModule webModule); + + /** + * Interface that represents ability to save {@code WebModuleExtender} + * properties for a {@link WebModule}. + * + * @since 1.26 + */ + public interface Savable { + + /** + * Called to save extender configuration for given web module in cases that + * the web module was already extended by the {@code WebModuleExtender}. + * + * @param webModule the web module to store extender settings; never null. + */ + void save(@NonNull WebModule webModule); + + } + } diff --git a/web.jsf/nbproject/project.xml b/web.jsf/nbproject/project.xml --- a/web.jsf/nbproject/project.xml +++ b/web.jsf/nbproject/project.xml @@ -81,7 +81,7 @@ - 1.0 + 1.26 @@ -415,7 +415,7 @@ - 1.6 + 1.36 diff --git a/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanel.java b/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanel.java --- a/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanel.java +++ b/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanel.java @@ -45,6 +45,7 @@ package org.netbeans.modules.web.jsf.wizards; import java.io.File; +import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -68,7 +69,7 @@ * * @author petr, alexeybutenko */ -public class JSFConfigurationPanel extends WebModuleExtender { +public class JSFConfigurationPanel extends WebModuleExtender implements WebModuleExtender.Savable { private final JSFFrameworkProvider framework; private final ExtenderController controller; @@ -365,4 +366,32 @@ static final PreferredLanguage JSP = new PreferredLanguage("JSP"); //NOI18N static final PreferredLanguage Facelets = new PreferredLanguage("Facelets"); //NOI18N } + + @Override + public void save(WebModule webModule) { + List activedImplementations = getComponent().getActivedJsfDescriptors(); + List usedImplementations = new ArrayList(); + for (JsfComponentImplementation jsfImplementation : getComponent().getAllJsfDescriptors()) { + if (jsfImplementation.isInWebModule(webModule)) { + usedImplementations.add(jsfImplementation); + } + } + + // get list of newly added JSF suite implementations + List addedImplementations = + new ArrayList(activedImplementations); + addedImplementations.removeAll(usedImplementations); + for (JsfComponentImplementation jsfComponentImplementation : addedImplementations) { + jsfComponentImplementation.extend(webModule, jsfComponentImplementation.createJsfComponentCustomizer(null)); + } + + // get list of removed JSF suite implementations + List removedImplementations = + new ArrayList(usedImplementations); + removedImplementations.removeAll(activedImplementations); + for (JsfComponentImplementation jsfComponentImplementation : removedImplementations) { + jsfComponentImplementation.remove(webModule); + } + } + } diff --git a/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanelVisual.form b/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanelVisual.form --- a/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanelVisual.form +++ b/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanelVisual.form @@ -61,7 +61,7 @@ - + @@ -69,7 +69,7 @@ - + @@ -78,16 +78,16 @@ - + - - + + - + @@ -121,7 +121,7 @@ - + @@ -299,7 +299,7 @@ - + @@ -399,7 +399,7 @@ - + @@ -412,7 +412,7 @@ - + diff --git a/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanelVisual.java b/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanelVisual.java --- a/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanelVisual.java +++ b/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanelVisual.java @@ -874,10 +874,6 @@ return false; } - if (customizer) { - return true; - } - if (controller.getProperties().getProperty("NoDocBase") != null) { //NOI18N controller.setErrorMessage(NbBundle.getMessage(JSFConfigurationPanelVisual.class, "MSG_MissingDocBase")); return false; @@ -938,8 +934,12 @@ for (JsfComponentImplementation jsfComponentDescriptor : getActivedJsfDescriptors()) { if (jsfComponentDescriptor.createJsfComponentCustomizer(null) != null && !jsfComponentDescriptor.createJsfComponentCustomizer(null).isValid()) { - controller.getProperties().setProperty(WizardDescriptor.PROP_INFO_MESSAGE, - NbBundle.getMessage(JSFConfigurationPanelVisual.class, "LBL_JsfComponentNotValid", jsfComponentDescriptor.getName())); // NOI18N + String error = NbBundle.getMessage(JSFConfigurationPanelVisual.class, "LBL_JsfComponentNotValid", jsfComponentDescriptor.getName()); + if (customizer) { + panel.getController().setErrorMessage(error); + } else { + controller.getProperties().setProperty(WizardDescriptor.PROP_INFO_MESSAGE, error); // NOI18N + } return false; } } @@ -1147,6 +1147,14 @@ return activatedDescriptors; } + public List getAllJsfDescriptors() { + List allDescriptors = new ArrayList(); + for (int i = 0; i < jsfComponentsTableModel.getRowCount(); i++) { + allDescriptors.add(jsfComponentsTableModel.getItem(i).getJsfComponent()); + } + return allDescriptors; + } + public boolean packageJars(){ return cbPackageJars.isSelected(); } @@ -1409,9 +1417,6 @@ table.getColumnModel().getColumn(0).setMaxWidth(30); table.getColumnModel().getColumn(2).setMaxWidth(100); - if (customizer) { - table.setEnabled(false); - } } private void addFrameworkToModel(JsfComponentImplementation component) { @@ -1542,9 +1547,7 @@ if (item.isClickable()) { JButton button = new JButton( NbBundle.getMessage(JSFConfigurationWizardPanelVisual.class, "LBL_MoreButton")); //NOI18N - if (!inCustomizer) { - button.addActionListener(new JSFComponentModelActionListener(item.getJsfComponent())); - } + button.addActionListener(new JSFComponentModelActionListener(item.getJsfComponent())); return button; } else { return null; diff --git a/web.project/nbproject/project.properties b/web.project/nbproject/project.properties --- a/web.project/nbproject/project.properties +++ b/web.project/nbproject/project.properties @@ -56,7 +56,7 @@ javac.compilerargs=-Xlint:unchecked javadoc.arch=${basedir}/arch.xml -spec.version.base=1.35.0 +spec.version.base=1.36.0 # needed for the TestUtil class test.unit.cp.extra= diff --git a/web.project/nbproject/project.xml b/web.project/nbproject/project.xml --- a/web.project/nbproject/project.xml +++ b/web.project/nbproject/project.xml @@ -105,7 +105,9 @@ org.netbeans.api.web.webmodule - + + 1.26 + org.netbeans.libs.javacapi diff --git a/web.project/src/org/netbeans/modules/web/project/ui/customizer/CustomizerFrameworks.java b/web.project/src/org/netbeans/modules/web/project/ui/customizer/CustomizerFrameworks.java --- a/web.project/src/org/netbeans/modules/web/project/ui/customizer/CustomizerFrameworks.java +++ b/web.project/src/org/netbeans/modules/web/project/ui/customizer/CustomizerFrameworks.java @@ -127,11 +127,13 @@ properties.setProperty("serverInstanceID", serverInstanceID); // NOI18N jListFrameworks.setModel(new DefaultListModel()); + List usedExtenders = new LinkedList(); for (WebFrameworkProvider framework : uiProperties.getCurrentFrameworks()) { usedFrameworks.add(framework); ((DefaultListModel) jListFrameworks.getModel()).addElement(framework.getName()); WebModuleExtender extender = framework.createWebModuleExtender(webModule, controller); extenders.put(framework, extender); + usedExtenders.add(extender); extender.addChangeListener(new ExtenderListener(extender)); } jListFrameworks.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); @@ -141,6 +143,8 @@ if (WebFrameworks.getFrameworks().size() == jListFrameworks.getModel().getSize()) jButtonAdd.setEnabled(false); + + uiProperties.setExistingExtenders(usedExtenders); } /** This method is called from within the constructor to diff --git a/web.project/src/org/netbeans/modules/web/project/ui/customizer/WebProjectProperties.java b/web.project/src/org/netbeans/modules/web/project/ui/customizer/WebProjectProperties.java --- a/web.project/src/org/netbeans/modules/web/project/ui/customizer/WebProjectProperties.java +++ b/web.project/src/org/netbeans/modules/web/project/ui/customizer/WebProjectProperties.java @@ -215,6 +215,9 @@ //list of frameworks to add to the application private List newExtenders; + //list of changed frameworks + private List existingExtenders; + // MODELS FOR VISUAL CONTROLS // CustomizerSources @@ -536,7 +539,24 @@ } }); } - + + // try to save already included extenders + if (existingExtenders != null) { + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + for (WebModuleExtender webModuleExtender : existingExtenders) { + if (webModuleExtender instanceof WebModuleExtender.Savable) { + ((WebModuleExtender.Savable) webModuleExtender).save(project.getAPIWebModule()); + } + } + existingExtenders.clear(); + project.resetTemplates(); + } + }); + } + // ui logging of the added frameworks if ((addedFrameworkNames != null) && (addedFrameworkNames.size() > 0)) { Utils.logUI(NbBundle.getBundle(WebProjectProperties.class),"UI_WEB_PROJECT_FRAMEWORK_ADDED", // NOI18N @@ -963,6 +983,10 @@ public void setNewExtenders(List extenders) { newExtenders = extenders; } + + public void setExistingExtenders(List extenders) { + existingExtenders = extenders; + } public void setNewFrameworksNames(List names) { addedFrameworkNames = names;