You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ma...@apache.org on 2009/07/08 12:48:02 UTC
svn commit: r792095 - in /incubator/ace/trunk/webui: ./ src/org/apache/ace/
src/org/apache/ace/client/ src/org/apache/ace/client/services/
src/org/apache/ace/server/ war/ war/WEB-INF/
Author: marrs
Date: Wed Jul 8 10:48:01 2009
New Revision: 792095
URL: http://svn.apache.org/viewvc?rev=792095&view=rev
Log:
ACE-25 applied the patch
Added:
incubator/ace/trunk/webui/src/org/apache/ace/client/Main.java (with props)
incubator/ace/trunk/webui/src/org/apache/ace/client/TargetTable.java (with props)
incubator/ace/trunk/webui/src/org/apache/ace/client/services/
incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetDescriptor.java (with props)
incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetService.java (with props)
incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetServiceAsync.java (with props)
incubator/ace/trunk/webui/src/org/apache/ace/server/TargetServiceImpl.java (with props)
Removed:
incubator/ace/trunk/webui/src/org/apache/ace/client/GreetingService.java
incubator/ace/trunk/webui/src/org/apache/ace/client/GreetingServiceAsync.java
incubator/ace/trunk/webui/src/org/apache/ace/client/webui.java
incubator/ace/trunk/webui/src/org/apache/ace/server/GreetingServiceImpl.java
Modified:
incubator/ace/trunk/webui/.classpath
incubator/ace/trunk/webui/src/org/apache/ace/server/Activator.java
incubator/ace/trunk/webui/src/org/apache/ace/webui.gwt.xml
incubator/ace/trunk/webui/war/WEB-INF/web.xml
incubator/ace/trunk/webui/war/webui.css
incubator/ace/trunk/webui/war/webui.html
Modified: incubator/ace/trunk/webui/.classpath
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/webui/.classpath?rev=792095&r1=792094&r2=792095&view=diff
==============================================================================
--- incubator/ace/trunk/webui/.classpath (original)
+++ incubator/ace/trunk/webui/.classpath Wed Jul 8 10:48:01 2009
@@ -5,5 +5,6 @@
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
<classpathentry kind="con" path="com.google.gwt.eclipse.core.GWT_CONTAINER"/>
<classpathentry combineaccessrules="false" kind="src" path="/core"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/server"/>
<classpathentry kind="output" path="war/WEB-INF/classes"/>
</classpath>
Added: incubator/ace/trunk/webui/src/org/apache/ace/client/Main.java
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/webui/src/org/apache/ace/client/Main.java?rev=792095&view=auto
==============================================================================
--- incubator/ace/trunk/webui/src/org/apache/ace/client/Main.java (added)
+++ incubator/ace/trunk/webui/src/org/apache/ace/client/Main.java Wed Jul 8 10:48:01 2009
@@ -0,0 +1,117 @@
+/*
+ * 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.ace.client;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.google.gwt.core.client.EntryPoint;
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.ScrollPanel;
+
+/**
+ * Entry point for the web ui.
+ */
+public class Main implements EntryPoint {
+ private static final int REFRESH_INTERVAL = 2000;
+ private StatusLabel m_statusLabel = new StatusLabel();
+ private TargetTable m_targetTable = new TargetTable(m_statusLabel);
+
+ /**
+ * Interface for the columns, that they can use to indicate their status of
+ * communication with the server.
+ */
+ interface StatusHandler {
+ void handleFail(Class<?> table);
+ void handleSuccess(Class<?> table);
+ }
+
+ /**
+ * This is the entry point method.
+ */
+ public void onModuleLoad() {
+ // Create a scrollpanel with our only table in it
+ ScrollPanel scrollPanel = new ScrollPanel(m_targetTable);
+ scrollPanel.setHeight("30em");
+ scrollPanel.setStyleName("objectTable");
+ RootPanel.get("targetColumnContainer").add(scrollPanel);
+
+ // Set a time to regularly update the UI
+ Timer refreshTimer = new Timer() {
+ @Override
+ public void run() {
+ updateUI();
+ }
+ };
+ refreshTimer.scheduleRepeating(REFRESH_INTERVAL);
+
+ // Put our status label in the lower left corner
+ RootPanel.get("serverStatusLabel").add(m_statusLabel);
+ }
+
+ /**
+ * Triggers an update of UI.
+ */
+ private void updateUI() {
+ m_targetTable.updateTable();
+ }
+
+ /**
+ * Label that can be used a s {@link StatusHandler} for the tables. Will report
+ * a successful connection when all components are happy.
+ */
+ private static class StatusLabel extends Label implements StatusHandler {
+ private final Map<Class<?>, Boolean> m_statuses = new HashMap<Class<?>, Boolean>();
+
+ public StatusLabel() {
+ setText("checking server status...");
+ }
+
+ public void handleFail(Class<?> table) {
+ m_statuses.put(table, false);
+ updateStatus();
+ }
+
+ public void handleSuccess(Class<?> table) {
+ m_statuses.put(table, true);
+ updateStatus();
+ }
+
+ private void updateStatus() {
+ boolean allOk = true;
+
+ for (boolean b : m_statuses.values()) {
+ allOk &= b;
+ }
+
+ if (allOk) {
+ setText("Server connection all happy.");
+ setStyleName("serverStatusGood");
+ }
+ else {
+ setText("Error communicating with server.");
+ setStyleName("serverStatusBad");
+ }
+ }
+ }
+
+
+}
Propchange: incubator/ace/trunk/webui/src/org/apache/ace/client/Main.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/ace/trunk/webui/src/org/apache/ace/client/TargetTable.java
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/webui/src/org/apache/ace/client/TargetTable.java?rev=792095&view=auto
==============================================================================
--- incubator/ace/trunk/webui/src/org/apache/ace/client/TargetTable.java (added)
+++ incubator/ace/trunk/webui/src/org/apache/ace/client/TargetTable.java Wed Jul 8 10:48:01 2009
@@ -0,0 +1,59 @@
+/*
+ * 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.ace.client;
+
+import org.apache.ace.client.Main.StatusHandler;
+import org.apache.ace.client.services.TargetDescriptor;
+import org.apache.ace.client.services.TargetService;
+import org.apache.ace.client.services.TargetServiceAsync;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.gwt.user.client.ui.FlexTable;
+
+/**
+ * Table class for the targets.
+ */
+public class TargetTable extends FlexTable {
+ private TargetServiceAsync m_targetService = GWT.create(TargetService.class);
+ private final StatusHandler m_handler;
+
+ TargetTable(StatusHandler handler) {
+ m_handler = handler;
+ setText(0, 0, "Name");
+ setText(0, 1, "Status");
+ }
+
+ void updateTable() {
+ m_targetService.getTargets(new AsyncCallback<TargetDescriptor[]>() {
+ public void onFailure(Throwable caught) {
+ m_handler.handleFail(getClass());
+ }
+ public void onSuccess(TargetDescriptor[] result) {
+ m_handler.handleSuccess(getClass());
+ int row = 1;
+ for (TargetDescriptor td : result) {
+ setText(row, 0, td.getName());
+ setText(row, 1, td.getProvisioningState().toString());
+ row++;
+ }
+ }
+ });
+ }
+}
Propchange: incubator/ace/trunk/webui/src/org/apache/ace/client/TargetTable.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetDescriptor.java
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetDescriptor.java?rev=792095&view=auto
==============================================================================
--- incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetDescriptor.java (added)
+++ incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetDescriptor.java Wed Jul 8 10:48:01 2009
@@ -0,0 +1,59 @@
+/*
+ * 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.ace.client.services;
+
+import java.io.Serializable;
+
+/**
+ * Value object for communicating target status between the server and the client.
+ */
+public class TargetDescriptor implements Serializable {
+ /**
+ * Generated serialVersionUID
+ */
+ private static final long serialVersionUID = 5952880998043058158L;
+
+ /**
+ * The provisioning state; we cannot reuse the server's one here.
+ */
+ public enum ProvisioningState {
+ FAILED,
+ IDLE,
+ INPROGRESS,
+ OK
+ }
+
+ private String m_name;
+ private ProvisioningState m_provisioningState;
+
+ public TargetDescriptor() {}
+
+ public TargetDescriptor(String name, ProvisioningState provisioningState) {
+ m_name = name;
+ m_provisioningState = provisioningState;
+ }
+
+ public String getName() {
+ return m_name;
+ }
+
+ public ProvisioningState getProvisioningState() {
+ return m_provisioningState;
+ }
+}
Propchange: incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetDescriptor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetService.java
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetService.java?rev=792095&view=auto
==============================================================================
--- incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetService.java (added)
+++ incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetService.java Wed Jul 8 10:48:01 2009
@@ -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.ace.client.services;
+
+import com.google.gwt.user.client.rpc.RemoteService;
+import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
+
+/**
+ * Service that can get us all targets.
+ */
+@RemoteServiceRelativePath("targets")
+public interface TargetService extends RemoteService {
+ /**
+ * Gets target descriptors for all available targets, including those that are not registered.
+ */
+ TargetDescriptor[] getTargets();
+}
Propchange: incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetService.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetServiceAsync.java
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetServiceAsync.java?rev=792095&view=auto
==============================================================================
--- incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetServiceAsync.java (added)
+++ incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetServiceAsync.java Wed Jul 8 10:48:01 2009
@@ -0,0 +1,28 @@
+/*
+ * 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.ace.client.services;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
+/**
+ * Asynchronous TargetService (GWT boiler plate)
+ */
+public interface TargetServiceAsync {
+ void getTargets(AsyncCallback<TargetDescriptor[]> callback);
+}
Propchange: incubator/ace/trunk/webui/src/org/apache/ace/client/services/TargetServiceAsync.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/ace/trunk/webui/src/org/apache/ace/server/Activator.java
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/webui/src/org/apache/ace/server/Activator.java?rev=792095&r1=792094&r2=792095&view=diff
==============================================================================
--- incubator/ace/trunk/webui/src/org/apache/ace/server/Activator.java (original)
+++ incubator/ace/trunk/webui/src/org/apache/ace/server/Activator.java Wed Jul 8 10:48:01 2009
@@ -1,3 +1,21 @@
+/*
+ * 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.ace.server;
import org.apache.felix.dependencymanager.DependencyActivatorBase;
Added: incubator/ace/trunk/webui/src/org/apache/ace/server/TargetServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/webui/src/org/apache/ace/server/TargetServiceImpl.java?rev=792095&view=auto
==============================================================================
--- incubator/ace/trunk/webui/src/org/apache/ace/server/TargetServiceImpl.java (added)
+++ incubator/ace/trunk/webui/src/org/apache/ace/server/TargetServiceImpl.java Wed Jul 8 10:48:01 2009
@@ -0,0 +1,76 @@
+/*
+ * 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.ace.server;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.ace.client.repository.stateful.StatefulGatewayObject;
+import org.apache.ace.client.repository.stateful.StatefulGatewayRepository;
+import org.apache.ace.client.services.TargetDescriptor;
+import org.apache.ace.client.services.TargetService;
+import org.osgi.framework.ServiceReference;
+
+import com.google.gwt.user.server.rpc.RemoteServiceServlet;
+
+public class TargetServiceImpl extends RemoteServiceServlet implements TargetService {
+ /**
+ * Generated serialVersionUID
+ */
+ private static final long serialVersionUID = 4501422339245927089L;
+
+ /**
+ * Helper method to translate between server- and client lingo
+ */
+ public static TargetDescriptor.ProvisioningState from(org.apache.ace.client.repository.stateful.StatefulGatewayObject.ProvisioningState state) {
+ if (state != null) {
+ switch (state) {
+ case Failed: return TargetDescriptor.ProvisioningState.FAILED;
+ case Idle: return TargetDescriptor.ProvisioningState.IDLE;
+ case InProgress: return TargetDescriptor.ProvisioningState.INPROGRESS;
+ case OK: return TargetDescriptor.ProvisioningState.OK;
+ }
+ }
+ return null;
+ }
+
+ public TargetDescriptor[] getTargets() {
+ if (Activator.getContext() == null) {
+ // We could be running without our bundle being started.
+ return null;
+ }
+
+ ServiceReference reference = Activator.getContext().getServiceReference(StatefulGatewayRepository.class.getName());
+ if (reference == null) {
+ return null;
+ }
+
+ StatefulGatewayRepository sgr = (StatefulGatewayRepository) Activator.getContext().getService(reference);
+ sgr.refresh();
+
+ List<TargetDescriptor> result = new ArrayList<TargetDescriptor>();
+
+ for (StatefulGatewayObject sgo : sgr.get()) {
+ result.add(new TargetDescriptor(sgo.getID(), from(sgo.getProvisioningState())));
+ System.err.println("Added " + sgo);
+ }
+
+ return result.toArray(new TargetDescriptor[result.size()]);
+ }
+}
Propchange: incubator/ace/trunk/webui/src/org/apache/ace/server/TargetServiceImpl.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/ace/trunk/webui/src/org/apache/ace/webui.gwt.xml
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/webui/src/org/apache/ace/webui.gwt.xml?rev=792095&r1=792094&r2=792095&view=diff
==============================================================================
--- incubator/ace/trunk/webui/src/org/apache/ace/webui.gwt.xml (original)
+++ incubator/ace/trunk/webui/src/org/apache/ace/webui.gwt.xml Wed Jul 8 10:48:01 2009
@@ -14,5 +14,5 @@
<!-- Other module inherits -->
<!-- Specify the app entry point class. -->
- <entry-point class='org.apache.ace.client.webui'/>
+ <entry-point class='org.apache.ace.client.Main'/>
</module>
Modified: incubator/ace/trunk/webui/war/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/webui/war/WEB-INF/web.xml?rev=792095&r1=792094&r2=792095&view=diff
==============================================================================
--- incubator/ace/trunk/webui/war/WEB-INF/web.xml (original)
+++ incubator/ace/trunk/webui/war/WEB-INF/web.xml Wed Jul 8 10:48:01 2009
@@ -4,24 +4,21 @@
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
+
<!-- Default page to serve -->
<welcome-file-list>
<welcome-file>webui.html</welcome-file>
</welcome-file-list>
- <!-- Session listener -->
- <listener>
- <listener-class>org.apache.ace.server.SessionListener</listener-class>
- </listener>
-
<!-- Servlets -->
<servlet>
- <servlet-name>greetServlet</servlet-name>
- <servlet-class>org.apache.ace.server.GreetingServiceImpl</servlet-class>
+ <servlet-name>targetServlet</servlet-name>
+ <servlet-class>org.apache.ace.server.TargetServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
- <servlet-name>greetServlet</servlet-name>
- <url-pattern>/webui/greet</url-pattern>
+ <servlet-name>targetServlet</servlet-name>
+ <url-pattern>/webui/targets</url-pattern>
</servlet-mapping>
+
</web-app>
Modified: incubator/ace/trunk/webui/war/webui.css
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/webui/war/webui.css?rev=792095&r1=792094&r2=792095&view=diff
==============================================================================
--- incubator/ace/trunk/webui/war/webui.css (original)
+++ incubator/ace/trunk/webui/war/webui.css Wed Jul 8 10:48:01 2009
@@ -32,3 +32,11 @@
#closeButton {
margin: 15px 6px 6px;
}
+
+.serverStatusGood {
+ color: green;
+}
+
+.serverStatusBad {
+ color: red;
+}
Modified: incubator/ace/trunk/webui/war/webui.html
URL: http://svn.apache.org/viewvc/incubator/ace/trunk/webui/war/webui.html?rev=792095&r1=792094&r2=792095&view=diff
==============================================================================
--- incubator/ace/trunk/webui/war/webui.html (original)
+++ incubator/ace/trunk/webui/war/webui.html Wed Jul 8 10:48:01 2009
@@ -18,7 +18,7 @@
<!-- -->
<!-- Any title is fine -->
<!-- -->
- <title>Web Application Starter Project</title>
+ <title>Apache Ace</title>
<!-- -->
<!-- This script loads your compiled module. -->
@@ -38,16 +38,18 @@
<!-- OPTIONAL: include this if you want history support -->
<iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
- <h1>Web Application Starter Project</h1>
+ <h1>Apache Ace</h1>
<table align="center">
- <tr>
- <td colspan="2" style="font-weight:bold;">Please enter your name:</td>
- </tr>
- <tr>
- <td id="nameFieldContainer"></td>
- <td id="sendButtonContainer"></td>
- </tr>
+ <tr><td><h3>Bundles</h3></td><td><h3>Groups</h3></td><td><h3>Licenses</h3></td><td><h3>Targets</h3></td></tr>
+ <tr>
+ <td>Bundles column goes here</td>
+ <td>Groups column goes here</td>
+ <td>Licenses column goes here</td>
+ <td id="targetColumnContainer"></td>
+ </tr>
</table>
+
+ <div id="serverStatusLabel" />
</body>
</html>