This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 211768
Collapse All | Expand All

(-)a/web.project/src/org/netbeans/modules/web/project/ui/customizer/WebProjectProperties.java (-20 / +87 lines)
Lines 54-60 Link Here
54
import java.nio.charset.UnsupportedCharsetException;
54
import java.nio.charset.UnsupportedCharsetException;
55
import java.util.*;
55
import java.util.*;
56
import java.util.ArrayList;
56
import java.util.ArrayList;
57
import java.util.concurrent.CopyOnWriteArrayList;
57
import java.util.concurrent.*;
58
import java.util.logging.Level;
58
import java.util.logging.Level;
59
import java.util.logging.Logger;
59
import java.util.logging.Logger;
60
import javax.swing.ButtonModel;
60
import javax.swing.ButtonModel;
Lines 95-100 Link Here
95
import org.netbeans.modules.j2ee.deployment.devmodules.api.InstanceRemovedException;
95
import org.netbeans.modules.j2ee.deployment.devmodules.api.InstanceRemovedException;
96
import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule;
96
import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule;
97
import org.netbeans.api.j2ee.core.Profile;
97
import org.netbeans.api.j2ee.core.Profile;
98
import org.netbeans.api.progress.ProgressHandle;
99
import org.netbeans.api.progress.ProgressRunnable;
100
import org.netbeans.api.progress.ProgressUtils;
98
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider;
101
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider;
99
import org.netbeans.modules.java.api.common.SourceRoots;
102
import org.netbeans.modules.java.api.common.SourceRoots;
100
import org.netbeans.modules.java.api.common.ant.UpdateHelper;
103
import org.netbeans.modules.java.api.common.ant.UpdateHelper;
Lines 117-122 Link Here
117
import org.openide.modules.SpecificationVersion;
120
import org.openide.modules.SpecificationVersion;
118
import org.openide.util.Exceptions;
121
import org.openide.util.Exceptions;
119
import org.openide.util.NbBundle;
122
import org.openide.util.NbBundle;
123
import org.openide.util.NbBundle.Messages;
120
import org.openide.util.Parameters;
124
import org.openide.util.Parameters;
121
import org.openide.util.RequestProcessor;
125
import org.openide.util.RequestProcessor;
122
import org.openide.util.Task;
126
import org.openide.util.Task;
Lines 530-553 Link Here
530
                DDHelper.createWebXml(j2eeProfile, webInf);
534
                DDHelper.createWebXml(j2eeProfile, webInf);
531
            }
535
            }
532
536
533
            if (newExtenders != null) {
537
            // handle new and existing extenders
534
                for (int i = 0; i < newExtenders.size(); i++) {
538
            handleExtenders(newExtenders, existingExtenders);
535
                    ((WebModuleExtender) newExtenders.get(i)).extend(project.getAPIWebModule());
536
                }
537
                newExtenders.clear();
538
                project.resetTemplates();
539
            }
540
541
             // try to save already included extenders
542
            if (existingExtenders != null) {
543
                for (WebModuleExtender webModuleExtender : existingExtenders) {
544
                    if (webModuleExtender instanceof WebModuleExtender.Savable) {
545
                        ((WebModuleExtender.Savable) webModuleExtender).save(project.getAPIWebModule());
546
                    }
547
                }
548
                existingExtenders.clear();
549
                project.resetTemplates();
550
            }
551
539
552
            // ui logging of the added frameworks
540
            // ui logging of the added frameworks
553
            if ((addedFrameworkNames != null) && (addedFrameworkNames.size() > 0)) {
541
            if ((addedFrameworkNames != null) && (addedFrameworkNames.size() > 0)) {
Lines 1027-1033 Link Here
1027
        Parameters.notNull("al", al);   //NOI18N
1015
        Parameters.notNull("al", al);   //NOI18N
1028
        optionListeners.remove(al);
1016
        optionListeners.remove(al);
1029
    }
1017
    }
1030
     
1018
1019
    @Messages({
1020
        "WebProjectProperties.label.adding.project.frameworks=Adding project frameworks",
1021
        "WebProjectProperties.label.saving.project.frameworks=Saving project frameworks"
1022
    })
1023
    private void handleExtenders(final List newExtenders, final List<WebModuleExtender> existingExtenders) {
1024
        if (newExtenders != null) {
1025
            RequestProcessor.getDefault().post(new Runnable() {
1026
1027
                @Override
1028
                public void run() {
1029
                    ProgressUtils.showProgressDialogAndRun(new Runnable() {
1030
1031
                        @Override
1032
                        public void run() {
1033
                            if (newExtenders != null) {
1034
                                for (int i = 0; i < newExtenders.size(); i++) {
1035
                                    ((WebModuleExtender) newExtenders.get(i)).extend(project.getAPIWebModule());
1036
                                }
1037
                                newExtenders.clear();
1038
                                project.resetTemplates();
1039
                            }
1040
1041
                            saveExistingExtenders(existingExtenders);
1042
                        }
1043
                    }, Bundle.WebProjectProperties_label_adding_project_frameworks());
1044
                }
1045
            });
1046
        } else if (existingExtenders != null) {
1047
            RequestProcessor.getDefault().post(new Runnable() {
1048
1049
                @Override
1050
                public void run() {
1051
                    final FutureTask<Void> future = new FutureTask<Void>(new Callable<Void>() {
1052
                        @Override
1053
                        public Void call() throws Exception {
1054
                            saveExistingExtenders(existingExtenders);
1055
                            return null;
1056
                        }
1057
                    });
1058
                    try {
1059
                        future.run();
1060
                        future.get(300, TimeUnit.MILLISECONDS);
1061
                    } catch (InterruptedException ex) {
1062
                        Exceptions.printStackTrace(ex);
1063
                    } catch (ExecutionException ex) {
1064
                        Exceptions.printStackTrace(ex);
1065
                    } catch (TimeoutException ex) {
1066
                        // timeouted
1067
                        ProgressUtils.showProgressDialogAndRun(new Runnable() {
1068
                            @Override
1069
                            public void run() {
1070
                                try {
1071
                                    future.get();
1072
                                } catch (InterruptedException ex) {
1073
                                    Exceptions.printStackTrace(ex);
1074
                                } catch (ExecutionException ex) {
1075
                                    Exceptions.printStackTrace(ex);
1076
                                }
1077
                            }
1078
                        }, Bundle.WebProjectProperties_label_saving_project_frameworks());
1079
                    }
1080
                }
1081
            });
1082
        }
1083
    }
1084
1085
    private void saveExistingExtenders(List<WebModuleExtender> existingExtenders) {
1086
        // try to save already included extenders
1087
        if (existingExtenders != null) {
1088
            for (WebModuleExtender webModuleExtender : existingExtenders) {
1089
                if (webModuleExtender instanceof WebModuleExtender.Savable) {
1090
                    ((WebModuleExtender.Savable) webModuleExtender).save(project.getAPIWebModule());
1091
                }
1092
            }
1093
            existingExtenders.clear();
1094
            project.resetTemplates();
1095
        }
1096
    }
1097
1031
    private static class CallbackImpl implements J2EEProjectProperties.Callback {
1098
    private static class CallbackImpl implements J2EEProjectProperties.Callback {
1032
1099
1033
        private WebProject project;
1100
        private WebProject project;

Return to bug 211768