You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by vd...@apache.org on 2016/11/30 07:17:10 UTC

svn commit: r1771997 - in /openmeetings/application/branches/3.2.x/openmeetings-web/src/main: java/org/apache/openmeetings/web/pages/install/ webapp/css/

Author: vdegtyarev
Date: Wed Nov 30 07:17:10 2016
New Revision: 1771997

URL: http://svn.apache.org/viewvc?rev=1771997&view=rev
Log:
OPENMEETINGS-1513 is fixed. Installer Converters page is improved to check that installed converter tools or not.

Modified:
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep3.html
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/theme.css

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep3.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard%24ParamsStep3.html?rev=1771997&r1=1771996&r2=1771997&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep3.html (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep3.html Wed Nov 30 07:17:10 2016
@@ -23,66 +23,45 @@
 	<fieldset class="ui-widget-content" id="userConf1">
 		<legend class="ui-widget-header"><wicket:message key="install.wizard.params.step3.converters"/></legend>
 		<ul class="paramList">
-			<li><label wicket:for="swfZoom"><wicket:message key="install.wizard.params.step3.swfZoom"/></label>
+			<li><label wicket:for="swfZoom"><wicket:message key="install.wizard.params.step3.swfZoom"/>
+					<span class="info-title" wicket:message="title:install.wizard.params.step3.swfZoom.text"/>
+				</label>
 				<input wicket:id="swfZoom" wicket:message="title:install.wizard.params.step3.swfZoom.title"
 				type="text" />
-				<p>
-					<i>
-						<wicket:message key="install.wizard.params.step3.swfZoom.text"/>
-						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
-						href="http://openmeetings.apache.org/installation.html"
-						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
-					</i>
-				</p>
 			</li>
-			<li><label wicket:for="swfJpegQuality"><wicket:message key="install.wizard.params.step3.swfJpegQuality"/></label>
+			<li><label wicket:for="swfJpegQuality"><wicket:message key="install.wizard.params.step3.swfJpegQuality"/>
+					<span class="info-title" wicket:message="title:install.wizard.params.step3.swfJpegQuality.text"/>
+				</label>
 				<input wicket:id="swfJpegQuality" 
 				wicket:message="title:install.wizard.params.step3.swfJpegQuality.title"
 				type="text" />
-				<p>
-					<i>
-						<wicket:message key="install.wizard.params.step3.swfJpegQuality.text"/>
-						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
-						href="http://openmeetings.apache.org/installation.html"
-						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
-					</i>
-				</p>
 			</li>
-			<li><label wicket:for="swfPath"><wicket:message key="install.wizard.params.step3.swfPath"/></label>
+			<li>
+				<label wicket:for="swfPath"><wicket:message key="install.wizard.params.step3.swfPath"/>
+					<span class="info-title" wicket:message="title:install.wizard.params.step3.swfPath.text"/>
+				</label>
 				<input wicket:id="swfPath" 
-				wicket:message="title:install.wizard.params.step3.swfPath.title"
 				type="text" />
-				<p>
-					<i>
-						<wicket:message key="install.wizard.params.step3.swfPath.text"/>
-						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
-						href="http://openmeetings.apache.org/installation.html"
-						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
-					</i>
-				</p>
+				<button class="formelement" wicket:id="validateSwf"><wicket:message key="install.wizard.db.step.check"/></button>
 			</li>
 			<li><label wicket:for="imageMagicPath"><wicket:message key="install.wizard.params.step3.imageMagicPath"/></label>
 				<input wicket:id="imageMagicPath" 
 				wicket:message="title:install.wizard.params.step3.imageMagicPath.title"
 				type="text" />
+				<button class="formelement" wicket:id="validateImageMagic"><wicket:message key="install.wizard.db.step.check"/></button>
 				<p>
 					<i>
 						<wicket:message key="install.wizard.params.step3.imageMagicPath.text"/>
-						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
-						href="http://openmeetings.apache.org/installation.html"
-						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
 					</i>
 				</p>
 			</li>
 			<li><label wicket:for="ffmpegPath"><wicket:message key="install.wizard.params.step3.ffmpegPath"/></label>
 				<input wicket:id="ffmpegPath" 
 				wicket:message="title:install.wizard.params.step3.ffmpegPath.title" type="text" />
+				<button class="formelement" wicket:id="validateFfmpeg"><wicket:message key="install.wizard.db.step.check"/></button>
 				<p>
 					<i>
 						<wicket:message key="install.wizard.params.step3.ffmpegPath.text"/>
-						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
-						href="http://openmeetings.apache.org/installation.html"
-						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
 					</i>
 				</p>
 			</li>
@@ -90,22 +69,24 @@
 				<input wicket:id="soxPath" 
 				wicket:message="title:install.wizard.params.step3.soxPath.title"
 				type="text" />
+				<button class="formelement" wicket:id="validateSox"><wicket:message key="install.wizard.db.step.check"/></button>
 				<p>
 					<i>
 						<wicket:message key="install.wizard.params.step3.soxPath.text"/>
-						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
-						href="http://openmeetings.apache.org/installation.html"
-						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
 					</i>
 				</p>
 			</li>
-			<li><label wicket:for="officePath"><wicket:message key="install.wizard.params.step3.officePath"/></label>
+			<li><label wicket:for="officePath"><wicket:message key="install.wizard.params.step3.officePath"/>
+					<span class="info-title" wicket:message="title:install.wizard.params.step3.officePath.text"/>
+				</label>
 				<input wicket:id="officePath"
 				wicket:message="title:install.wizard.params.step3.officePath.title"
 				type="text" />
+				<button class="formelement" wicket:id="validateOffice"><wicket:message key="install.wizard.db.step.check"/></button>
+			</li>
+			<li>
 				<p>
 					<i>
-						<wicket:message key="install.wizard.params.step3.officePath.text"/>
 						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
 						href="http://openmeetings.apache.org/installation.html"
 						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java?rev=1771997&r1=1771996&r2=1771997&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java Wed Nov 30 07:17:10 2016
@@ -40,11 +40,14 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.apache.openmeetings.cli.ConnectionPropertiesPatcher;
+import org.apache.openmeetings.core.converter.GenerateSWF;
 import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.installation.ImportInitvalues;
 import org.apache.openmeetings.installation.InstallationConfig;
 import org.apache.openmeetings.util.ConnectionProperties;
 import org.apache.openmeetings.util.ConnectionProperties.DbType;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ProcessHelper;
 import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.WebSession;
@@ -70,7 +73,11 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.model.StringResourceModel;
+import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.time.Duration;
+import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
+import org.artofsolving.jodconverter.office.OfficeException;
+import org.artofsolving.jodconverter.office.OfficeManager;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.orm.jpa.LocalEntityManagerFactoryBean;
@@ -78,6 +85,7 @@ import org.springframework.web.context.s
 
 import com.googlecode.wicket.jquery.core.JQueryBehavior;
 import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
 import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
 import com.googlecode.wicket.jquery.ui.widget.wizard.AbstractWizard;
@@ -147,6 +155,14 @@ public class InstallWizard extends Abstr
 	protected boolean closeOnFinish() {
 		return false;
 	}
+
+	private static String getPath(String path, String app) {
+		if (!"".equals(path) && !path.endsWith(File.separator)) {
+			path += File.separator;
+		}
+		path += app;
+		return path;
+	}
 	
 	private abstract class BaseStep extends DynamicWizardStep {
 		private static final long serialVersionUID = 1L;
@@ -474,19 +490,108 @@ public class InstallWizard extends Abstr
 	
 	private final class ParamsStep3 extends BaseStep {
 		private static final long serialVersionUID = 1L;
-
+		private final TextField<String> ffmpegPath;
+		private final TextField<String> imageMagicPath;
+		private final TextField<String> soxPath;
+		private final TextField<String> swfPath;
+		private final TextField<String> officePath;
+		private final String regex = "\\r\\n|\\r|\\n";
+		private boolean isAllChecked = false;
 		public ParamsStep3() {
 			super(paramsStep2);
 			
 			add(new TextField<Integer>("swfZoom").setRequired(true).add(range(50, 600)));
 			add(new TextField<Integer>("swfJpegQuality").setRequired(true).add(range(1, 100)));
-			add(new TextField<String>("swfPath"));
-			add(new TextField<String>("imageMagicPath"));
-			add(new TextField<String>("ffmpegPath"));
-			add(new TextField<String>("soxPath"));
-			add(new TextField<String>("officePath"));
+			add(swfPath = new TextField<String>("swfPath"));
+			add(new AjaxButton("validateSwf") {
+				private static final long serialVersionUID = 1L;
+				@Override
+				protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+					checkToolPath(swfPath, new String[] {InstallWizard.getPath(swfPath.getValue(), "pdf2swf" + GenerateSWF.execExt), "--version"});
+					target.add(getFeedbackPanel());
+				}
+			});
+			add(imageMagicPath = new TextField<String>("imageMagicPath"));
+			add(new AjaxButton("validateImageMagic") {
+				private static final long serialVersionUID = 1L;
+				@Override
+				protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+					checkToolPath(imageMagicPath, new String[] {InstallWizard.getPath(imageMagicPath.getValue(), "convert" + GenerateSWF.execExt), "-version"});
+					target.add(getFeedbackPanel());
+				}
+			});
+			add(ffmpegPath = new TextField<String>("ffmpegPath"));
+			add(new AjaxButton("validateFfmpeg") {
+				private static final long serialVersionUID = 1L;
+				@Override
+				protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+					checkToolPath(ffmpegPath, new String[] {InstallWizard.getPath(ffmpegPath.getValue(), "ffmpeg" + GenerateSWF.execExt), "-version"});
+					target.add(getFeedbackPanel());
+				}
+			});
+			add(soxPath = new TextField<String>("soxPath"));
+			add(new AjaxButton("validateSox") {
+				private static final long serialVersionUID = 1L;
+				@Override
+				protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+					checkToolPath(soxPath, new String[] {InstallWizard.getPath(soxPath.getValue(), "sox" + GenerateSWF.execExt), "--version"});
+					target.add(getFeedbackPanel());
+				}
+			});
+			add(officePath = new TextField<String>("officePath"));
+			add(new AjaxButton("validateOffice") {
+				private static final long serialVersionUID = 1L;
+				@Override
+				protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+					checkOfficePath();
+					target.add(getFeedbackPanel());
+				}
+			});			
+		}
+		
+		private boolean checkToolPath(TextField<String> path, String[] args) {
+			ConverterProcessResult result = ProcessHelper.executeScript(path.getInputName() + " path:: '" + path.getValue() + "'", args);
+			if (!result.isOk()) {
+				path.error(result.getError().replaceAll(regex, ""));
+			}
+			return result.isOk();
+		}
+		
+		private boolean checkOfficePath() {
+			String err  = "";
+			try {
+				DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
+				if (!Strings.isEmpty(officePath.getValue())) {
+					configuration.setOfficeHome(officePath.getValue());
+				}
+				OfficeManager officeManager = configuration.buildOfficeManager();
+				try {
+					officeManager.start();
+				} catch (OfficeException ex) {
+					err = ex.getMessage().replaceAll(regex, "");
+				} finally {
+					officeManager.stop();
+				}
+			} catch (Exception ex) {
+				err = ex.getMessage().replaceAll(regex, "");
+			}
+			if (!err.isEmpty()) {
+				officePath.error(err);
+			}
+			return err.isEmpty();
 		}
 
