@@ -182,20 +182,53 @@ $injector.register("projectService", ProjectService);
182
182
183
183
class AndroidProjectService implements IAndroidProjectService {
184
184
constructor ( private $fs : IFileSystem ,
185
- private $childProcess : IChildProcess ) { }
185
+ private $childProcess : IChildProcess ,
186
+ private $errors : IErrors ,
187
+ private $logger : ILogger ) { }
186
188
187
189
public createProject ( projectData : IProjectData ) : IFuture < void > {
188
190
return ( ( ) => {
189
191
var safeActivityName = projectData . projectName . replace ( / \W / g, '' ) ;
190
- var packageAsPath = projectData . projectId . replace ( / \. / g, path . sep ) ;
192
+ var packageName = projectData . projectId ;
193
+ var packageAsPath = packageName . replace ( / \. / g, path . sep ) ;
191
194
192
195
var targetApi = this . getTargetApi ( ) ;
193
196
var manifestFile = path . join ( this . frameworkDir , "AndroidManifest.xml" ) ;
194
- console . log ( projectData ) ;
197
+
198
+ this . validatePackageName ( packageName ) ;
199
+ this . validateProjectName ( projectData . projectName ) ;
195
200
196
201
} ) . future < any > ( ) ( ) ;
197
202
}
198
203
204
+ private validatePackageName ( packageName : string ) : boolean {
205
+ //Make the package conform to Java package types
206
+ //Enforce underscore limitation
207
+ if ( ! / ^ [ a - z A - Z ] + ( \. [ a - z A - Z 0 - 9 ] [ a - z A - Z 0 - 9 _ ] * ) + $ / . test ( packageName ) ) {
208
+ this . $errors . fail ( "Package name must look like: com.company.Name" ) ;
209
+ }
210
+
211
+ //Class is a reserved word
212
+ if ( / \b [ C c ] l a s s \b / . test ( packageName ) ) {
213
+ this . $errors . fail ( "class is a reserved word" ) ;
214
+ }
215
+
216
+ return true ;
217
+ }
218
+
219
+ private validateProjectName ( projectName : string ) : boolean {
220
+ if ( projectName === '' ) {
221
+ this . $errors . fail ( "Project name cannot be empty" ) ;
222
+ }
223
+
224
+ //Classes in Java don't begin with numbers
225
+ if ( / ^ [ 0 - 9 ] / . test ( projectName ) ) {
226
+ this . $errors . fail ( "Project name must not begin with a number" ) ;
227
+ }
228
+
229
+ return true ;
230
+ }
231
+
199
232
private get frameworkDir ( ) : string {
200
233
// This should be downloaded as npm package
201
234
return path . join ( __dirname , "../../framework" , "android" ) ;
0 commit comments