Skip to content

Commit 0bfd358

Browse files
committed
Made the fix to allow the project to work within Linux. Improve Jython's chmod implementation by using the actual os.chmod call.
1 parent 012f9bd commit 0bfd358

File tree

13 files changed

+291
-19
lines changed

13 files changed

+291
-19
lines changed

jsf-flex-shared/core/src/main/java/com/googlecode/jsfFlex/renderkit/flex/AbstractFlexResponseWriter.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ public abstract class AbstractFlexResponseWriter extends ResponseWriterWrapper {
5959
private final static String TO_CREATE_JSF_FLEX_FLASH_APPLICATION_CONFIG_FILE_NAME = "jsfFlexFlashApplicationConfig.xml";
6060
private final static String JSF_FLEX_FLASH_APPLICATION_CONFIG_TOKEN = "jsfFlexFlashApplicationConfig";
6161

62+
private static final String DEFAULT_CHMOD_FILE_INCLUSION_REG_EXP = "*";
63+
private static final String DEFAULT_CHMOD_PERMISSION = "u+rx";
64+
6265
private final static Object LOCK = new Object();
6366
private final static FilenameFilter SWF_LIBRARY_FILENAME_FILTER = new FilenameFilter() {
6467
public boolean accept(File currDir, String currFileName) {
@@ -253,6 +256,12 @@ public final void processCreateSwf(String flexFile, IFlexApplicationContract com
253256
synchronized(LOCK){
254257

255258
if(!new File(flexContext.getJsfFlexSwcPath()).exists()){
259+
260+
//additional step for non-Windows [execute chmod so to enable execution of the scripts]
261+
if(!FlexConstants.WINDOWS_SYSTEM){
262+
changePermissionForExecution(flexContext.getFlexSDKPath() + "/bin", DEFAULT_CHMOD_PERMISSION, DEFAULT_CHMOD_FILE_INCLUSION_REG_EXP, null);
263+
}
264+
256265
checkFlexJavaSDKPath(flexContext);
257266

258267
//copy the necessary ActionScript files over for SWF generation
@@ -450,6 +459,21 @@ public final Map<String, String> getMultiLingualSupportMap(){
450459
return multiLingualSupportMap;
451460
}
452461

462+
/**
463+
* Need an additional step for Linux to increase the permission of flexSDK/bin directory for script execution
464+
*
465+
* @param directoryPath
466+
* @param permission
467+
* @param fileInclusionRegExp
468+
* @param queueTaskId
469+
* @return
470+
*/
471+
public final String changePermissionForExecution(String directoryPath, String permission, String fileInclusionRegExp, String queueTaskId) {
472+
queueTaskId = queueTaskId == null ? null : QUEUE_TASK_ID.CHMOD.getQueueTaskId(queueTaskId);
473+
getFlexTaskRunner().chmod(new File(directoryPath), permission, fileInclusionRegExp, queueTaskId);
474+
return queueTaskId;
475+
}
476+
453477
/**
454478
* This method will copy one file to an another file. Note that these should be specified in absolute path.<br>
455479
*

jsf-flex-shared/core/src/main/java/com/googlecode/jsfFlex/shared/tasks/IFlexTaskRunner.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919
package com.googlecode.jsfFlex.shared.tasks;
2020

21+
import java.io.File;
2122
import java.util.List;
2223

2324
import com.googlecode.jsfFlex.shared.adapter.IFlexApplicationContract;
@@ -28,30 +29,32 @@
2829
*/
2930
public interface IFlexTaskRunner extends ITaskRunner {
3031

31-
void makeDirectory(String directoryToCreate);
32-
33-
void deleteResources(String resourceToDelete, boolean isDirectory, String queueTaskId);
34-
35-
void writeBodyContent(IFlexContract componentFlex);
36-
37-
void replaceTokenWithValue(String targetAbsolutePath, String valueToReplaceWith, String tokenReplace);
32+
void chmod(File directory, String permission, String fileInclusionRegExp, String queueTaskId);
3833

3934
void copyFile(String fileToCopy, String fileToCopyTo, String queueTaskId);
4035

4136
void copyFileSet(String copyDir, String copyInclude, String copyExclude, String copyTo, String queueTaskId);
4237

38+
void copyLocale(String locale, String flexSDKRootPath, String queueTaskId);
39+
4340
void createMXML(String targetAbsolutePath, String copyTo);
4441

45-
void createSwcSourceFiles(String swcPath, List<String> systemSourceFiles, String jsfFlexMainSwcConfigFile, String webContextPath);
42+
void createSWF(String flexFile, String swfPath, IFlexApplicationContract componentFlex, String flexSDKRootPath, String locale, String localePath, String queueTaskId);
43+
44+
void createSwfSourceFiles(String swfBasePath, List<String> systemSwfSourceFiles);
45+
46+
void createSwcSourceFiles(String swcPath, List<String> systemSourceFiles, String jsfFlexMainSwcConfigFile, String webContextPath);
4647

4748
void createSystemSWCFile(String sourcePath, String outPut, String flexSDKRootPath, String loadConfigFilePath, IFlexApplicationContract componentFlex, String queueTaskId);
4849

49-
void createSWF(String flexFile, String swfPath, IFlexApplicationContract componentFlex, String flexSDKRootPath, String locale, String localePath, String queueTaskId);
50+
void deleteResources(String resourceToDelete, boolean isDirectory, String queueTaskId);
5051

51-
void copyLocale(String locale, String flexSDKRootPath, String queueTaskId);
52-
53-
void createSwfSourceFiles(String swfBasePath, List<String> systemSwfSourceFiles);
52+
void makeDirectory(String directoryToCreate);
5453

5554
void renameFile(String sourceFile, String destFile, boolean overWrite);
5655

56+
void replaceTokenWithValue(String targetAbsolutePath, String valueToReplaceWith, String tokenReplace);
57+
58+
void writeBodyContent(IFlexContract componentFlex);
59+
5760
}

jsf-flex-shared/core/src/main/java/com/googlecode/jsfFlex/shared/tasks/ITaskRunner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
public interface ITaskRunner {
2727

2828
public enum QUEUE_TASK_ID {
29-
DELETE_RESOURCES, COPY_FILE, COPY_FILE_SET,
29+
DELETE_RESOURCES, CHMOD, COPY_FILE, COPY_FILE_SET,
3030
CREATE_SYSTEM_SWC_FILE, CREATE_SWF, COPY_LOCALE,
3131
UNZIP_ARCHIVE_RELATIVE, UNZIP_ARCHIVE_ABSOLUTE_FI, UNZIP_ARCHIVE_ABSOLUTE_IS;
3232

runnerImpl/flexTaskRunnerImpl/antFlexTaskRunnerImpl/src/main/java/com/googlecode/jsfFlex/shared/tasks/AntFlexTaskRunnerImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.googlecode.jsfFlex.shared.adapter.IFlexApplicationContract;
3030
import com.googlecode.jsfFlex.shared.adapter.IFlexContract;
3131
import com.googlecode.jsfFlex.shared.context.AbstractFlexContext;
32+
import com.googlecode.jsfFlex.shared.tasks.ant.ChmodTask;
3233
import com.googlecode.jsfFlex.shared.tasks.ant.CopyLocaleTask;
3334
import com.googlecode.jsfFlex.shared.tasks.ant.DeleteTask;
3435
import com.googlecode.jsfFlex.shared.tasks.ant.EchoTask;
@@ -57,6 +58,15 @@ final class AntFlexTaskRunnerImpl extends TaskRunnerImpl implements IFlexTaskRun
5758
super();
5859
}
5960

61+
public void chmod(File directory, String permission, String fileInclusionRegExp, String queueTaskId) {
62+
ChmodTask chmodDirectory = new ChmodTask(directory, permission, fileInclusionRegExp);
63+
if(queueTaskId != null){
64+
queueFutureTask(queueTaskId, chmodDirectory);
65+
}else{
66+
addTask(chmodDirectory);
67+
}
68+
}
69+
6070
public void copyFile(String fileToCopy, String fileToCopyTo, String queueTaskId) {
6171
FileCopyTask fileCopier = new FileCopyTask(fileToCopy, fileToCopyTo);
6272
if(queueTaskId != null){
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package com.googlecode.jsfFlex.shared.tasks.ant;
20+
21+
import java.io.File;
22+
23+
import org.apache.tools.ant.BuildException;
24+
import org.apache.tools.ant.Target;
25+
import org.apache.tools.ant.taskdefs.Chmod;
26+
27+
import com.googlecode.jsfFlex.shared.exception.ComponentBuildException;
28+
29+
/**
30+
* @author Ji Hoon Kim
31+
*/
32+
public final class ChmodTask extends AbstractAntBaseTask {
33+
34+
private static final String CHMOD_TARGET = "chmod";
35+
36+
private final Chmod _chmodTask;
37+
private final Target _chmodTarget;
38+
39+
private File _dir;
40+
private String _permission;
41+
private String _fileInclusionRegExp;
42+
43+
public ChmodTask(){
44+
super();
45+
}
46+
47+
public ChmodTask(File dir, String permission, String fileInclusionRegExp) {
48+
super();
49+
50+
_dir = dir;
51+
_permission = permission;
52+
_fileInclusionRegExp = fileInclusionRegExp;
53+
}
54+
55+
{
56+
_chmodTarget = new Target();
57+
_chmodTarget.setName(CHMOD_TARGET);
58+
_chmodTarget.setProject(_taskProject);
59+
_taskProject.addTarget(_chmodTarget);
60+
61+
_chmodTask = new Chmod();
62+
_chmodTask.setOwningTarget(_chmodTarget);
63+
_chmodTask.setProject(_taskProject);
64+
65+
_chmodTarget.addTask(_chmodTask);
66+
}
67+
68+
@Override
69+
protected void performTask() {
70+
71+
_chmodTask.setDir(_dir);
72+
73+
_chmodTask.setPerm(_permission);
74+
75+
_chmodTask.setIncludes(_fileInclusionRegExp);
76+
77+
_chmodTask.maybeConfigure();
78+
79+
try {
80+
81+
buildProject(CHMOD_TARGET);
82+
83+
} catch (BuildException buildException) {
84+
_taskProject.fireBuildFinished(buildException);
85+
StringBuilder errorMessage = new StringBuilder();
86+
errorMessage.append("Error in Chmod's performTask with following fields \n");
87+
errorMessage.append(toString());
88+
throw new ComponentBuildException(errorMessage.toString(), buildException);
89+
}
90+
91+
}
92+
93+
@Override
94+
public String toString() {
95+
StringBuilder content = new StringBuilder();
96+
content.append("dir [ ");
97+
content.append(_dir);
98+
content.append(" ] ");
99+
content.append("permission [ ");
100+
content.append(_permission);
101+
content.append(" ] ");
102+
content.append("fileInclusionRegExp [ ");
103+
content.append(_fileInclusionRegExp);
104+
content.append(" ] ");
105+
return content.toString();
106+
}
107+
108+
public ChmodTask dir(File dir) {
109+
_dir = dir;
110+
return this;
111+
}
112+
113+
public ChmodTask permission(String permission) {
114+
_permission = permission;
115+
return this;
116+
}
117+
118+
public ChmodTask fileInclusionRegExp(String fileInclusionRegExp) {
119+
_fileInclusionRegExp = fileInclusionRegExp;
120+
return this;
121+
}
122+
123+
}

runnerImpl/flexTaskRunnerImpl/antFlexTaskRunnerImpl/src/main/java/com/googlecode/jsfFlex/shared/tasks/ant/CopyLocaleTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
public final class CopyLocaleTask extends AbstractAntBaseTask {
3535

3636
private static final String WINDOWS_EXEC = "bin" + File.separatorChar + "copylocale.exe";
37-
private static final String NON_WINDOWS_SHELL = "bin" + File.separatorChar + "copylocale.sh";
37+
private static final String NON_WINDOWS_SHELL = "bin" + File.separatorChar + "copylocale";
3838

3939
private static final String COPY_LOCALE_TARGET = "copy_locale";
4040

runnerImpl/flexTaskRunnerImpl/antFlexTaskRunnerImpl/src/main/java/com/googlecode/jsfFlex/shared/tasks/ant/MXMLCTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
public final class MXMLCTask extends AbstractAntBaseTask {
3737

3838
private static final String WINDOWS_EXEC = "bin" + File.separatorChar + "mxmlc.exe";
39-
private static final String NON_WINDOWS_SHELL = "bin" + File.separatorChar + "mxmlc.sh";
39+
private static final String NON_WINDOWS_SHELL = "bin" + File.separatorChar + "mxmlc";
4040

4141
private static final String MXMLC_TARGET = "mxmlc_compile";
4242

runnerImpl/flexTaskRunnerImpl/antFlexTaskRunnerImpl/src/main/java/com/googlecode/jsfFlex/shared/tasks/ant/SWCTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
public final class SWCTask extends AbstractAntBaseTask {
3737

3838
private static final String WINDOWS_EXEC = "bin" + File.separatorChar + "compc.exe";
39-
private static final String NON_WINDOWS_SHELL = "bin" + File.separatorChar + "compc.sh";
39+
private static final String NON_WINDOWS_SHELL = "bin" + File.separatorChar + "compc";
4040

4141
private static final String SOURCE_PATH = " -source-path ";
4242
private static final String OUTPUT = " -output ";

runnerImpl/flexTaskRunnerImpl/jythonFlexTaskRunnerImpl/src/main/java/com/googlecode/jsfFlex/shared/tasks/JythonFlexTaskRunnerImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.googlecode.jsfFlex.shared.adapter.IFlexApplicationContract;
3434
import com.googlecode.jsfFlex.shared.adapter.IFlexContract;
3535
import com.googlecode.jsfFlex.shared.context.AbstractFlexContext;
36+
import com.googlecode.jsfFlex.shared.tasks.jython.ChmodTask;
3637
import com.googlecode.jsfFlex.shared.tasks.jython.CopyLocaleTask;
3738
import com.googlecode.jsfFlex.shared.tasks.jython.DeleteTask;
3839
import com.googlecode.jsfFlex.shared.tasks.jython.EchoTask;
@@ -95,6 +96,15 @@ final class JythonFlexTaskRunnerImpl extends TaskRunnerImpl implements IFlexTask
9596
super();
9697
}
9798

99+
public void chmod(File directory, String permission, String fileInclusionRegExp, String queueTaskId) {
100+
ChmodTask chmodDirectory = new ChmodTask(directory, permission, fileInclusionRegExp);
101+
if(queueTaskId != null){
102+
queueFutureTask(queueTaskId, chmodDirectory);
103+
}else{
104+
addTask(chmodDirectory);
105+
}
106+
}
107+
98108
public void copyFile(String fileToCopy, String fileToCopyTo, String queueTaskId) {
99109
FileCopyTask fileCopier = new FileCopyTask(fileToCopy, fileToCopyTo);
100110
if(queueTaskId != null){

0 commit comments

Comments
 (0)