+		private boolean checkAllPath() {
+			boolean result = checkToolPath(swfPath, new String[] {InstallWizard.getPath(swfPath.getValue(), "pdf2swf" + GenerateSWF.execExt), "--version"}); 
+			result = checkToolPath(imageMagicPath, new String[] {InstallWizard.getPath(imageMagicPath.getValue(), "convert" + GenerateSWF.execExt), "-version"}) && result;
+			result = checkToolPath(ffmpegPath, new String[] {InstallWizard.getPath(ffmpegPath.getValue(), "ffmpeg" + GenerateSWF.execExt), "-version"}) && result;
+			result = checkToolPath(soxPath, new String[] {InstallWizard.getPath(soxPath.getValue(), "sox" + GenerateSWF.execExt), "--version"}) && result;
+			result = checkOfficePath() && result;
+			isAllChecked = true;
+			return result;
+		}
+		
+		
 		@Override
 		public boolean isLastStep() {
 			return false;
@@ -494,12 +599,17 @@ public class InstallWizard extends Abstr
 
 		@Override
 		public IDynamicWizardStep next() {
+			if (!isAllChecked) {
+				if (!checkAllPath()) {
+					return this;
+				}
+			}
 			return paramsStep4;
 		}
 		
 		@Override
 		public boolean isLastAvailable() {
-			return true;
+			return isAllChecked;
 		}
 		
 		@Override

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/theme.css
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/theme.css?rev=1771997&r1=1771996&r2=1771997&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/theme.css (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/theme.css Wed Nov 30 07:17:10 2016
@@ -527,6 +527,14 @@ select.messages.selector {
 	font-style: italic;
 	white-space: normal;
 }
+.info-title {
+	background-image: url(images/information.png);
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 16px;
+	display: inline-block;
+	margin-left: 10px;
+}
 .invisible-form-component {
 	position: absolute;
 	top: -9999px;