Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r8aded0b18a5a7712622ae56f38923fa297449977 -r7cce0b08560ba7d6ce7fa6470950f065bbb3cb46 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/util/HttpUrlConnectionUtil.java =================================================================== diff -u -rbb09e59547fe7c584f105bee03af346a05dde411 -r7cce0b08560ba7d6ce7fa6470950f065bbb3cb46 --- lams_common/src/java/org/lamsfoundation/lams/util/HttpUrlConnectionUtil.java (.../HttpUrlConnectionUtil.java) (revision bb09e59547fe7c584f105bee03af346a05dde411) +++ lams_common/src/java/org/lamsfoundation/lams/util/HttpUrlConnectionUtil.java (.../HttpUrlConnectionUtil.java) (revision 7cce0b08560ba7d6ce7fa6470950f065bbb3cb46) @@ -63,7 +63,13 @@ public static final int STATUS_OK = 1; public static final int STATUS_ERROR = -1; + // environment variables + public static final String JBOSS_BIND_ADDRESS_KEY = "jboss.bind.address"; + // if JBoss bind port is different than 8080, this must be set using -Dlams.port=XXXX as a command line parameter + public static final String LAMS_PORT_KEY = "lams.port"; + private static boolean defaultTrustManagerSet = false; + private static String lamsLocalAddress; /** * Write URL connection repsonse to OutputStream. @@ -316,4 +322,20 @@ return con; } -} + + public static String getLamsLocalAddress() { + if (HttpUrlConnectionUtil.lamsLocalAddress == null) { + // get address where JBoss is running for localhost calls, otherwise there is a problem with load balancing + String port = System.getProperty(HttpUrlConnectionUtil.LAMS_PORT_KEY); + // if there is no port given explicitly as parameter, fall back to SERVER_URL + if (port == null) { + HttpUrlConnectionUtil.lamsLocalAddress = Configuration.get(ConfigurationKeys.SERVER_URL); + } else { + HttpUrlConnectionUtil.lamsLocalAddress = "http://" + + System.getProperty(HttpUrlConnectionUtil.JBOSS_BIND_ADDRESS_KEY) + ":" + port + "/" + + Configuration.get(ConfigurationKeys.SERVER_URL_CONTEXT_PATH); + } + } + return HttpUrlConnectionUtil.lamsLocalAddress; + } +} \ No newline at end of file Index: lams_learning/src/java/org/lamsfoundation/lams/learning/export/ActivityPortfolio.java =================================================================== diff -u -r0008a92961ecc6d41f1722f1b46eddf8f3a3b65d -r7cce0b08560ba7d6ce7fa6470950f065bbb3cb46 --- lams_learning/src/java/org/lamsfoundation/lams/learning/export/ActivityPortfolio.java (.../ActivityPortfolio.java) (revision 0008a92961ecc6d41f1722f1b46eddf8f3a3b65d) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/export/ActivityPortfolio.java (.../ActivityPortfolio.java) (revision 7cce0b08560ba7d6ce7fa6470950f065bbb3cb46) @@ -40,7 +40,7 @@ private String activityDescription; private String activityName; private String exportUrl; - private List childPortfolios; + private List childPortfolios; /* The link to the tool page from the main export page */ private String toolLink; private boolean headingNoPage; @@ -56,7 +56,7 @@ /** * @param toolLink - * The toolLink to set. + * The toolLink to set. */ public void setToolLink(String toolLink) { this.toolLink = toolLink; @@ -82,7 +82,7 @@ /** * @param activityName - * The activityName to set. + * The activityName to set. */ public void setActivityName(String activityName) { this.activityName = activityName; @@ -97,7 +97,7 @@ /** * @param exportUrl - * The exportUrl to set. + * The exportUrl to set. */ public void setExportUrl(String exportUrl) { this.exportUrl = exportUrl; @@ -112,7 +112,7 @@ /** * @param activityId - * The activityId to set. + * The activityId to set. */ public void setActivityId(Long activityId) { this.activityId = activityId; @@ -127,18 +127,18 @@ /** * @param activityDescription - * The activityDescription to set. + * The activityDescription to set. */ public void setActivityDescription(String activityDescription) { this.activityDescription = activityDescription; } /** Get the portfolios for any sub activities. Will return null for tool portfolios */ - public List getChildPortfolios() { + public List getChildPortfolios() { return childPortfolios; } - public void setChildPortfolios(List childPortfolios) { + public void setChildPortfolios(List childPortfolios) { this.childPortfolios = childPortfolios; } @@ -155,9 +155,10 @@ public void setHeadingNoPage(boolean headingNoPage) { this.headingNoPage = headingNoPage; } - + /** * Identifies this portfolio as of a Floating Activity + * * @return */ public boolean isFloating() { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/export/ExportPortfolioConstants.java =================================================================== diff -u -r623a8b69a67eb91d7e0a31c5f4d15c4fabb9aa6f -r7cce0b08560ba7d6ce7fa6470950f065bbb3cb46 --- lams_learning/src/java/org/lamsfoundation/lams/learning/export/ExportPortfolioConstants.java (.../ExportPortfolioConstants.java) (revision 623a8b69a67eb91d7e0a31c5f4d15c4fabb9aa6f) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/export/ExportPortfolioConstants.java (.../ExportPortfolioConstants.java) (revision 7cce0b08560ba7d6ce7fa6470950f065bbb3cb46) @@ -21,37 +21,28 @@ * **************************************************************** */ -/* $$Id$$ */ +/* $$Id$$ */ package org.lamsfoundation.lams.learning.export; -import org.lamsfoundation.lams.util.Configuration; -import org.lamsfoundation.lams.util.ConfigurationKeys; /** * @author mtruong - * + * */ public class ExportPortfolioConstants { - - private ExportPortfolioConstants() - {} - - public static final String DIR_SUFFIX_EXPORT = "export"; //will appear as the name of the tmp directory created. For eg. lamstmp_1129615396387_export - public static final String DIR_SUFFIX_ZIP = "exportZipFile"; //suffix for the tmp directory. For eg. lamstmp_1129615396387_exportZipFile - public static final String MAIN_EXPORT_FILENAME = "export_main.html"; - public static final String MAIN_NOTEBOOK_FILENAME = "notebook_main.html"; - public static final String EXPORT_LEARNER_PREFIX = "Portfolio"; - public static final String EXPORT_TEACHER_PREFIX = "Class Portfolio"; - public static final String EXPORT_TEMP_FILENAME = "export.zip"; - public static final String HOST = getServerURL(); - public static final String SUBDIRECTORY_BASENAME = "Activity"; //subdirectory for each activity is ActivityXX where XX is the activity Id - public static final String SUBDIRECTORY_NOTEBOOK_BASENAME = "Notebook"; - public static final String PARAM_FILE_LOCATION = "fileLocation"; - public static final String EXPORT_ERROR_FILENAME = "export_error.html"; - public static final String EXPORT_ACTIVITY_ERROR_KEY = "error.export.portfolio.not.supported"; - - private static String getServerURL() - { - return Configuration.get(ConfigurationKeys.SERVER_URL); - } -} + public static final String DIR_SUFFIX_EXPORT = "export"; // will appear as the name of the tmp directory created. + // For eg. lamstmp_1129615396387_export + public static final String DIR_SUFFIX_ZIP = "exportZipFile"; // suffix for the tmp directory. For eg. + // lamstmp_1129615396387_exportZipFile + public static final String MAIN_EXPORT_FILENAME = "export_main.html"; + public static final String MAIN_NOTEBOOK_FILENAME = "notebook_main.html"; + public static final String EXPORT_LEARNER_PREFIX = "Portfolio"; + public static final String EXPORT_TEACHER_PREFIX = "Class Portfolio"; + public static final String EXPORT_TEMP_FILENAME = "export.zip"; + public static final String SUBDIRECTORY_BASENAME = "Activity"; // subdirectory for each activity is ActivityXX where + // XX is the activity Id + public static final String SUBDIRECTORY_NOTEBOOK_BASENAME = "Notebook"; + public static final String PARAM_FILE_LOCATION = "fileLocation"; + public static final String EXPORT_ERROR_FILENAME = "export_error.html"; + public static final String EXPORT_ACTIVITY_ERROR_KEY = "error.export.portfolio.not.supported"; +} \ No newline at end of file Index: lams_learning/src/java/org/lamsfoundation/lams/learning/export/service/ExportPortfolioService.java =================================================================== diff -u -ref4ea7c43ef8851bb1810128fa9a80a9b5893b59 -r7cce0b08560ba7d6ce7fa6470950f065bbb3cb46 --- lams_learning/src/java/org/lamsfoundation/lams/learning/export/service/ExportPortfolioService.java (.../ExportPortfolioService.java) (revision ef4ea7c43ef8851bb1810128fa9a80a9b5893b59) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/export/service/ExportPortfolioService.java (.../ExportPortfolioService.java) (revision 7cce0b08560ba7d6ce7fa6470950f065bbb3cb46) @@ -96,31 +96,31 @@ /** * @param learnerService - * The learnerService to set. + * The learnerService to set. */ public void setLearnerService(ICoreLearnerService learnerService) { this.learnerService = learnerService; } /** * @param learnerService - * The learnerService to set. + * The learnerService to set. */ public void setCoreNotebookService(ICoreNotebookService coreNotebookService) { this.coreNotebookService = coreNotebookService; } /** * @param activityDAO - * The activityDAO to set. + * The activityDAO to set. */ public void setActivityDAO(IActivityDAO activityDAO) { this.activityDAO = activityDAO; } /** * @param lessonDAO - * The lessonDAO to set. + * The lessonDAO to set. */ public void setLessonDAO(ILessonDAO lessonDAO) { this.lessonDAO = lessonDAO; @@ -132,7 +132,7 @@ /** * @param lamsCoreToolService - * The lamsCoreToolService to set. + * The lamsCoreToolService to set. */ public void setLamsCoreToolService(ILamsCoreToolService lamsCoreToolService) { this.lamsCoreToolService = lamsCoreToolService; @@ -147,6 +147,7 @@ } /** @see org.lamsfoundation.lams.learning.export.service.IExportPortfolioService#exportPortfolioForTeacher(org.lamsfoundation.lams.lesson.Lesson) */ + @Override public Portfolio exportPortfolioForTeacher(Long lessonId, Cookie[] cookies) { Lesson lesson = lessonDAO.getLesson(lessonId); @@ -187,6 +188,7 @@ * @see org.lamsfoundation.lams.learning.export.service.IExportPortfolioService#exportPortfolioForStudent(java.lang.Long, * org.lamsfoundation.lams.usermanagement.User,boolean) */ + @Override public Portfolio exportPortfolioForStudent(Integer userId, Long lessonID, boolean anonymity, ToolAccessMode accessMode, Cookie[] cookies) { ArrayList portfolios = null; @@ -255,6 +257,7 @@ } /** @see org.lamsfoundation.lams.learning.export.service.IExportPortfolioService#zipPortfolio(String, String) */ + @Override public String zipPortfolio(String filename, String directoryToZip) { String zipfileName, dirToPutZip; // create tmp dir to put zip file @@ -307,12 +310,12 @@ } - private void processPortfolios(List portfolios, Cookie[] cookies, String tempDirectoryName) { + private void processPortfolios(List portfolios, Cookie[] cookies, String tempDirectoryName) { - Iterator i = portfolios.iterator(); + Iterator i = portfolios.iterator(); // iterate through the list of portfolios, create subdirectory, while (i.hasNext()) { - ActivityPortfolio activityPortfolio = (ActivityPortfolio) i.next(); + ActivityPortfolio activityPortfolio = i.next(); // create a subdirectory with the name ActivityXX where XX is the activityId String subDirectoryName = ExportPortfolioConstants.SUBDIRECTORY_BASENAME @@ -326,32 +329,33 @@ // for security reasons, append the relative directory name to the end of the export url instead of the // whole path - String relativePath = activitySubDirectory.substring(FileUtil.getTempDir().length() + 1, activitySubDirectory - .length()); + String relativePath = activitySubDirectory.substring(FileUtil.getTempDir().length() + 1, + activitySubDirectory.length()); // Some activities (parallel, optional, sequence) don't have export urls. if (!activityPortfolio.isHeadingNoPage()) { - activityPortfolio.setExportUrl(ExportPortfolioConstants.HOST + activityPortfolio.getExportUrl()); + activityPortfolio.setExportUrl(HttpUrlConnectionUtil.getLamsLocalAddress() + + activityPortfolio.getExportUrl()); activityPortfolio.setExportUrl(WebUtil.appendParameterToURL(activityPortfolio.getExportUrl(), AttributeNames.PARAM_DIRECTORY_NAME, relativePath)); // get tool to export its files, mainFileName is the name of the main HTML page that the tool exported. - String mainFileName = connectToToolViaExportURL(activityPortfolio.getActivityName(), activityPortfolio - .getExportUrl(), cookies, activitySubDirectory); + String mainFileName = connectToToolViaExportURL(activityPortfolio.getActivityName(), + activityPortfolio.getExportUrl(), cookies, activitySubDirectory); // toolLink is used in main page, so that it can link with the tools export pages. String toolLink = subDirectoryName + "/" + mainFileName; activityPortfolio.setToolLink(toolLink); } - if (activityPortfolio.getChildPortfolios() != null && activityPortfolio.getChildPortfolios().size() > 0) { + if ((activityPortfolio.getChildPortfolios() != null) && (activityPortfolio.getChildPortfolios().size() > 0)) { processPortfolios(activityPortfolio.getChildPortfolios(), cookies, tempDirectoryName); } } } - private void processNotes(List notes, String tempDirectoryName, Portfolio portfolio) { + private void processNotes(List notes, String tempDirectoryName, Portfolio portfolio) { if (notes.size() > 0) { @@ -379,9 +383,9 @@ * calling the FileUtil directly. * * @param parentDir - * The name of the parent directory + * The name of the parent directory * @param subDir - * The name of the child directory to create. + * The name of the child directory to create. * @return true is the subdirectory was created, false otherwise */ private boolean createSubDirectory(String parentDir, String subDir) { @@ -403,9 +407,9 @@ * files anyway, after the export is done) * * @param parentDir - * The name of the parent directory + * The name of the parent directory * @param subDir - * The name of the child directory to create. + * The name of the child directory to create. * @return true is the subdirectory was created, false otherwise */ private String createDirectory(String name) { @@ -450,12 +454,10 @@ } /** Generate the main page, given this portfolio */ + @Override public void generateMainPage(HttpServletRequest request, Portfolio portfolio, Cookie[] cookies) { + String url = HttpUrlConnectionUtil.getLamsLocalAddress() + "learning/exportPortfolio/main.jsp"; - String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() - + request.getContextPath(); - String url = basePath + "/exportPortfolio/main.jsp"; - String filename = ExportPortfolioConstants.MAIN_EXPORT_FILENAME; try { request.getSession().setAttribute("portfolio", portfolio); @@ -472,12 +474,10 @@ } /** Generate the main page, given this portfolio */ + @Override public void generateNotebookPage(HttpServletRequest request, Portfolio portfolio, Cookie[] cookies) { + String url = HttpUrlConnectionUtil.getLamsLocalAddress() + "learning/exportPortfolio/notebook.jsp"; - String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() - + request.getContextPath(); - String url = basePath + "/exportPortfolio/notebook.jsp"; - String filename = ExportPortfolioConstants.MAIN_NOTEBOOK_FILENAME; try { request.getSession().setAttribute("portfolio", portfolio); @@ -510,6 +510,7 @@ * Gets the themes for the current user. This is used to determine the stylesheets included in the export file. We * need the full theme, not just the name, so we can get the directory names for the images. */ + @Override public Collection getUserThemes() { List themeNames = CSSThemeUtil.getAllUserThemes(); Set userThemes = new HashSet();