44
44
import java .util .EnumSet ;
45
45
import javax .swing .JComponent ;
46
46
import javax .swing .event .ChangeListener ;
47
+ import org .cakephp .netbeans .module .CakePhpModule ;
47
48
import org .cakephp .netbeans .preferences .CakePreferences ;
48
49
import org .cakephp .netbeans .ui .customizer .CakePhpCustomizerPanel ;
50
+ import org .cakephp .netbeans .validator .CakePhpCustomizerValidator ;
49
51
import org .netbeans .modules .php .api .phpmodule .PhpModule ;
52
+ import org .netbeans .modules .php .api .validation .ValidationResult ;
50
53
import org .netbeans .modules .php .spi .framework .PhpModuleCustomizerExtender ;
54
+ import org .openide .filesystems .FileObject ;
51
55
import org .openide .util .ChangeSupport ;
52
56
import org .openide .util .HelpCtx ;
53
57
import org .openide .util .NbBundle ;
@@ -61,19 +65,24 @@ public class CakePhpModuleCustomizerExtender extends PhpModuleCustomizerExtender
61
65
private CakePhpCustomizerPanel component ;
62
66
private final String appDirectoryPath ;
63
67
private final String cakePhpDirPath ;
64
- private final boolean isProjectDir ;
65
68
private final boolean isShowPopupForOneItem ;
66
69
private final boolean originalAutoCreateState ;
67
70
private final boolean originalIgnoreTmpDirectory ;
71
+ private final boolean isEnabled ;
68
72
private ChangeSupport changeSupport = new ChangeSupport (this );
73
+ private String errorMessage ;
74
+ private boolean isValid ;
75
+ private final PhpModule phpModule ;
69
76
70
77
CakePhpModuleCustomizerExtender (PhpModule phpModule ) {
78
+ this .phpModule = phpModule ;
71
79
originalAutoCreateState = CakePreferences .getAutoCreateView (phpModule );
72
80
cakePhpDirPath = CakePreferences .getCakePhpDirPath (phpModule );
73
- isProjectDir = CakePreferences .useProjectDirectory (phpModule );
74
81
originalIgnoreTmpDirectory = CakePreferences .ignoreTmpDirectory (phpModule );
75
82
isShowPopupForOneItem = CakePreferences .isShowPopupForOneItem (phpModule );
76
83
appDirectoryPath = CakePreferences .getAppDirectoryPath (phpModule );
84
+ Boolean enabled = CakePreferences .isEnabled (phpModule );
85
+ isEnabled = enabled == null ? false : enabled ;
77
86
}
78
87
79
88
@ Override
@@ -83,12 +92,18 @@ public String getDisplayName() {
83
92
84
93
@ Override
85
94
public void addChangeListener (ChangeListener listener ) {
86
- changeSupport .addChangeListener (listener );
95
+ if (listener instanceof CakePhpModule ) {
96
+ changeSupport .addChangeListener (listener );
97
+ }
98
+ getPanel ().addChangeListener (listener );
87
99
}
88
100
89
101
@ Override
90
102
public void removeChangeListener (ChangeListener listener ) {
91
- changeSupport .removeChangeListener (listener );
103
+ if (listener instanceof CakePhpModule ) {
104
+ changeSupport .removeChangeListener (listener );
105
+ }
106
+ getPanel ().removeChangeListener (listener );
92
107
}
93
108
94
109
@ Override
@@ -103,31 +118,33 @@ public HelpCtx getHelp() {
103
118
104
119
@ Override
105
120
public boolean isValid () {
106
- return true ;
121
+ validate ();
122
+ return isValid ;
107
123
}
108
124
109
125
@ Override
110
126
public String getErrorMessage () {
111
- return null ;
127
+ validate ();
128
+ return errorMessage ;
112
129
}
113
130
114
- public void fireChange () {
131
+ void fireChange () {
115
132
changeSupport .fireChange ();
116
133
}
117
134
118
135
@ Override
119
136
public EnumSet <Change > save (PhpModule phpModule ) {
120
137
EnumSet <Change > enumset = EnumSet .of (Change .FRAMEWORK_CHANGE );
121
138
boolean newAutoCreateState = getPanel ().isAutoCreateView ();
122
- String newCakePhpDirPath = getPanel ().getCakePhpDirTextField ();
139
+ String newCakePhpDirPath = getPanel ().getCakePhpDirPath ();
123
140
boolean newIgnoreTmpDirectory = getPanel ().ignoreTmpDirectory ();
124
141
String newAppDirectoryPath = getPanel ().getAppDirectoryPath ();
125
142
126
143
if (newAutoCreateState != originalAutoCreateState ) {
127
144
CakePreferences .setAutoCreateView (phpModule , newAutoCreateState );
128
145
}
129
- if (isProjectDir != getPanel ().isUseProjectDirectory ()) {
130
- CakePreferences .setUseProjectDirectory (phpModule , !isProjectDir );
146
+ if (isEnabled != getPanel ().isEnabledCakePhp ()) {
147
+ CakePreferences .setEnabled (phpModule , !isEnabled );
131
148
}
132
149
if (isShowPopupForOneItem != getPanel ().isShowPopupForOneItem ()) {
133
150
CakePreferences .setShowPopupForOneItem (phpModule , !isShowPopupForOneItem );
@@ -150,12 +167,45 @@ private CakePhpCustomizerPanel getPanel() {
150
167
if (component == null ) {
151
168
component = new CakePhpCustomizerPanel ();
152
169
component .setAutoCreateView (originalAutoCreateState );
153
- component .setCakePhpDirTextField (cakePhpDirPath );
154
- component .setUseProjectDirectory (isProjectDir );
170
+ component .setCakePhpDirPath (cakePhpDirPath );
155
171
component .setIgnoreTmpDirectory (originalIgnoreTmpDirectory );
156
172
component .setShowPopupForOneItem (isShowPopupForOneItem );
157
173
component .setAppDirectoryPath (appDirectoryPath );
174
+ component .setEnabledCakePhp (isEnabled );
158
175
}
159
176
return component ;
160
177
}
178
+
179
+ @ NbBundle .Messages ("CakePhpModuleCustomizerExtender.error.source.invalid=Can't find source directory. Project might be broken." )
180
+ void validate () {
181
+ CakePhpCustomizerPanel panel = getPanel ();
182
+ if (!panel .isEnabledCakePhp ()) {
183
+ isValid = true ;
184
+ errorMessage = null ;
185
+ return ;
186
+ }
187
+
188
+ // get source directory
189
+ FileObject sourceDirectory = phpModule .getSourceDirectory ();
190
+ if (sourceDirectory == null ) {
191
+ // broken project
192
+ isValid = false ;
193
+ errorMessage = Bundle .CakePhpModuleCustomizerExtender_error_source_invalid ();
194
+ return ;
195
+ }
196
+
197
+ // validate
198
+ CakePhpCustomizerValidator validator = new CakePhpCustomizerValidator ()
199
+ .validateCakePhpPath (sourceDirectory , panel .getCakePhpDirPath ())
200
+ .validateAppPath (sourceDirectory , panel .getAppDirectoryPath ());
201
+ ValidationResult result = validator .getResult ();
202
+ if (result .hasWarnings ()) {
203
+ isValid = false ;
204
+ errorMessage = result .getWarnings ().get (0 ).getMessage ();
205
+ return ;
206
+ }
207
+ // no problem
208
+ isValid = true ;
209
+ errorMessage = null ;
210
+ }
161
211
}
0 commit comments