You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by tv...@apache.org on 2014/02/20 01:07:19 UTC

svn commit: r1570004 - in /tomee/tomee/trunk: ./ tomee/tomee-common/src/main/java/org/apache/tomee/installer/ tomee/tomee-webapp/ tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/installer/ tomee/tomee-webapp/src/main/webapp/ tomee/tomee-webapp...

Author: tveronezi
Date: Thu Feb 20 00:07:18 2014
New Revision: 1570004

URL: http://svn.apache.org/r1570004
Log:
https://issues.apache.org/jira/browse/TOMEE-1128
Align Installer and WebAccess GUI style

Added:
    tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/InstallerInterface.java
    tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/PathsInterface.java
    tomee/tomee/trunk/tomee/tomee-webapp/src/test/
    tomee/tomee/trunk/tomee/tomee-webapp/src/test/java/
    tomee/tomee/trunk/tomee/tomee-webapp/src/test/java/org/
    tomee/tomee/trunk/tomee/tomee-webapp/src/test/java/org/apache/
    tomee/tomee/trunk/tomee/tomee-webapp/src/test/java/org/apache/tomee/
    tomee/tomee/trunk/tomee/tomee-webapp/src/test/java/org/apache/tomee/webapp/
    tomee/tomee/trunk/tomee/tomee-webapp/src/test/java/org/apache/tomee/webapp/installer/
    tomee/tomee/trunk/tomee/tomee-webapp/src/test/java/org/apache/tomee/webapp/installer/test/
    tomee/tomee/trunk/tomee/tomee-webapp/src/test/java/org/apache/tomee/webapp/installer/test/RunnerTest.java
Removed:
    tomee/tomee/trunk/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/installer/Status.java
Modified:
    tomee/tomee/trunk/pom.xml
    tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java
    tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Paths.java
    tomee/tomee/trunk/tomee/tomee-webapp/pom.xml
    tomee/tomee/trunk/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/installer/InstallerServlet.java
    tomee/tomee/trunk/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/installer/Runner.java
    tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml
    tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/app.css
    tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/app.js
    tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/index.html

Modified: tomee/tomee/trunk/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/pom.xml?rev=1570004&r1=1570003&r2=1570004&view=diff
==============================================================================
--- tomee/tomee/trunk/pom.xml (original)
+++ tomee/tomee/trunk/pom.xml Thu Feb 20 00:07:18 2014
@@ -180,6 +180,7 @@
     <!-- arquillian related -->
     <version.arquillian.bom>1.1.2.Final</version.arquillian.bom>
     <version.shrinkwrap.resolver.bom>2.0.1</version.shrinkwrap.resolver.bom>
+    <version.shrinkwrap.resolvers>2.0.2</version.shrinkwrap.resolvers>
   </properties>
 
   <build>

Modified: tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java?rev=1570004&r1=1570003&r2=1570004&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java (original)
+++ tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Installer.java Thu Feb 20 00:07:18 2014
@@ -32,7 +32,7 @@ import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 import java.util.zip.ZipOutputStream;
 
