@@ -182,20 +182,53 @@ $injector.register("projectService", ProjectService);
182182
183183class AndroidProjectService implements IAndroidProjectService {
184184 constructor ( private $fs : IFileSystem ,
185- private $childProcess : IChildProcess ) { }
185+ private $childProcess : IChildProcess ,
186+ private $errors : IErrors ,
187+ private $logger : ILogger ) { }
186188
187189 public createProject ( projectData : IProjectData ) : IFuture < void > {
188190 return ( ( ) => {
189191 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 ) ;
191194
192195 var targetApi = this . getTargetApi ( ) ;
193196 var manifestFile = path . join ( this . frameworkDir , "AndroidManifest.xml" ) ;
194- console . log ( projectData ) ;
197+
198+ this . validatePackageName ( packageName ) ;
199+ this . validateProjectName ( projectData . projectName ) ;
195200
196201 } ) . future < any > ( ) ( ) ;
197202 }
198203
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+
199232 private get frameworkDir ( ) : string {
200233 // This should be downloaded as npm package
201234 return path . join ( __dirname , "../../framework" , "android" ) ;
0 commit comments