1 Project = Ext.extend(Object, {
2 constructor : function(projectFile, builder) {
3 var fileName = projectFile.split(/\\|\//i).pop(),
4 dir = projectFile.replace(fileName, ''),
7 if (!Fs.exists(projectFile)) {
8 throw 'Project file doesn\'t exist';
11 contents = Fs.readFile(projectFile);
13 config = JSON.parse(contents);
16 throw 'The JSB file is not valid JSON.\n' + e.toString();
20 targets: config.targets || config.pkgs || [],
21 name: config.projectName,
22 license: config.licenseText,
23 jsbDir: Fs.getFullPath(dir),
25 packages: config.packages || [],
26 builds: config.builds || [],
27 // If the JSB file contains a deployDir property, append that to the -d deployDir
28 deployDir: builder.get('deployDir') + Fs.sep + (config.deployDir || ''),
29 resources: config.resources || []
32 this.builder = builder;
38 parseTargets : function() {
39 // Split targets up into packages and builds for backwards compatibility
40 this.get('targets').forEach(function(item) {
42 this.get('builds').push(item);
45 this.get('packages').push(item);
49 // Convert each package config object into an actual Package instance
50 this.set('packages', this.get('packages').map(function(item) {
51 return new Package(item, this);
54 // Convert each build config object into an actual Build instance
55 this.set('builds', this.get('builds').map(function(item) {
56 return new Build(item, this);
60 getPackageById : function(id) {
62 this.get('packages').forEach(function(pkg) {
63 if (pkg.get('id') == id) {
71 * Creates the directory we are going to deploy to.
73 makeDeployDir: function() {
74 var project = this.project,
75 deployDir = Fs.mkdir(this.get('deployDir'));
77 this.set('deployDir', deployDir);
79 if (this.get('verbose')) {
80 this.log('Created the deploy directory ' + deployDir);
86 this.createPackages();
90 if (this.builder.get('verbose')) {
93 Logger.log('Done building!\n');
96 createPackages : function() {
97 this.get('packages').forEach(function(pkg) {
102 createBuilds : function() {
103 this.get('builds').forEach(function(build) {
108 copyResources : function() {
109 if (this.builder.get('verbose')) {
113 Logger.log('Copy resources...');
115 this.get('resources').forEach(function(resource) {
116 var filters = resource.filters,
117 srcDir = this.get('jsbDir') + Fs.sep + resource.src,
118 dest = resource.dest || resource.src;
121 dest = this.get('deployDir') + Fs.sep + dest;
123 // TODO: Implement filters
124 if (this.builder.get('verbose')) {
125 Logger.log(' + ' + resource.src + ' -> ' + dest);
128 Fs.copy(srcDir, dest);
132 get : function(key) {
133 return this.config[key] || false;
136 set : function(key, value, ifNotExists) {
137 if (ifNotExists && this.get(key) !== false) {
140 this.config[key] = value;
143 compressTarget : function(target) {
144 if (this.builder.get('nocompress') || !target.get('compress')) {
148 Logger.log(' * Compress and obfuscate ' + target.get('target') + '...');
150 var destination = target.get('targetPath'),
151 source = destination + '-temp-' + Date.now() * Math.random(),
152 command = this.getCompressor() + '-o ' + destination + ' ' + source;
154 Fs.copy(destination, source);
155 Cmd.execute(command);
156 // If we don't wait, it won't copy from the temp file.
157 if (Platform.isWindows) {
163 getCompressor : function() {
164 return 'java -jar ' + system.script.replace(Fs.getPath('bin/JSBuilder.js'), '') + Fs.getPath('ycompressor/ycompressor.jar') + ' --type js ';
167 getSourceFiles: function() {
169 Logger.log(' Source files');
173 this.get('builds').forEach(function(build) {
174 if (build.get('packages')) {
175 Logger.log('<!-- build: ' + build.get('name') + ' -->');
177 build.get('packages').forEach(function(pkg) {
178 pkg = build.project.getPackageById(pkg);
180 Logger.log('<!-- package: ' + pkg.get('name') + ' -->');
182 pkg.get('files').forEach(function(file) {
183 Logger.log('<script type="text/javascript" src="../../' + file.path + file.name + '"></script>');
194 getSpecFiles: function() {
196 Logger.log(' Spec files');
200 this.get('builds').forEach(function(build) {
201 if (build.get('packages')) {
202 Logger.log('<!-- build: ' + build.get('name') + ' -->');
204 build.get('packages').forEach(function(pkg) {
205 pkg = build.project.getPackageById(pkg);
207 Logger.log('<!-- package: ' + pkg.get('name') + ' -->');
209 pkg.get('files').forEach(function(file) {
210 Logger.log('<script type="text/javascript" src="spec/' + file.path.replace('src/', '') + file.name + '"></script>');