-public class Installer {
+public class Installer implements InstallerInterface {
     private final Alerts alerts = new Alerts();
 
     private final Paths paths;
@@ -73,18 +73,27 @@ public class Installer {
         this.force = force;
     }
 
+    @Override
+    public PathsInterface getPaths() {
+        return paths;
+    }
+
+    @Override
     public Alerts getAlerts() {
         return alerts;
     }
 
+    @Override
     public void reset() {
         alerts.reset();
     }
 
+    @Override
     public Status getStatus() {
         return status;
     }
 
+    @Override
     public void installAll() {
         installListener();
         installJavaagent();
@@ -187,6 +196,9 @@ public class Installer {
 
     private void addTomEELinkToTomcatHome() {
         final File home = paths.getHome();
+        if(!home.exists()) {
+            return;
+        }
         final String indeJsp = Installers.readAll(home, alerts);
         if (indeJsp == null) {
             return;

Added: tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/InstallerInterface.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/InstallerInterface.java?rev=1570004&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/InstallerInterface.java (added)
+++ tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/InstallerInterface.java Thu Feb 20 00:07:18 2014
@@ -0,0 +1,33 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.tomee.installer;
+
+public interface InstallerInterface {
+
+    void installAll();
+
+    Status getStatus();
+
+    Alerts getAlerts();
+
+    PathsInterface getPaths();
+
+    void reset();
+
+}

Modified: tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Paths.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Paths.java?rev=1570004&r1=1570003&r2=1570004&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Paths.java (original)
+++ tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/Paths.java Thu Feb 20 00:07:18 2014
@@ -15,6 +15,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
+
 package org.apache.tomee.installer;
 
 import org.apache.openejb.jpa.integration.MakeTxLookup;
@@ -30,7 +31,7 @@ import java.util.List;
  * 
  *
  */
-public class Paths {
+public class Paths implements PathsInterface {
 
 	/**
 	 * The openejb webapp directory under <<tomcat-install>>/webapps
@@ -65,6 +66,7 @@ public class Paths {
      * Returns the directory represented by the catalina.home system property
      * @return The directory represented by the catalina.home system property
      */
+    @Override
     public File getCatalinaHomeDir() {
         if (catalinaHomeDir == null) {
             String catalinaHome = System.getProperty("catalina.home");
@@ -78,6 +80,7 @@ public class Paths {
      * Sets the catalina home directory
      * @param catalinaHomeDir the absolute path of the catalina home directory
      */
+    @Override
     public void setCatalinaHomeDir(String catalinaHomeDir) {
         this.catalinaHomeDir = createFile(catalinaHomeDir);
     }
@@ -85,6 +88,7 @@ public class Paths {
      * Sets the catalina home directory
      * @param catalinaHomeDir the file representing the absolute path of the catalina home directory
      */
+    @Override
     public void setCatalinaHomeDir(File catalinaHomeDir) {
         this.catalinaHomeDir = catalinaHomeDir;
     }
@@ -92,6 +96,7 @@ public class Paths {
      * Returns the directory represented by the catalina.base system property
      * @return The directory represented by the catalina.base system property
      */
+    @Override
     public File getCatalinaBaseDir() {
         if (catalinaBaseDir == null) {
             String catalinaBase = System.getProperty("catalina.base");
@@ -105,6 +110,7 @@ public class Paths {
      * Sets the catalina base directory
      * @param catalinaBaseDir the absolute path of the catalina base directory
      */
+    @Override
     public void setCatalinaBaseDir(String catalinaBaseDir) {
         setCatalinaBaseDir(createFile(catalinaBaseDir));
     }
@@ -112,6 +118,7 @@ public class Paths {
      * Sets the catalina base directory
      * @param catalinaBaseDir the file representing the absolute path of the catalina base directory
      */
+    @Override
     public void setCatalinaBaseDir(File catalinaBaseDir) {
         this.catalinaBaseDir = catalinaBaseDir;
     }
@@ -119,6 +126,7 @@ public class Paths {
      * Returns the file representing <<tomcat-install>>/conf/server.xml
      * @return the file representing <<tomcat-install>>/conf/server.xml
      */
+    @Override
     public File getServerXmlFile() {
         if (serverXmlFile == null) {
             File confdir = getCatalinaConfDir();
@@ -130,6 +138,7 @@ public class Paths {
         return serverXmlFile;
     }
 
+    @Override
     public File getHome() {
         return new File(getCatalinaBaseDir(), "webapps/ROOT/index.jsp");
     }
@@ -138,6 +147,7 @@ public class Paths {
      * Sets the server.xml file
      * @param serverXmlFile the absolute path of the server.xml file
      */
+    @Override
     public void setServerXmlFile(String serverXmlFile) {
         this.serverXmlFile = createFile(serverXmlFile);
     }
@@ -145,6 +155,7 @@ public class Paths {
      * Sets the server.xml file
      * @param serverXmlFile the file representing the absolute path of the server.xml file
      */    
+    @Override
     public void setServerXmlFile(File serverXmlFile) {
         this.serverXmlFile = serverXmlFile;
     }
@@ -152,6 +163,7 @@ public class Paths {
      * Returns the directory representing {@link #catalinaHomeDir}/lib for Tomcat 6. For Tomcat 5.x it returns {@link #catalinaHomeDir}/server/lib
      * @return the directory representing {@link #catalinaHomeDir}/lib
      */
+    @Override
     public File getCatalinaLibDir() {
         File catalinaHomeDir = getCatalinaHomeDir();
 
@@ -167,6 +179,7 @@ public class Paths {
      * Returns the directory representing {@link #catalinaBaseDir}/conf
      * @return the directory representing {@link #catalinaBaseDir}/conf
      */
+    @Override
     public File getCatalinaConfDir() {
         File catalinaBaseDir = getCatalinaBaseDir();
 
@@ -178,6 +191,7 @@ public class Paths {
      * Returns the directory representing {@link #catalinaHomeDir}/bin
      * @return the directory representing {@link #catalinaHomeDir}/bin
      */
+    @Override
     public File getCatalinaBinDir() {
         File catalinaHomeDir = getCatalinaHomeDir();
 
@@ -189,6 +203,7 @@ public class Paths {
      * Returns the {@link #getCatalinaBinDir()}/catalina.sh file
      * @return the {@link #getCatalinaBinDir()}/catalina.sh file
      */
+    @Override
     public File getCatalinaShFile() {
         File binDir = getCatalinaBinDir();
 
@@ -200,6 +215,7 @@ public class Paths {
      * Returns the {@link #getCatalinaBinDir()}/catalina.bat file
      * @return the {@link #getCatalinaBinDir()}/catalina.bat file
      */
+    @Override
     public File getCatalinaBatFile() {
         File binDir = getCatalinaBinDir();
 
@@ -212,6 +228,7 @@ public class Paths {
      * Returns null if {@link #openejbWarDir} is null
      * @return the {@link #openejbWarDir}/lib directory
      */
+    @Override
     public File getOpenEJBLibDir() {
         if (openejbWarDir == null) return null;
 
@@ -221,14 +238,17 @@ public class Paths {
      * Returns the tomee-loader.jar file
      * @return the tomee-loader.jar file
      */
+    @Override
     public File getOpenEJBTomcatLoaderJar() {
         return findOpenEJBJar("tomee-loader");
     }
 
+    @Override
     public File getJavaEEAPIJar() {
         return findOpenEJBJar("javaee-api");
     }
 
+    @Override
     public File getJAXBImpl() {
         return findOpenEJBJar("jaxb-impl");
     }
@@ -237,6 +257,7 @@ public class Paths {
      * Returns the openejb-javaagent.jar file
      * @return the openejb-javaagent.jar file
      */
+    @Override
     public File getOpenEJBJavaagentJar() {
         return findOpenEJBJar("openejb-javaagent");
     }
@@ -244,22 +265,27 @@ public class Paths {
      * Returns the openejb-core.jar file
      * @return the openejb-core.jar file
      */
+    @Override
     public File getOpenEJBCoreJar() {
         return findOpenEJBJar("openejb-core");
     }
 
+    @Override
     public File geOpenEJBTomcatCommonJar() {
         return findOpenEJBJar("tomee-common");
     }
 
+    @Override
     public File findOpenEJBJar(String namePrefix) {
         return findJar(getOpenEJBLibDir(), namePrefix);
     }
 
+    @Override
     public File findOpenEJBWebJar(String namePrefix) {
         return findJar(getOpenEJBWebLibDir(), namePrefix);
     }
 
+    @Override
     public File findTomEELibJar(final String prefix) {
         File jar = findJar(getCatalinaLibDir(), prefix);
         if (jar == null) { // maybe tomcat/openejb integration
@@ -314,6 +340,7 @@ public class Paths {
      * 
      * @return true if verification succeeds
      */
+    @Override
     public boolean verify() {
         if (openejbWarDir == null) {
             addError("OpenEJB war is not unpacked");
@@ -364,6 +391,7 @@ public class Paths {
     /**
      * Clears out all verification errors from the underlying list
      */
+    @Override
     public void reset() {
         errors.clear();
     }
@@ -371,6 +399,7 @@ public class Paths {
      * Checks to see if there are any verification errors
      * @return true if there are verification errors
      */
+    @Override
     public boolean hasErrors() {
         return !errors.isEmpty();
     }
@@ -378,6 +407,7 @@ public class Paths {
      * Returns a list of verification errors
      * @return a list of verification errors
      */
+    @Override
     public List<String> getErrors() {
         return errors;
     }
@@ -458,6 +488,7 @@ public class Paths {
         return null;
     }
 
+    @Override
     public File getOpenEJBWebLibDir() {
         if (openEJBWebLibDir == null) {
             openEJBWebLibDir = new File(openejbWarDir, "WEB-INF/lib");
@@ -465,6 +496,7 @@ public class Paths {
         return openEJBWebLibDir;
     }
 
+    @Override
     public File getTomcatUsersXml() {
         if (tomcatUsersXml == null) {
             final File confdir = getCatalinaConfDir();
@@ -476,6 +508,7 @@ public class Paths {
         return tomcatUsersXml;
     }
 
+    @Override
     public File getSetClasspathSh() {
         final File binDir = getCatalinaBinDir();
         if (binDir == null) {
@@ -484,6 +517,7 @@ public class Paths {
         return new File(binDir, "setclasspath.sh");
     }
 
+    @Override
     public File getSetClasspathBat() {
         final File binDir = getCatalinaBinDir();
         if (binDir == null) {

Added: tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/PathsInterface.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/PathsInterface.java?rev=1570004&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/PathsInterface.java (added)
+++ tomee/tomee/trunk/tomee/tomee-common/src/main/java/org/apache/tomee/installer/PathsInterface.java Thu Feb 20 00:07:18 2014
@@ -0,0 +1,90 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.tomee.installer;
+
+import java.io.File;
+import java.util.List;
+
+public interface PathsInterface {
+    File getCatalinaHomeDir();
+
+    void setCatalinaHomeDir(String catalinaHomeDir);
+
+    void setCatalinaHomeDir(File catalinaHomeDir);
+
+    File getCatalinaBaseDir();
+
+    void setCatalinaBaseDir(String catalinaBaseDir);
+
+    void setCatalinaBaseDir(File catalinaBaseDir);
+
+    File getServerXmlFile();
+
+    File getHome();
+
+    void setServerXmlFile(String serverXmlFile);
+
+    void setServerXmlFile(File serverXmlFile);
+
+    File getCatalinaLibDir();
+
+    File getCatalinaConfDir();
+
+    File getCatalinaBinDir();
+
+    File getCatalinaShFile();
+
+    File getCatalinaBatFile();
+
+    File getOpenEJBLibDir();
+
+    File getOpenEJBTomcatLoaderJar();
+
+    File getJavaEEAPIJar();
+
+    File getJAXBImpl();
+
+    File getOpenEJBJavaagentJar();
+
+    File getOpenEJBCoreJar();
+
+    File geOpenEJBTomcatCommonJar();
+
+    File findOpenEJBJar(String namePrefix);
+
+    File findOpenEJBWebJar(String namePrefix);
+
+    File findTomEELibJar(String prefix);
+
+    boolean verify();
+
+    void reset();
+
+    boolean hasErrors();
+
+    List<String> getErrors();
+
+    File getOpenEJBWebLibDir();
+
+    File getTomcatUsersXml();
+
+    File getSetClasspathSh();
+
+    File getSetClasspathBat();
+}

Modified: tomee/tomee/trunk/tomee/tomee-webapp/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webapp/pom.xml?rev=1570004&r1=1570003&r2=1570004&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webapp/pom.xml (original)
+++ tomee/tomee/trunk/tomee/tomee-webapp/pom.xml Thu Feb 20 00:07:18 2014
@@ -27,12 +27,13 @@
     <groupId>org.apache.openejb</groupId>
     <version>1.6.1-SNAPSHOT</version>
   </parent>
-
   <modelVersion>4.0.0</modelVersion>
   <artifactId>tomee-webapp</artifactId>
   <packaging>jar</packaging>
   <name>OpenEJB :: TomEE :: Webapp</name>
-
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
   <build>
     <plugins>
       <plugin> <!-- the jar is only for resources and other classes are for the gui -->
@@ -82,6 +83,12 @@
   </build>
   <dependencies>
     <dependency>
+      <groupId>org.easymock</groupId>
+      <artifactId>easymock</artifactId>
+      <version>3.2</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
       <groupId>org.webjars</groupId>
       <artifactId>bootstrap</artifactId>
       <version>3.1.0</version>

Modified: tomee/tomee/trunk/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/installer/InstallerServlet.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/installer/InstallerServlet.java?rev=1570004&r1=1570003&r2=1570004&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/installer/InstallerServlet.java (original)
+++ tomee/tomee/trunk/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/installer/InstallerServlet.java Thu Feb 20 00:07:18 2014
@@ -17,6 +17,9 @@
 
 package org.apache.tomee.webapp.installer;
 
+import org.apache.tomee.installer.Installer;
+import org.apache.tomee.installer.Paths;
+
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -30,6 +33,9 @@ import java.util.Map;
 public class InstallerServlet extends HttpServlet {
 
     private String escape(String str) {
+        if (str == null) {
+            return "";
+        }
         return str.replaceAll("\"", "\\\\\"").replaceAll("\\\\", "\\\\\\\\");
     }
 
@@ -50,16 +56,16 @@ public class InstallerServlet extends Ht
     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         final ServletContext ctx = req.getServletContext();
         final String rootPath = ctx.getRealPath("/");
-        final Status statusManager = new Status(new File(rootPath));
+        final Runner installer = new Runner(new Installer(new Paths(new File(rootPath))));
         resp.setContentType("application/json");
-        resp.getOutputStream().print(getJsonList(statusManager.get()));
+        resp.getOutputStream().print(getJsonList(installer.execute(false)));
     }
 
     @Override
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         final ServletContext ctx = req.getServletContext();
         final String rootPath = ctx.getRealPath("/");
-        final Runner installer = new Runner(new File(rootPath));
+        final Runner installer = new Runner(new Installer(new Paths(new File(rootPath))));
         if (req.getParameter("catalinaBaseDir") != null && "".equals(req.getParameter("catalinaBaseDir").trim())) {
             installer.setCatalinaBaseDir(req.getParameter("catalinaBaseDir").trim());
         }
@@ -70,6 +76,6 @@ public class InstallerServlet extends Ht
             installer.setServerXmlFile(req.getParameter("serverXmlFile").trim());
         }
         resp.setContentType("application/json");
-        resp.getOutputStream().print(getJsonList(installer.execute()));
+        resp.getOutputStream().print(getJsonList(installer.execute(true)));
     }
 }

Modified: tomee/tomee/trunk/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/installer/Runner.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/installer/Runner.java?rev=1570004&r1=1570003&r2=1570004&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/installer/Runner.java (original)
+++ tomee/tomee/trunk/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/installer/Runner.java Thu Feb 20 00:07:18 2014
@@ -18,8 +18,8 @@
 
 package org.apache.tomee.webapp.installer;
 
-import org.apache.tomee.installer.Installer;
-import org.apache.tomee.installer.Paths;
+import org.apache.tomee.installer.InstallerInterface;
+import org.apache.tomee.installer.PathsInterface;
 
 import javax.naming.Context;
 import javax.naming.InitialContext;
@@ -31,13 +31,16 @@ import java.util.Map;
 import java.util.Properties;
 
 public class Runner {
-    private final File openejbWarDir;
+    private final InstallerInterface installer;
     private String catalinaHome = System.getProperty("catalina.home");
     private String catalinaBase = System.getProperty("catalina.base");
     private String serverXmlFile = System.getProperty("catalina.base") + "/conf/server.xml";
 
-    public Runner(File openejbWarDir) {
-        this.openejbWarDir = openejbWarDir;
+    private static List<Map<String, String>> installerResults = null;
+    private static org.apache.tomee.installer.Status installerStatus = null;
+
+    public Runner(InstallerInterface installer) {
+        this.installer = installer;
     }
 
     public void setCatalinaHome(String catalinaHome) {
@@ -52,33 +55,38 @@ public class Runner {
         this.serverXmlFile = serverXmlFile;
     }
 
-    private void setAlerts(String key, List<String> messages, List<Map<String, String>> result) {
+    private void setAlerts(String key, List<String> messages) {
         if (messages == null) {
             return;
         }
         for (String message : messages) {
-            result.add(Common.build(key, message));
+            installerResults.add(Common.build(key, message));
         }
     }
 
-    public List<Map<String, String>> execute() {
-        final Paths paths = new Paths(openejbWarDir);
-        final Installer installer = new Installer(paths);
-        final List<Map<String, String>> result = new ArrayList<Map<String, String>>();
-        if (org.apache.tomee.installer.Status.NONE.equals(installer.getStatus())) {
-            paths.reset();
-            installer.reset();
-            paths.setCatalinaHomeDir(this.catalinaHome);
-            paths.setCatalinaBaseDir(this.catalinaBase);
-            paths.setServerXmlFile(this.serverXmlFile);
-            if (paths.verify()) {
-                installer.installAll();
-            }
+    public synchronized List<Map<String, String>> execute(boolean install) {
+        if (org.apache.tomee.installer.Status.INSTALLED.equals(installerStatus) ||
+                org.apache.tomee.installer.Status.REBOOT_REQUIRED.equals(installerStatus)) {
+            return installerResults;
+        }
+        final PathsInterface paths = installer.getPaths();
+        paths.reset();
+        installer.reset();
+        paths.setCatalinaHomeDir(this.catalinaHome);
+        paths.setCatalinaBaseDir(this.catalinaBase);
+        paths.setServerXmlFile(this.serverXmlFile);
+        if (paths.verify() && install) {
+            installer.installAll();
         }
-        result.add(Common.build("status", String.valueOf(installer.getStatus())));
-        setAlerts("errors", installer.getAlerts().getErrors(), result);
-        setAlerts("warnings", installer.getAlerts().getWarnings(), result);
-        setAlerts("infos", installer.getAlerts().getInfos(), result);
+        installerResults = new ArrayList<Map<String, String>>();
+        installerResults.add(Common.build("catalinaHomeDir", String.valueOf(catalinaHome)));
+        installerResults.add(Common.build("catalinaBaseDir", String.valueOf(catalinaBase)));
+        installerResults.add(Common.build("serverXmlFile", String.valueOf(serverXmlFile)));
+        installerStatus = installer.getStatus();
+        installerResults.add(Common.build("status", String.valueOf(installerStatus)));
+        setAlerts("errors", installer.getAlerts().getErrors());
+        setAlerts("warnings", installer.getAlerts().getWarnings());
+        setAlerts("infos", installer.getAlerts().getInfos());
         {
             boolean hasHome = false;
             boolean doesHomeExist = false;
@@ -95,10 +103,10 @@ public class Runner {
                     hasLibDirectory = libDir.exists();
                 }
             }
-            result.add(Common.build("hasHome", String.valueOf(hasHome)));
-            result.add(Common.build("doesHomeExist", String.valueOf(doesHomeExist)));
-            result.add(Common.build("isHomeDirectory", String.valueOf(isHomeDirectory)));
-            result.add(Common.build("hasLibDirectory", String.valueOf(hasLibDirectory)));
+            installerResults.add(Common.build("hasHome", String.valueOf(hasHome)));
+            installerResults.add(Common.build("doesHomeExist", String.valueOf(doesHomeExist)));
+            installerResults.add(Common.build("isHomeDirectory", String.valueOf(isHomeDirectory)));
+            installerResults.add(Common.build("hasLibDirectory", String.valueOf(hasLibDirectory)));
         }
         {
             boolean wereTheOpenEJBClassesInstalled = false;
@@ -137,11 +145,11 @@ public class Runner {
             } catch (Exception e) {
                 // noop
             }
-            result.add(Common.build("wereTheOpenEJBClassesInstalled", String.valueOf(wereTheOpenEJBClassesInstalled)));
-            result.add(Common.build("wereTheEjbClassesInstalled", String.valueOf(wereTheEjbClassesInstalled)));
-            result.add(Common.build("wasOpenEJBStarted", String.valueOf(wasOpenEJBStarted)));
-            result.add(Common.build("canILookupAnything", String.valueOf(canILookupAnything)));
+            installerResults.add(Common.build("wereTheOpenEJBClassesInstalled", String.valueOf(wereTheOpenEJBClassesInstalled)));
+            installerResults.add(Common.build("wereTheEjbClassesInstalled", String.valueOf(wereTheEjbClassesInstalled)));
+            installerResults.add(Common.build("wasOpenEJBStarted", String.valueOf(wasOpenEJBStarted)));
+            installerResults.add(Common.build("canILookupAnything", String.valueOf(canILookupAnything)));
         }
-        return result;
+        return installerResults;
     }
 }

Modified: tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml?rev=1570004&r1=1570003&r2=1570004&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml (original)
+++ tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml Thu Feb 20 00:07:18 2014
@@ -60,7 +60,7 @@
   <security-constraint>
     <web-resource-collection>
       <web-resource-name>Static Content</web-resource-name>
-      <url-pattern>/app/lib/*</url-pattern>
+      <url-pattern>/webjars/*</url-pattern>
     </web-resource-collection>
   </security-constraint>
   <security-constraint>

Modified: tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/app.css
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/app.css?rev=1570004&r1=1570003&r2=1570004&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/app.css (original)
+++ tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/app.css Thu Feb 20 00:07:18 2014
@@ -15,28 +15,99 @@
  * limitations under the License.
  */
 
-div.ux-status-panel {
+div.ux-hidden {
+    display: none;
+}
+
+.ux-contentarea {
     margin: 0;
     position: absolute;
-    top: 5px;
-    bottom: 270px;
-    right: 5px;
-    left: 5px;
+    bottom: 0;
+    right: 0;
+    left: 0;
+    top: 50px;
+    overflow: hidden;
 }
-div.ux-status-panel > div.panel-body{
+
+.ux-full-screen {
     margin: 0;
     position: absolute;
-    top: 45px;
-    right: 5px;
-    left: 5px;
-    bottom: 5px;
-    overflow: auto;
+    bottom: 0;
+    right: 0;
+    left: 0;
+    top: 0;
+    overflow: hidden;
 }
-div.ux-installer-panel {
+
+div.ux-installer > div {
     margin: 0;
     position: absolute;
-    bottom: 5px;
     right: 5px;
     left: 5px;
-    height: 260px;
-}
\ No newline at end of file
+}
+
+div.ux-installer > div.ux-status-panel {
+    top: 5px;
+    bottom: 255px;
+    overflow: auto;
+}
+
+div.ux-installer > div.ux-installer-params-panel {
+    height: 245px;
+    bottom: 5px;
+}
+
+div.ux-installer > div.ux-webaccess-installer {
+    top: 5px;
+    bottom: 5px;
+}
+
+p.lead {
+    text-align: center;
+    margin: 0;
+}
+
+.site-wrapper {
+    display: table;
+    width: 100%;
+    height: 100%; /* For at least Firefox */
+    min-height: 100%;
+}
+
+.site-wrapper-inner {
+    display: table-cell;
+    vertical-align: top;
+}
+
+.cover-container {
+    margin-right: auto;
+    margin-left: auto;
+}
+
+.inner {
+    padding: 30px;
+}
+
+.cover {
+    padding: 0 20px;
+}
+
+.cover {
+    padding: 10px 20px;
+    font-weight: bold;
+}
+
+@media (min-width: 768px) {
+    .site-wrapper-inner {
+        vertical-align: middle;
+    }
+    .cover-container {
+        width: 100%;
+    }
+}
+
+@media (min-width: 992px) {
+    .cover-container {
+        width: 700px;
+    }
+}

Modified: tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/app.js
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/app.js?rev=1570004&r1=1570003&r2=1570004&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/app.js (original)
+++ tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/app.js Thu Feb 20 00:07:18 2014
@@ -35,8 +35,7 @@ $(function () {
             method: 'POST',
             dataType: 'json',
             success: function (data) {
-                populateGrid(data);
-                notification.modal({});
+                window.location.reload();
             }
         });
     });
@@ -51,7 +50,7 @@ $(function () {
         }
     }
 
-    function populateGrid(data) {
+    function setData(data) {
         var table = $($('.ux-status-table').get(0));
         table.empty();
         var systemStatus = {};
@@ -59,21 +58,26 @@ $(function () {
             systemStatus[item.key] = item.value;
             table.append('<tr><td>' + item.key + '</td><td>' + item.value + '</td></tr>')
         });
-        if (data && data.length > 0) {
-            if (systemStatus.status === 'NONE') {
-                installBtn.removeClass('disabled');
-            }
-            catalinaHome.val(systemStatus.catalinaHomeDir);
-            catalinaBase.val(systemStatus.catalinaBaseDir);
-            serverXmlFile.val(systemStatus.serverXmlFile);
+        if (systemStatus.status === 'INSTALLED') {
+            $('.ux-server-ready-panel').removeClass('ux-hidden');
+            var providerLink = $($('.ux-provider-url').get(0));
+            providerLink.attr('href', window.location.href + 'ejb');
+            providerLink.html(window.location.href + 'ejb');
+        } else if (systemStatus.status === 'REBOOT_REQUIRED') {
+            $('.ux-installer-reboot-panel').removeClass('ux-hidden');
+        } else {
+            $('.ux-installer-panel').removeClass('ux-hidden');
         }
+        catalinaHome.val(systemStatus.catalinaHomeDir);
+        catalinaBase.val(systemStatus.catalinaBaseDir);
+        serverXmlFile.val(systemStatus.serverXmlFile);
     }
 
     $.ajaxSetup({ cache: false });
     $.ajax({
-        url: 'installer',
+        url: 'installer?ts=' + (new Date()).getTime(),
         method: 'GET',
         dataType: 'json',
-        success: populateGrid
+        success: setData
     });
 });
\ No newline at end of file

Modified: tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/index.html
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/index.html?rev=1570004&r1=1570003&r2=1570004&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/index.html (original)
+++ tomee/tomee/trunk/tomee/tomee-webapp/src/main/webapp/index.html Thu Feb 20 00:07:18 2014
@@ -25,65 +25,96 @@ limitations under the License.
     <script src="webjars/bootstrap/3.1.0/js/bootstrap.min.js"></script>
     <script src="app.js"></script>
 </head>
+
 <body>
-<div class="panel panel-default ux-status-panel">
-    <div class="panel-heading">
-        <h3 class="panel-title">System Status</h3>
-    </div>
-    <div class="panel-body">
-        <table class="table ux-status-table"></table>
+<nav class="navbar navbar-inverse navbar-fixed-top">
+    <div class="navbar-header">
+        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex8-collapse">
+            <span class="sr-only">Toggle navigation</span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+            <span class="icon-bar"></span>
+        </button>
+        <a class="navbar-brand" href="http://tomee.apache.org/documentation.html">Apache TomEE</a>
     </div>
-</div>
-<div class="panel panel-default ux-installer-panel">
-    <div class="panel-heading">
-        <h3 class="panel-title">Installer</h3>
+    <div class="collapse navbar-collapse navbar-ex8-collapse">
+        <ul class="nav navbar-nav">
+            <li class="ux-app-menu-item active"><a href="#">Installer</a></li>
+        </ul>
     </div>
-    <div class="panel-body">
-        <form class="bs-example form-horizontal">
-            <div class="form-group">
-                <label for="catalinaHome" class="col-lg-2 control-label">catalinaHome</label>
+</nav>
+<div class="ux-contentarea">
+    <div class="ux-installer ux-installer-panel ux-full-screen ux-hidden">
+        <div class="panel panel-default ux-status-panel">
+            <div class="panel-heading">
+                <h3 class="panel-title">System Status</h3>
+            </div>
+            <div class="panel-body">
+                <table class="table ux-status-table"></table>
+            </div>
+        </div>
+        <div class="panel panel-default ux-installer-params-panel">
+            <div class="panel-heading">
+                <h3 class="panel-title">Installer</h3>
+            </div>
+            <div class="panel-body">
+                <form class="bs-example form-horizontal">
+                    <div class="form-group">
+                        <label for="catalinaHome" class="col-lg-2 control-label">catalinaHome</label>
 
-                <div class="col-lg-10">
-                    <input type="text" class="form-control ux-catalinaHome-txt" id="catalinaHome"/>
-                </div>
-            </div>
-            <div class="form-group">
-                <label for="catalinaBase" class="col-lg-2 control-label">catalinaBase</label>
+                        <div class="col-lg-10">
+                            <input type="text" class="form-control ux-catalinaHome-txt" id="catalinaHome"/>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="catalinaBase" class="col-lg-2 control-label">catalinaBase</label>
 
-                <div class="col-lg-10">
-                    <input type="text" class="form-control ux-catalinaBase-txt" id="catalinaBase"/>
-                </div>
+                        <div class="col-lg-10">
+                            <input type="text" class="form-control ux-catalinaBase-txt" id="catalinaBase"/>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="serverXmlFile" class="col-lg-2 control-label">serverXmlFile</label>
+
+                        <div class="col-lg-10">
+                            <input type="text" class="form-control ux-serverXmlFile-txt" id="serverXmlFile"/>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <div class="col-lg-offset-2 col-lg-10">
+                            <a href="installer" class="btn btn-primary ux-install-btn">Confirm</a>
+                        </div>
+                    </div>
+                </form>
             </div>
-            <div class="form-group">
-                <label for="serverXmlFile" class="col-lg-2 control-label">serverXmlFile</label>
+        </div>
+    </div>
 
-                <div class="col-lg-10">
-                    <input type="text" class="form-control ux-serverXmlFile-txt" id="serverXmlFile"/>
+    <div class="ux-installer ux-server-ready-panel ux-full-screen ux-hidden">
+        <div class="site-wrapper">
+            <div class="site-wrapper-inner">
+                <div class="cover-container">
+                    <div class="inner cover">
+                        <p class="lead">Your server is fully installed.</p>
+                        <p class="lead">Provider URL: <a class="ux-provider-url" href="#"></a></p>
+                    </div>
                 </div>
             </div>
-            <div class="form-group">
-                <div class="col-lg-offset-2 col-lg-10">
-                    <a href="installer" class="btn btn-primary disabled ux-install-btn">Confirm</a>
+        </div>
+    </div>
+
+    <div class="ux-installer ux-installer-reboot-panel ux-full-screen ux-hidden">
+        <div class="site-wrapper">
+            <div class="site-wrapper-inner">
+                <div class="cover-container">
+                    <div class="inner cover">
+                        <p class="lead">Please restart your server to complete the installation process.
+                        </p>
+                    </div>
                 </div>
             </div>
-        </form>
+        </div>
     </div>
 </div>
-<div class="modal fade ux-install-notification">
-    <div class="modal-dialog">
-        <div class="modal-content">
-            <div class="modal-header">
-                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-                <h4 class="modal-title">System installed</h4>
-            </div>
-            <div class="modal-body">
-                <p>Restart TomEE to apply changes.</p>
-            </div>
-            <div class="modal-footer">
-                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
-            </div>
-        </div><!-- /.modal-content -->
-    </div><!-- /.modal-dialog -->
-</div><!-- /.modal -->
 </body>
 </html>
\ No newline at end of file

Added: tomee/tomee/trunk/tomee/tomee-webapp/src/test/java/org/apache/tomee/webapp/installer/test/RunnerTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webapp/src/test/java/org/apache/tomee/webapp/installer/test/RunnerTest.java?rev=1570004&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webapp/src/test/java/org/apache/tomee/webapp/installer/test/RunnerTest.java (added)
+++ tomee/tomee/trunk/tomee/tomee-webapp/src/test/java/org/apache/tomee/webapp/installer/test/RunnerTest.java Thu Feb 20 00:07:18 2014
@@ -0,0 +1,70 @@
+package org.apache.tomee.webapp.installer.test;
+
+import org.apache.tomee.installer.Alerts;
+import org.apache.tomee.installer.InstallerInterface;
+import org.apache.tomee.installer.PathsInterface;
+import org.apache.tomee.installer.Status;
+import org.apache.tomee.webapp.installer.Runner;
+import org.easymock.EasyMock;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.List;
+import java.util.Map;
+
+public class RunnerTest {
+
+    private Object getValue(String key, List<Map<String, String>> runnerResults) {
+        for (Map<String, String> result : runnerResults) {
+            if (key.equals(result.get("key"))) {
+                return result.get("value");
+            }
+        }
+        return null;
+    }
+
+    @Test
+    public void testInstaller() {
+        {
+            PathsInterface paths = EasyMock.createNiceMock(PathsInterface.class);
+            paths.reset();
+            EasyMock.expectLastCall();
+            paths.verify();
+            EasyMock.expectLastCall().andReturn(Boolean.TRUE).anyTimes();
+
+            InstallerInterface installer = EasyMock.createNiceMock(InstallerInterface.class);
+            installer.getPaths();
+            EasyMock.expectLastCall().andReturn(paths).anyTimes();
+            installer.reset();
+            EasyMock.expectLastCall();
+            installer.getStatus();
+            EasyMock.expectLastCall().andReturn(Status.NONE);
+            installer.getStatus();
+            EasyMock.expectLastCall().andReturn(Status.NONE);
+            installer.getStatus();
+            EasyMock.expectLastCall().andReturn(Status.REBOOT_REQUIRED);
+            installer.getAlerts();
+            EasyMock.expectLastCall().andReturn(new Alerts()).anyTimes();
+
+
+            Runner runner = new Runner(installer);
+            EasyMock.replay(paths, installer);
+            Assert.assertEquals("NONE", getValue("status", runner.execute(false)));
+            Assert.assertEquals("NONE", getValue("status", runner.execute(false)));
+            Assert.assertEquals("REBOOT_REQUIRED", getValue("status", runner.execute(true)));
+            Assert.assertEquals("REBOOT_REQUIRED", getValue("status", runner.execute(false)));
+            Assert.assertEquals("REBOOT_REQUIRED", getValue("status", runner.execute(true)));
+            EasyMock.verify(paths, installer);
+        }
+        {
+            InstallerInterface installer = EasyMock.createStrictMock(InstallerInterface.class);
+            Runner runner = new Runner(installer);
+            EasyMock.replay(installer);
+            Assert.assertEquals("REBOOT_REQUIRED", getValue("status", runner.execute(false)));
+            Assert.assertEquals("REBOOT_REQUIRED", getValue("status", runner.execute(true)));
+            EasyMock.verify(installer);
+        }
+
+    }
+
+}