summaryrefslogtreecommitdiffstats
path: root/sandbox/thilina/geronimo_ACE/src
diff options
context:
space:
mode:
authorantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2008-07-16 13:01:57 +0000
committerantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2008-07-16 13:01:57 +0000
commit8cba37863047825ce071916a07b3599fb68b85dd (patch)
tree3243fa156895e64c5c4944e2346f2d0e79e343c0 /sandbox/thilina/geronimo_ACE/src
parentc0e7b81b592538653cd6cb255f47fa3e259517b6 (diff)
TUSCANY-2391: commit latest patch from Thilina
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@677274 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sandbox/thilina/geronimo_ACE/src')
-rw-r--r--sandbox/thilina/geronimo_ACE/src/main/java/org/apache/tuscany/geronimoace/GeronimoACE.java157
-rw-r--r--sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/geronimo-web.xml120
-rw-r--r--sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/portlet.xml78
-rw-r--r--sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/web.xml63
-rw-r--r--sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Cloud.html400
-rw-r--r--sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Composite.html286
-rw-r--r--sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Files.html129
-rw-r--r--sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Home.jsp188
-rw-r--r--sandbox/thilina/geronimo_ACE/src/main/webapp/pages/ListDomains.jsp62
-rw-r--r--sandbox/thilina/geronimo_ACE/src/main/webapp/pages/ManageDomain.jsp75
-rw-r--r--sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Workspace.html186
-rw-r--r--sandbox/thilina/geronimo_ACE/src/main/webapp/pages/header.jsp42
-rw-r--r--sandbox/thilina/geronimo_ACE/src/main/webapp/pages/manager.css158
-rw-r--r--sandbox/thilina/geronimo_ACE/src/test/java/org/apache/tuscany/geronimoace/AppTest.java20
14 files changed, 1479 insertions, 485 deletions
diff --git a/sandbox/thilina/geronimo_ACE/src/main/java/org/apache/tuscany/geronimoace/GeronimoACE.java b/sandbox/thilina/geronimo_ACE/src/main/java/org/apache/tuscany/geronimoace/GeronimoACE.java
index f55776fc0a..3eb5b82ed3 100644
--- a/sandbox/thilina/geronimo_ACE/src/main/java/org/apache/tuscany/geronimoace/GeronimoACE.java
+++ b/sandbox/thilina/geronimo_ACE/src/main/java/org/apache/tuscany/geronimoace/GeronimoACE.java
@@ -1,79 +1,78 @@
-/*
- * 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.
- */
-
-/*
- * 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.tuscany.geronimoace;
-
-import javax.portlet.*;
-import java.io.IOException;
-
-public class GeronimoACE extends GenericPortlet {
- private String viewUrl = "/pages/Home.jsp";
-
-
- public void init(PortletConfig config) throws PortletException {
- super.init(config);
- // viewUrl = config.getInitParameter("view_url");
- }
-
- public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException {
- String task = request.getParameter("task");
- String domain = request.getParameter("domainName");
- if (task != null) {
- if (task.equals("list")) {
- viewUrl = "/pages/ListDomains.jsp";
- }
- }
- if (domain != null) {
- request.setAttribute("domain", domain);
- viewUrl = "/pages/ManageDomain.jsp";
- }
- response.setPortletMode(PortletMode.VIEW);
- }
-
- public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
- // Set the response to read HTML
- response.setContentType("text/html;charset=UTF-8");
-
- PortletRequestDispatcher dispatcher = getPortletContext().getRequestDispatcher(viewUrl);
- dispatcher.include(request, response);
-
-
- }
-
-
-}
+/*
+ * 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.tuscany.geronimoace;
+
+import javax.portlet.*;
+import java.io.IOException;
+
+public class GeronimoACE extends GenericPortlet {
+ private String viewUrl = "/pages/Home.jsp"; // viewUrl is set to the home page by default
+ boolean isHome = true; // used for navigating back to the home page.
+
+
+ public void init(PortletConfig config) throws PortletException {
+ super.init(config);
+ }
+
+ public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException {
+ isHome = true;
+ String task = request.getParameter("task"); // getting request parameters task and domain name
+ String domain = request.getParameter("domainName");
+ if (task != null) {
+ if (task.equals("composites")) { // if the request is for Composites,forwarding to Composites.html
+ viewUrl = "/pages/Composite.html";
+ }
+ if (task.equals("workspace")) { // if the request is for Contributions,forwarding to workspace.html
+ viewUrl = "/pages/Workspace.html";
+ }
+ if (task.equals("cloud")) { // if the request is for Clouds,forwarding to Cloud.html
+ viewUrl = "/pages/Cloud.html";
+ }
+ if (task.equals("files")) { // iif the request is for Files,forwarding to Files.html
+ viewUrl = "/pages/Files.html";
+ }
+ }
+
+ response.setPortletMode(PortletMode.VIEW); // by changing portlet mode, doview methos is called again.
+
+
+ }
+
+ public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
+ // Set the response to read HTML
+ response.setContentType("text/html;charset=UTF-8");
+
+ if (isHome) {
+ // dispatching to the appropriate page
+ PortletRequestDispatcher dispatcher = getPortletContext().getRequestDispatcher(viewUrl);
+ dispatcher.include(request, response);
+ isHome = false;
+ } else {
+ // dispatching to the home page.
+ PortletRequestDispatcher dispatcher = getPortletContext().getRequestDispatcher("/pages/Home.jsp");
+ dispatcher.include(request, response);
+ isHome = true;
+ }
+ }
+
+}
+
+
+
diff --git a/sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/geronimo-web.xml b/sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/geronimo-web.xml
index cfd05c1866..376fe17d75 100644
--- a/sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/geronimo-web.xml
+++ b/sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/geronimo-web.xml
@@ -1,70 +1,50 @@
-<!--
- ~ 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.
- -->
-
-
-<!--
- ~ 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.
- -->
-
-
-<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.2">
- <environment>
- <moduleId>
- <groupId>org.apache.tuscany.geronimoace</groupId>
- <artifactId>geronimo-ace</artifactId>
- <version>1.0-SNAPSHOT</version>
- <type>war</type>
- </moduleId>
-
- <dependencies>
- <dependency> <!-- Put a dependancy on the hosting portal (pluto) -->
- <groupId>org.apache.geronimo.plugins</groupId>
- <artifactId>pluto-support</artifactId>
- </dependency>
- </dependencies>
- </environment>
-
- <!-- This is where the files are accessed from. (aka - portletContext) -->
- <context-root>/GeronimoACE</context-root>
-
- <!-- Start off a ACEGBean, this is the lifecycle for the portlet -->
- <gbean name="PlutoTest" class="org.apache.geronimo.pluto.AdminConsoleExtensionGBean">
- <attribute name="pageTitle">Tuscany ACE</attribute>
- <attribute name="portletContext">/GeronimoACE</attribute>
- <attribute name="portletList">[GeronimoACE]</attribute>
- <reference name="PortalContainerServices">
- <name>PlutoPortalServices</name>
- </reference>
- </gbean>
-</web-app>
+<!--
+ ~ 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.
+ -->
+
+
+<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.2">
+ <environment>
+ <moduleId>
+ <groupId>org.apache.tuscany.geronimoace</groupId>
+ <artifactId>geronimo-ace</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <type>war</type>
+ </moduleId>
+
+ <dependencies>
+ <dependency> <!-- Put a dependancy on the hosting portal (pluto) -->
+ <groupId>org.apache.geronimo.plugins</groupId>
+ <artifactId>pluto-support</artifactId>
+ </dependency>
+ </dependencies>
+ </environment>
+
+ <!-- This is where the files are accessed from. (aka - portletContext) -->
+ <context-root>/GeronimoACE</context-root>
+
+ <!-- Start off a ACEGBean, this is the lifecycle for the portlet -->
+ <gbean name="PlutoTest" class="org.apache.geronimo.pluto.AdminConsoleExtensionGBean">
+ <attribute name="pageTitle">Tuscany ACE</attribute>
+ <attribute name="portletContext">/GeronimoACE</attribute>
+ <attribute name="portletList">[GeronimoACE]</attribute>
+ <reference name="PortalContainerServices">
+ <name>PlutoPortalServices</name>
+ </reference>
+ </gbean>
+</web-app>
diff --git a/sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/portlet.xml b/sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/portlet.xml
index 7989f30ed3..e0456f05fc 100644
--- a/sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/portlet.xml
+++ b/sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/portlet.xml
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * 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.
--->
-<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version="1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
- <portlet>
- <description lang="EN">GeronimoACE</description>
- <portlet-name>GeronimoACE</portlet-name>
- <display-name lang="EN">Geronimo Admin Console for Tuscany</display-name>
- <portlet-class>org.apache.tuscany.geronimoace.GeronimoACE</portlet-class>
- <supports>
- <mime-type>text/html</mime-type>
- <portlet-mode>view</portlet-mode>
- <portlet-mode>edit</portlet-mode>
- <portlet-mode>help</portlet-mode>
- </supports>
- <supported-locale>en</supported-locale>
- <portlet-info>
- <title>Tuscany Admin Console EXtension</title>
- <short-title>Tuscany ACE</short-title>
- </portlet-info>
- </portlet>
+<!--
+ ~ 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.
+-->
+
+<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version="1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
+ <portlet>
+ <description lang="EN">GeronimoACE</description>
+ <portlet-name>GeronimoACE</portlet-name>
+ <display-name lang="EN">Geronimo Admin Console for Tuscany</display-name>
+ <portlet-class>org.apache.tuscany.geronimoace.GeronimoACE</portlet-class>
+ <supports>
+ <mime-type>text/html</mime-type>
+ <portlet-mode>view</portlet-mode>
+ <portlet-mode>edit</portlet-mode>
+ <portlet-mode>help</portlet-mode>
+ </supports>
+ <supported-locale>en</supported-locale>
+ <portlet-info>
+ <title>Tuscany Admin Console EXtension</title>
+ <short-title>Tuscany ACE</short-title>
+ </portlet-info>
+ </portlet>
</portlet-app> \ No newline at end of file
diff --git a/sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/web.xml b/sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/web.xml
index fea2878551..b5c0e3667b 100644
--- a/sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/web.xml
+++ b/sandbox/thilina/geronimo_ACE/src/main/webapp/WEB-INF/web.xml
@@ -1,41 +1,22 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * 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.
--->
-
-<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd">
-<web-app>
-
- <!-- This is pretty standard servlet code -->
-
- <servlet>
- <servlet-name>GeronimoACE</servlet-name>
- <servlet-class>org.apache.pluto.core.PortletServlet</servlet-class>
- <init-param>
- <param-name>portlet-name</param-name>
- <param-value>GeronimoACE</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>GeronimoACE</servlet-name>
- <url-pattern>/PlutoInvoker/GeronimoACE</url-pattern>
- </servlet-mapping>
-
-</web-app>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+ "http://java.sun.com/dtd/web-app_2_3.dtd">
+<web-app>
+
+ <!-- This is pretty standard servlet code -->
+
+ <servlet>
+ <servlet-name>GeronimoACE</servlet-name>
+ <servlet-class>org.apache.pluto.core.PortletServlet</servlet-class>
+ <init-param>
+ <param-name>portlet-name</param-name>
+ <param-value>GeronimoACE</param-value>
+ </init-param>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>GeronimoACE</servlet-name>
+ <url-pattern>/PlutoInvoker/GeronimoACE</url-pattern>
+ </servlet-mapping>
+
+</web-app>
diff --git a/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Cloud.html b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Cloud.html
new file mode 100644
index 0000000000..ffd0ec61e1
--- /dev/null
+++ b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Cloud.html
@@ -0,0 +1,400 @@
+<!--
+ * 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.
+-->
+<html>
+<head>
+<title>SCA Domain - Cloud</title>
+
+<script type="text/javascript" src="cloud.js"></script>
+<script type="text/javascript" src="utils.js"></script>
+
+<script language="JavaScript">
+
+//@Reference
+var cloudComposite = new Reference("cloudComposite");
+
+//@Reference
+var domainComposite = new Reference("domainComposite");
+
+//@Reference
+var processCollection = new Reference("processCollection");
+
+function getNodes() {
+ cloudComposite.get("", getNodesResponse);
+}
+
+function contributionURI(id) {
+ var i = id.indexOf(';');
+ return id.substring(10, i);
+}
+
+function compositeName(id) {
+ var i = id.indexOf(';');
+ return id.substring(i + 1);
+}
+
+function compositeLocalName(id) {
+ name = compositeName(id);
+ var i = name.indexOf(';');
+ return name.substring(i + 1);
+}
+
+var nodeNames;
+
+function getNodesResponse(feed) {
+ nodeNames = new Array();
+ if (feed != null) {
+ var entries = feed.getElementsByTagName("entry");
+ var composites = "";
+ composites += '<table width="100%">';
+ composites += '<tr><th>Node</th><th>Status</th><th>Composite</th>' +
+ '<th>Contribution</th><th>Node Config</th></tr>';
+
+ for (var i = 0; i < entries.length; i++) {
+ var nodeId = entries[i].getElementsByTagName("id")[0].firstChild.nodeValue;
+ var links = entries[i].getElementsByTagName("link");
+ var nodeLink = undefined;
+ var compositeLink = undefined;
+ var compositeId = "composite:undefined;undefined;undefined";
+ var uri = '<span style="color: red">unknown</span>';
+ var qname = undefined;
+ for (var l = 0; l < links.length; l++) {
+ var a = links[l].getAttribute('rel');
+ if (a == undefined) {
+ nodeLink = links[l].getAttribute('href');
+ } else if (a == 'related') {
+ compositeLink = links[l].getAttribute('href');
+ var c = compositeLink.indexOf('composite:');
+ compositeId = compositeLink.substring(c);
+ uri = contributionURI(compositeId);
+ qname = compositeName(compositeId);
+ }
+ }
+
+ var nodeName = compositeLocalName(nodeId);
+ nodeNames[i] = nodeName;
+
+ var content = "";
+ if (entries[i].getElementsByTagName("content")[0].firstChild != null) {
+ content = entries[i].getElementsByTagName("content")[0].firstChild.nodeValue;
+ }
+
+ composites += '<tr>'
+ if (content.indexOf('<span id="problem"') != -1) {
+ composites += '<td><input name="composites" type="checkbox" value="' + nodeId + '">' +
+ '<a href=\"' + nodeLink + '\">' + nodeName + '</a></td>';
+ composites += '<td><span id="status_' + nodeName + '">unknown</span></td>';
+ composites += '<td>' + content + '</td>';
+ composites += '<td>' + uri + '</td>';
+ } else {
+ composites += '<td><input name="composites" type="checkbox" value="' + nodeId + '">' +
+ '<a href=\"' + nodeLink + '\">' + nodeName + '</a></td>';
+ composites += '<td><span id="status_' + nodeName + '">unknown</span></td>';
+ composites += '<td><a href=\"' + compositeLink + '\">' + qname + '</a></td>';
+ composites += '<td><a href="/contribution/' + uri + '">' + uri + '</a></td>';
+ }
+ composites += '<td><a href="/node-config/' + nodeName + '"><img src="icons/feed-icon.png" border="0"></a></td>';
+ composites += '</tr>';
+ }
+ composites += '</table>';
+ document.getElementById("composites").innerHTML = composites;
+
+ processCollection.get("", getProcessesResponse);
+ }
+}
+
+function getProcessesResponse(feed) {
+ if (feed != null) {
+ var nodeStatus = new Array();
+
+ var entries = feed.getElementsByTagName("entry");
+ for (var i = 0; i < entries.length; i++) {
+ var nodeName = entries[i].getElementsByTagName("id")[0].firstChild.nodeValue;
+ nodeStatus[nodeName] = 'started';
+ }
+
+ for (var i = 0; i < nodeNames.length; i++) {
+ var element = document.getElementById('status_' + nodeNames[i]);
+ var nodeName = nodeNames[i];
+ if (nodeStatus[nodeName] == null) {
+ element.innerHTML = '<span>stopped</span>';
+ } else {
+ element.innerHTML = '<span><a style="color: green" href="/processes/?node=' + nodeName + '">started</a></span>';
+ }
+ }
+ }
+}
+
+function deleteNode() {
+ var composites = array(document.cloudCompositeForm.composites);
+ for (var i = 0; i < composites.length; i++) {
+ if (composites[i].checked) {
+ var id = composites[i].value;
+ cloudComposite.del(id, deleteNodeResponse);
+ }
+ }
+}
+
+function deleteNodeResponse() {
+ getNodes();
+}
+
+function addNode() {
+ var nodeName = document.newNodeForm.nodeName.value;
+ var nodeURI = document.newNodeForm.nodeURI.value;
+ var compositeNamespace = document.newNodeForm.compositeNamespace.value;
+ var compositeName = document.newNodeForm.compositeName.value;
+ var contributionURI = document.newNodeForm.contributionURI.value;
+ var id = 'composite:' +
+ 'http://tuscany.apache.org/cloud' + ';' +
+ 'http://tuscany.apache.org/cloud' + ';' +
+ nodeName;
+
+ var entry = '<entry xmlns="http://www.w3.org/2005/Atom">\n' +
+ '<id>' + id + '</id>\n' +
+ '<content type="text/xml">\n' +
+ '<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"\n' +
+ ' xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"\n' +
+ ' targetNamespace="http://tuscany.apache.org/cloud"\n' +
+ ' xmlns:c="' + compositeNamespace + '"\n' +
+ ' name="' + nodeName + '">\n' +
+ '\n' +
+ ' <component name="' + nodeName + '">\n' +
+ ' <t:implementation.node uri="' + contributionURI + '" composite="c:' + compositeName + '"/>\n' +
+ ' <service name="Node">\n' +
+ ' <binding.ws uri="' + nodeURI + '"/>\n' +
+ ' <t:binding.http uri="' + nodeURI + '"/>\n' +
+ ' <t:binding.jsonrpc uri="' + nodeURI + '"/>\n' +
+ ' <t:binding.atom uri="' + nodeURI + '"/>\n' +
+ ' </service>\n' +
+ ' </component>\n' +
+ '</composite>' +
+ '</content>' +
+ '</entry>';
+ cloudComposite.post(entry, addNodeResponse);
+}
+
+function addNodeResponse() {
+ document.newNodeForm.nodeName.value = "";
+ document.newNodeForm.nodeURI.value = "";
+ document.newNodeForm.compositeNamespace.value = "";
+ document.newNodeForm.compositeName.value = "";
+ document.newNodeForm.contributionURI.value = "";
+ getNodes();
+}
+
+function startNode() {
+ var composites = array(document.cloudCompositeForm.composites);
+ for (var i = 0; i < composites.length; i++) {
+ if (composites[i].checked) {
+ var id = nodeNames[i];
+
+ var entry = '<entry xmlns="http://www.w3.org/2005/Atom">' +
+ '<id>' + id + '</id>' +
+ '</entry>';
+ processCollection.post(entry, startNodeResponse);
+ }
+ }
+}
+
+function startNodeResponse() {
+ processCollection.get("", getProcessesResponse);
+
+ for (var i = 0; i < composites.length; i++) {
+ if (composites[i].checked) {
+ composites[i].checked = false;
+ }
+ }
+}
+
+function stopNode() {
+ var composites = array(document.cloudCompositeForm.composites);
+ for (var i = 0; i < composites.length; i++) {
+ if (composites[i].checked) {
+ var id = nodeNames[i];
+ processCollection.del(id, stopNodeResponse);
+ }
+ }
+}
+
+function stopNodeResponse() {
+ processCollection.get("", getProcessesResponse);
+
+ for (var i = 0; i < composites.length; i++) {
+ if (composites[i].checked) {
+ composites[i].checked = false;
+ }
+ }
+}
+
+var deployedComposites = new Array();
+
+function getComposites() {
+ domainComposite.get("", getCompositesResponse);
+}
+
+function getCompositesResponse(feed) {
+ if (feed != null) {
+ var entries = feed.getElementsByTagName("entry");
+ for (var i = 0; i < entries.length; i++) {
+ var id = entries[i].getElementsByTagName("id")[0].firstChild.nodeValue;
+ deployedComposites[id] = id;
+ }
+ }
+}
+
+function suggestCompositeNamespaces() {
+ var namespaces = new Array();
+ for (var uri in deployedComposites) {
+ var qname = compositeName(uri);
+ var ns = qname.substring(0, qname.indexOf(';'));
+ namespaces[ns] = ns;
+ }
+ return array(namespaces);
+}
+
+function suggestCompositeNames() {
+ var inputns = document.newNodeForm.compositeNamespace.value;
+ var names = new Array();
+ for (var uri in deployedComposites) {
+ var qname = compositeName(uri);
+ var sc = qname.indexOf(';');
+ var ns = qname.substring(0, sc);
+ var name = qname.substring(sc + 1);
+ if (ns == inputns || inputns == "") {
+ names[name] = name;
+ }
+ }
+ return array(names);
+}
+
+function suggestContributionURIs() {
+ var inputns = document.newNodeForm.compositeNamespace.value;
+ var inputname = document.newNodeForm.compositeName.value;
+ var uris = new Array();
+ for (var uri in deployedComposites) {
+ var qname = compositeName(uri);
+ var sc = qname.indexOf(';');
+ var ns = qname.substring(0, sc);
+ var name = qname.substring(sc + 1);
+ if ((ns == inputns || inputns == "") && (name == inputname || inputname == "")) {
+ var curi = contributionURI(uri);
+ uris[curi] = curi;
+ }
+ }
+ return array(uris);
+}
+
+function init() {
+ toolbar();
+ getNodes();
+ getComposites();
+ suggest(document.newNodeForm.compositeNamespace, suggestCompositeNamespaces);
+ suggest(document.newNodeForm.compositeName, suggestCompositeNames);
+ suggest(document.newNodeForm.contributionURI, suggestContributionURIs);
+}
+
+</script>
+
+<link rel="stylesheet" type="text/css" href="/pages/manager.css">
+</head>
+
+<body onload="init()">
+<div id="toolbar"></div>
+
+<div id="cloudComposite">
+ <br>
+ <span class=hd1>
+ SCA Domain<br><br>
+ <b>Cloud</b>&nbsp;
+ </span>
+ <br><br>
+ Here is the list of SCA nodes configured in your SCA domain cloud.
+ <br><br>
+
+ <form name="cloudCompositeForm">
+ <div id="composites">
+ <table width="100%">
+ <tbody>
+ <tr>
+ <th>Node</th>
+ <th>Status</th>
+ <th>Composite</th>
+ <th>Contribution</th>
+ <th>Node Config</th>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <br/>
+ <input type="button" value="Start" onclick="startNode()"/>
+ <input type="button" value="Stop" onclick="stopNode()"/>
+ <input type="button" value="Delete" onclick="deleteNode()"/>
+ </form>
+
+ <br><br>
+
+ <form name="newNodeForm">
+ <table width="100%">
+ <tr>
+ <th>Add a Node</th>
+ </tr>
+ <tr>
+ <td>Add a node to the cloud. The node will run the SCA components declared in the specified composite.
+ </td>
+ </tr>
+ </table>
+ <br>
+ <table>
+ <tr>
+ <td>Node name:</td>
+ <td><input type="text" name="nodeName" size="50"/></td>
+ <td>e.g. YourNode</td>
+ </tr>
+ <tr>
+ <td>Node URI:</td>
+ <td><input type="text" name="nodeURI" size="50"/></td>
+ </td>
+ <td>e.g. http://yourhost:8080</td>
+ </tr>
+ <tr>
+ <td>Composite namespace:</td>
+ <td><input type="text" name="compositeNamespace" size="50"/></td>
+ </td>
+ <td>e.g. http://your/namespace</td>
+ </tr>
+ <tr>
+ <td>Composite name:</td>
+ <td><input type="text" name="compositeName" size="50"/></td>
+ </td>
+ <td>e.g. yourcomposite</td>
+ </tr>
+ <tr>
+ <td>Contribution URI:</td>
+ <td><input type="text" name="contributionURI" size="50"/></td>
+ </td>
+ <td>e.g. yourcontrib, http://yourcontrib</td>
+ </tr>
+ </table>
+ <input type="button" onClick="addNode()" value="Add"/>
+ </form>
+
+</div>
+</body>
+
+</html>
diff --git a/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Composite.html b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Composite.html
new file mode 100644
index 0000000000..f616f61bd6
--- /dev/null
+++ b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Composite.html
@@ -0,0 +1,286 @@
+<!--
+ * 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.
+-->
+<html>
+<head>
+<title>SCA Domain - Domain Composite</title>
+
+<script type="text/javascript" src="composite.js"></script>
+<script type="text/javascript" src="utils.js"></script>
+
+<script language="JavaScript">
+
+//@Reference
+var domainComposite = new Reference("domainComposite");
+
+//@Reference
+var workspace = new Reference("workspace");
+
+function getComposites() {
+ domainComposite.get("", getCompositesResponse);
+}
+
+function contributionURI(id) {
+ var i = id.indexOf(';');
+ return id.substring(10, i);
+}
+
+function compositeName(id) {
+ var i = id.indexOf(';');
+ return id.substring(i + 1);
+}
+
+function getCompositesResponse(feed) {
+ if (feed != null) {
+ var entries = feed.getElementsByTagName("entry");
+ var composites = "";
+ composites += '<table width="100%">';
+ composites += '<tr><th>Composite</th>' +
+ '<th>Contribution</th>' +
+ '<th>Components</th>' +
+ '</tr>';
+ //'<th>Composite Configuration</th>' +
+
+ for (var i = 0; i < entries.length; i++) {
+ var id = entries[i].getElementsByTagName("id")[0].firstChild.nodeValue;
+ var link = entries[i].getElementsByTagName("link")[0].getAttribute("href");
+ var uri = contributionURI(id);
+ var qname = compositeName(id);
+
+ var content = "";
+ if (entries[i].getElementsByTagName("content")[0].firstChild != null) {
+ content = entries[i].getElementsByTagName("content")[0].firstChild.nodeValue;
+ }
+ var components = '';
+ var bs = content.indexOf('<span id="components">');
+ if (bs != -1) {
+ var es = content.indexOf('</span>', bs);
+ components = content.substring(bs, es + 7);
+ } else {
+ bs = content.indexOf('<span id="problem"');
+ if (bs != -1) {
+ var es = content.indexOf('</span>', bs);
+ components = content.substring(bs, es + 7);
+ }
+ }
+
+ composites += '<tr>'
+ composites += '<td><input name="composites" type="checkbox" value="' + id + '">';
+ composites += '<a href=\"' + link + '\">' + qname + '</a></td>';
+ composites += '<td><a href="/contribution/' + uri + '">' + uri + '</a></td>';
+ composites += '<td class=tdw>' + components + '</td>';
+ //composites += '<td><a href="/composite-config/?composite=' + id + '"><img src="icons/feed-icon.png" border="0"></a></td>';
+ composites += '</tr>';
+ }
+ composites += '</table>';
+ document.getElementById("composites").innerHTML = composites;
+ }
+}
+
+function deleteComposite() {
+ var composites = array(document.domainCompositeForm.composites);
+ for (var i = 0; i < composites.length; i++) {
+ if (composites[i].checked) {
+ var id = composites[i].value;
+ domainComposite.del(id, deleteCompositeResponse);
+ }
+ }
+}
+
+function deleteCompositeResponse() {
+ getComposites();
+}
+
+function addComposite() {
+ var id = 'composite:' +
+ document.newCompositeForm.contributionURI.value + ';' +
+ document.newCompositeForm.compositeNamespace.value + ';' +
+ document.newCompositeForm.compositeName.value;
+ var entry = '<entry xmlns="http://www.w3.org/2005/Atom">' +
+ '<title>' + id + '</title>' +
+ '<id>' + id + '</id>' +
+ '</entry>';
+ domainComposite.post(entry, addCompositeResponse);
+}
+
+function addCompositeResponse() {
+ document.newCompositeForm.compositeNamespace.value = "";
+ document.newCompositeForm.compositeName.value = "";
+ document.newCompositeForm.contributionURI.value = "";
+ getComposites();
+}
+
+var contributedComposites = new Array();
+
+function getContributions() {
+ workspace.get("", getContributionsResponse);
+}
+
+function getContributionsResponse(feed) {
+ if (feed != null) {
+ contributedComposites = new Array();
+ var entries = feed.getElementsByTagName("entry");
+ for (var i = 0; i < entries.length; i++) {
+ if (entries[i].getElementsByTagName("content")[0].firstChild != null) {
+ var content = entries[i].getElementsByTagName("content")[0].firstChild.nodeValue;
+ var bs = content.indexOf('<span id="deployables">');
+ if (bs != -1) {
+ var es = content.indexOf('</span>', bs);
+ content = content.substring(bs, es + 7);
+ for (; ;) {
+ var bc = content.indexOf('composite:');
+ if (bc == -1) {
+ break;
+ }
+ var ec = content.indexOf('">', bc);
+ if (ec == -1) {
+ break;
+ }
+ var uri = content.substring(bc, ec);
+ contributedComposites[uri] = uri;
+ content = content.substring(ec + 1);
+ }
+ }
+ }
+ }
+ }
+}
+
+function suggestCompositeNamespaces() {
+ var namespaces = new Array();
+ for (var uri in contributedComposites) {
+ var qname = compositeName(uri);
+ var ns = qname.substring(0, qname.indexOf(';'));
+ namespaces[ns] = ns;
+ }
+ return array(namespaces);
+}
+
+function suggestCompositeNames() {
+ var inputns = document.newCompositeForm.compositeNamespace.value;
+ var names = new Array();
+ for (var uri in contributedComposites) {
+ var qname = compositeName(uri);
+ var sc = qname.indexOf(';');
+ var ns = qname.substring(0, sc);
+ var name = qname.substring(sc + 1);
+ if (ns == inputns || inputns == "") {
+ names[name] = name;
+ }
+ }
+ return array(names);
+}
+
+function suggestContributionURIs() {
+ var inputns = document.newCompositeForm.compositeNamespace.value;
+ var inputname = document.newCompositeForm.compositeName.value;
+ var uris = new Array();
+ for (var uri in contributedComposites) {
+ var qname = compositeName(uri);
+ var sc = qname.indexOf(';');
+ var ns = qname.substring(0, sc);
+ var name = qname.substring(sc + 1);
+ if ((ns == inputns || inputns == "") && (name == inputname || inputname == "")) {
+ var curi = contributionURI(uri);
+ uris[curi] = curi;
+ }
+ }
+ return array(uris);
+}
+
+function init() {
+ toolbar();
+ getComposites();
+ getContributions();
+ suggest(document.newCompositeForm.compositeNamespace, suggestCompositeNamespaces);
+ suggest(document.newCompositeForm.compositeName, suggestCompositeNames);
+ suggest(document.newCompositeForm.contributionURI, suggestContributionURIs);
+}
+
+</script>
+
+<link rel="stylesheet" type="text/css" href="manager.css">
+</head>
+
+<body onload="init()">
+<div id="toolbar"></div>
+
+<div id="domainComposite">
+ <br>
+ <span class=hd1>
+ SCA Domain<br><br>
+ <b>Domain Composite</b>&nbsp;
+ </span>
+ <br><br>
+ Here is the list of SCA composites currently included as top-level composites in your SCA domain.
+
+ <br><br>
+
+
+ <form name="domainCompositeForm">
+ <form name="domainCompositeForm">
+ <div id="composites">
+ <table width="100%">
+ <tbody>
+ <tr>
+ <th>Composite</th>
+ <th>Contribution</th>
+ <th>Components</th>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <br/>
+ <input type="button" value="Delete" onclick="deleteComposite()"/>
+ </form>
+
+ <br><br>
+
+ <form name="newCompositeForm">
+ <table width="100%">
+ <tr>
+ <th>Add Composite</th>
+ </tr>
+ <tr>
+ <td>Add an SCA composite describing your SCA service components.</td>
+ </tr>
+ </table>
+ <br>
+ <table>
+ <tr>
+ <td>Composite namespace:</td>
+ <td><input type="text" name="compositeNamespace" size="50"/></td>
+ <td>e.g. http://your/namespace</td>
+ </tr>
+ <tr>
+ <td>Composite name:</td>
+ <td><input type="text" name="compositeName" size="50"/></td>
+ <td>e.g. yourcomposite</td>
+ </tr>
+ <tr>
+ <td>Contribution URI:</td>
+ <td><input type="text" name="contributionURI" size="50"/></td>
+ <td>e.g. yourcontrib, http://yourcontrib</td>
+ </tr>
+ </table>
+ <input type="button" onClick="addComposite()" value="Add"/>
+ </form>
+
+</div>
+</body>
+</html>
diff --git a/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Files.html b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Files.html
new file mode 100644
index 0000000000..5c69ba0ffc
--- /dev/null
+++ b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Files.html
@@ -0,0 +1,129 @@
+<!--
+ * 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.
+-->
+<html>
+<head>
+ <title>SCA Domain - Contribution File Server</title>
+
+ <script type="text/javascript" src="files.js"></script>
+ <script type="text/javascript" src="utils.js"></script>
+
+ <script language="JavaScript">
+
+ //@Reference
+ var files = new Reference("files");
+
+ function getFiles() {
+ files.get("", getFilesResponse);
+ }
+
+ function getFilesResponse(feed) {
+ if (feed != null) {
+ var entries = feed.getElementsByTagName("entry");
+ var list = '<table width="100%"><tr><th>Files</th></tr>';
+ for (var i = 0; i < entries.length; i++) {
+ var id = entries[i].getElementsByTagName("id")[0].firstChild.nodeValue;
+ var location = entries[i].getElementsByTagName("link")[0].getAttribute("href");
+ list += '<tr><td><input name="files" type="checkbox" value="' + id + '">' +
+ '<a href=\"' + location + '\">' + id + '</a></td></tr>';
+ }
+ list += "</table>";
+ document.getElementById("files").innerHTML = list;
+ }
+ }
+
+ function deleteFile() {
+ var list = array(document.filesForm.files);
+ for (var i = 0; i < list.length; i++) {
+ if (list[i].checked) {
+ var id = list[i].value;
+ files.del(id, deleteFileResponse);
+ }
+ }
+ }
+
+ function deleteFileResponse() {
+ getFiles();
+ }
+
+ function uploadFile() {
+ document.uploadFileForm.submit();
+ }
+
+ function init() {
+ toolbar();
+ getFiles();
+ }
+
+ </script>
+
+ <link rel="stylesheet" type="text/css" href="/pages/manager.css">
+</head>
+
+<body onload="init()">
+<div id="toolbar"></div>
+
+<div id="fileServer">
+ <br>
+ <span class=hd1>
+ SCA Domain<br><br>
+ <b>File Server</b>&nbsp;
+ </span>
+ <br><br>
+ This is a simple ATOM-based file server useful to share files if you don't have an FTP, SVN or Maven repository.
+ <br><br>
+
+ <form name="filesForm">
+ <div id="files">
+ <table width="100%">
+ <tbody>
+ <tr>
+ <th>Files</th>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <br/>
+ <input type="button" value="Delete" onclick="deleteFile()"/>
+ </form>
+
+ <br><br>
+
+ <form method="post" name="uploadFileForm" enctype='multipart/form-data' action='/files'>
+ <table width="100%">
+ <tr>
+ <th>Upload File</th>
+ </tr>
+ <tr>
+ <td>Upload a file to the server.</td>
+ </tr>
+ </table>
+ <br>
+ <table border="0">
+ <tr>
+ <td>File:</td>
+ <td><input type="file" name="file" size="50"/></td>
+ </tr>
+ </table>
+ <br/>
+ <input type="button" onClick="uploadFile()" value="Upload"/>
+ </form>
+
+</div>
+</body>
+</html>
diff --git a/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Home.jsp b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Home.jsp
index 27cb1665b6..52824e3cb9 100644
--- a/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Home.jsp
+++ b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Home.jsp
@@ -1,87 +1,103 @@
-<!--
-~ 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.
--->
-
-<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
- pageEncoding="ISO-8859-1" %>
-<%@ include file="header.jsp" %>
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
- <title>Simple jsp page</title>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <style type="text/css">
- <!--
- .style1 {
- font-family: Verdana, Arial, Helvetica, sans-serif
- }
-
- .style2 {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-weight: bold;
- font-size: large;
- color: #0000FF;
- }
-
- -->
- </style>
-</head>
-<body>
-<table width="398" border="0" align="center">
- <tr>
- <td width="392" align="center" valign="top">
- <div align="justify" class="style2">Tuscany SCA Domain Manager</div>
- </td>
- </tr>
-</table>
-<p>&nbsp;</p>
-
-<form id="form1" name="form1" method="post" action="<portlet:actionURL/>">
- <table width="200" border="0">
- <tr>
- <th scope="col"><input type="radio" name="task" value="list">List Domains</th>
- </tr>
-
- <tr>
- <td>
- <div align="center">
- <input type="submit" name="manageDomains" value="List"/>
- </div>
- </td>
- </tr>
- </table>
-</form>
-
-<p>&nbsp;</p>
-
-<p>&nbsp;</p>
-
-<p>&nbsp;</p>
-
-<p>&nbsp;</p>
-
-<p>&nbsp;</p>
-<table width="287" border="0" align="center">
- <tr>
- <td width="129"><span class="style1">About</span></td>
- <td width="130" class="style1"><a href="http://tuscany.apache.org/" target="_blank">Tuscany Home </a></td>
- </tr>
-</table>
-<p>&nbsp;</p>
-</body>
+<!--
+~ 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.
+-->
+
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1" %>
+<%@ include file="header.jsp" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <title>Simple jsp page</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <style type="text/css">
+ <!--
+ .style1 {
+ font-family: Verdana, Arial, Helvetica, sans-serif
+ }
+
+ .style2 {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-weight: bold;
+ font-size: large;
+ color: #0000FF;
+ }
+
+ -->
+ </style>
+</head>
+<body>
+<table width="398" border="0" align="center">
+ <tr>
+ <td width="392" align="center" valign="top">
+ <div align="justify" class="style2">Tuscany SCA Domain Manager</div>
+ </td>
+ </tr>
+
+</table>
+<p>&nbsp;</p>
+
+<form id="form1" name="form1" method="post" action="<portlet:actionURL/>">
+ <table width="200" border="0">
+ <tr>
+ <th scope="col"><input type="radio" name="task" value="workspace">Contributions</th>
+ <th/>
+ <th/>
+ <th/>
+ <th scope="col"><input type="radio" name="task" value="composites">Composites</th>
+ <th/>
+ <th/>
+ <th/>
+ <th scope="col"><input type="radio" name="task" value="cloud">Cloud</th>
+ <th/>
+ <th/>
+ <th/>
+ <th scope="col"><input type="radio" name="task" value="files">Files</th>
+ <th/>
+ <th/>
+ <th/>
+ </tr>
+
+ <tr>
+ <td>
+ <div align="center">
+ <input type="submit" name="manageDomains" value="GO"/>
+ </div>
+ </td>
+ </tr>
+ </table>
+</form>
+
+<p>&nbsp;</p>
+
+<p>&nbsp;</p>
+
+<p>&nbsp;</p>
+
+<p>&nbsp;</p>
+
+<p>&nbsp;</p>
+<table width="287" border="0" align="center">
+ <tr>
+ <td width="129"><span class="style1">About</span></td>
+ <td width="130" class="style1"><a href="http://tuscany.apache.org/" target="_blank">Tuscany Home </a></td>
+ </tr>
+</table>
+<p>&nbsp;</p>
+</body>
</html> \ No newline at end of file
diff --git a/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/ListDomains.jsp b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/ListDomains.jsp
deleted file mode 100644
index 980fc3d3ce..0000000000
--- a/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/ListDomains.jsp
+++ /dev/null
@@ -1,62 +0,0 @@
-<!--
-~ 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.
--->
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ include file="header.jsp" %>
-<html>
-<head>
- <title>Untitled Document</title>
- <style type="text/css">
- <!--
- .style1 {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 14px;
- }
-
- .style3 {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 24px;
- font-weight: bold;
- color: #0033FF;
- }
-
- -->
- </style>
-</head>
-<body><p class="style3">List of Domains</p>
-
-<form action="<portlet:actionURL/>" method="post" name="form1" class="style1" id="form1">
- <p>
- <input name="domainName" type="radio" value="Test Domain1"/>
- Test Domain1</p>
-
- <p>
- <input name="domainName" type="radio" value="Test Domain2"/>
- Test Domain2</p>
-
- <p>
- <input name="domainName" type="radio" value="Test Domain3"/>
- Test Domain3</p>
-
- <p>
- <input type="submit" name="Submit" value="Manage"/>
- </p>
-</form>
-<p class="style3">&nbsp;</p>
-</body>
-</html> \ No newline at end of file
diff --git a/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/ManageDomain.jsp b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/ManageDomain.jsp
deleted file mode 100644
index 9fe6f72175..0000000000
--- a/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/ManageDomain.jsp
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--
-~ 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.
--->
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ include file="header.jsp" %>
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
- <title>Untitled Document</title>
- <style type="text/css">
- <!--
- .style1 {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-weight: bold;
- color: #0000FF;
- }
-
- .style2 {
- font-family: Verdana, Arial, Helvetica, sans-serif
- }
-
- .style4 {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 14px;
- }
-
- -->
- </style>
-</head>
-<body><p class="style1">Managing the domain</p>
-<table width="460" border="0">
- <tr>
- <th width="244" scope="col"><span class="style2">Contributions</span></th>
- <th width="94" scope="col"><span class="style2">start</span></th>
- <th width="100" scope="col"><span class="style2">stop</span></th>
- </tr>
- <tr>
- <td>
- <div align="center"><span class="style4">test contribution1 </span></div>
- </td>
- <td>
- <div align="center"><span class="style4"> start </span></div>
- </td>
- <td>
- <div align="center"><span class="style4">stop</span></div>
- </td>
- </tr>
- <tr>
- <td><span class="style2"></span></td>
- <td><span class="style2"></span></td>
- <td><span class="style2"></span></td>
- </tr>
- <tr>
- <td><span class="style2"></span></td>
- <td><span class="style2"></span></td>
- <td><span class="style2"></span></td>
- </tr>
-</table>
-<p class="style1">&nbsp;</p></body>
-</html> \ No newline at end of file
diff --git a/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Workspace.html b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Workspace.html
new file mode 100644
index 0000000000..11e5c3cbb1
--- /dev/null
+++ b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/Workspace.html
@@ -0,0 +1,186 @@
+<!--
+ * 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.
+-->
+<html>
+<head>
+<title>SCA Domain - Contributions</title>
+
+<script type="text/javascript" src="workspace.js"></script>
+<script type="text/javascript" src="utils.js"></script>
+
+<script language="JavaScript">
+
+ //@Reference
+ var workspace = new Reference("workspace");
+
+ function getContributions() {
+ workspace.get("", getContributionsResponse);
+ }
+
+ function getContributionsResponse(feed) {
+ if (feed != null) {
+ var entries = feed.getElementsByTagName("entry");
+ var contributions = "";
+ contributions += '<table width="100%">';
+ contributions += '<tr><th>Contribution</th><th>Dependencies</td><th>Deployable Composites</th></tr>';
+ for (var i = 0; i < entries.length; i++) {
+ var id = entries[i].getElementsByTagName("id")[0].firstChild.nodeValue;
+ var location = entries[i].getElementsByTagName("link")[0].getAttribute("href");
+ var content = '';
+ if (entries[i].getElementsByTagName("content")[0].firstChild != null) {
+ content = entries[i].getElementsByTagName("content")[0].firstChild.nodeValue;
+ }
+
+ contributions += '<tr>';
+ contributions += '<td><input name="contributions" type="checkbox" value="' + id + '">' +
+ '<a href=\"' + location + '\">' + id + '</a></td>';
+
+ var dependencies = '';
+ var bs = content.indexOf('<span id="dependencies">');
+ if (bs != -1) {
+ var es = content.indexOf('</span>', bs);
+ dependencies = content.substring(bs, es + 7);
+ }
+
+ var deployables = '';
+ var bs = content.indexOf('<span id="deployables">');
+ if (bs != -1) {
+ var es = content.indexOf('</span>', bs);
+ deployables = content.substring(bs, es + 7);
+ }
+
+ var problems = "";
+ var bs = content.indexOf('<span id="problems" ');
+ if (bs != -1) {
+ var es = content.indexOf('</span>', bs);
+ if (dependencies.length != 0) {
+ problems = '<br>';
+ }
+ problems += content.substring(bs, es + 7);
+ }
+
+ contributions += '<td class=tdw>' + dependencies + problems + ' </td>';
+ contributions += '<td class=tdw>' + deployables + '</td>';
+ contributions += '</tr>';
+ }
+ contributions += '</table>';
+ document.getElementById("contributions").innerHTML = contributions;
+ }
+ }
+
+ function deleteContribution() {
+ var contributions = array(document.workspaceForm.contributions);
+ for (var i = 0; i < contributions.length; i++) {
+ if (contributions[i].checked) {
+ var id = contributions[i].value;
+ workspace.del(id, deleteContributionResponse);
+ }
+ }
+ }
+
+ function deleteContributionResponse() {
+ getContributions();
+ }
+
+ function addContribution() {
+ var id = document.newContributionForm.contributionID.value;
+ var location = document.newContributionForm.contributionLocation.value;
+ var entry = '<entry xmlns="http://www.w3.org/2005/Atom">' +
+ '<title>Contribution - ' + id + '</title>' +
+ '<id>' + id + '</id>' +
+ '<link href="' + location + '" />' +
+ '</entry>';
+ workspace.post(entry, addContributionResponse);
+ }
+
+ function addContributionResponse() {
+ document.newContributionForm.contributionID.value = "";
+ document.newContributionForm.contributionLocation.value = "";
+ getContributions();
+ }
+
+ function init() {
+ toolbar();
+ getContributions();
+ }
+
+</script>
+
+<link rel="stylesheet" type="text/css" href="/pages/manager.css">
+</head>
+
+<body onload="init()">
+<div id="toolbar"></div>
+
+<div id="workspace">
+ <br>
+ <span class=hd1>
+ SCA Domain<br><br>
+ <b>Contributions</b></span>
+ <br><br>
+ Here is the list of SCA contributions currently available in your SCA domain.
+ <br><br>
+
+ <form name="workspaceForm">
+ <div id="contributions">
+ <table width="100%">
+ <tbody>
+ <tr>
+ <th>Contribution</th>
+ <th>Dependencies</th>
+ <th>Deployable Composites</th>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <br/>
+ <input type="button" value="Delete" onclick="deleteContribution()"/>
+ </form>
+
+ <br><br>
+
+ <form name="newContributionForm">
+ <table width="100%">
+ <tr>
+ <th>Add Contribution</th>
+ </tr>
+ <tr>
+ <td>Add an SCA contribution containing your application artifacts to the SCA domain.</td>
+ </tr>
+ </table>
+ <br>
+ <table>
+ <tr>
+ <td>Contribution URI:</td>
+ <td><input type="text" name="contributionID" size="50"/></td>
+ </td>
+ <td>e.g. yourcontrib, http://yourcontrib</td>
+ </tr>
+ <tr>
+ <td>Location:</td>
+ <td><input type="text" name="contributionLocation" size="50"/></td>
+ </td>
+ <td>e.g. http://host/yourjar.jar, file:/yourdir, file:/yourjar.jar</td>
+ </tr>
+ </table>
+ <input type="button" onClick="addContribution()" value="Add"/>
+ </form>
+
+</div>
+</body>
+</html>
diff --git a/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/header.jsp b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/header.jsp
index 99687d12d2..b202ba1d57 100644
--- a/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/header.jsp
+++ b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/header.jsp
@@ -1,21 +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.
--->
-<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
-
-<portlet:defineObjects/>
+<!--
+~ 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.
+-->
+<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
+
+<portlet:defineObjects/>
diff --git a/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/manager.css b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/manager.css
new file mode 100644
index 0000000000..9049b727aa
--- /dev/null
+++ b/sandbox/thilina/geronimo_ACE/src/main/webapp/pages/manager.css
@@ -0,0 +1,158 @@
+/*
+ * 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.
+ */
+
+body {
+ white-space: nowrap
+}
+
+table {
+ border: 1px;
+ border-collapse: separate
+}
+
+th {
+ font-weight: bold;
+ white-space: nowrap;
+ background-color: #e5ecf9;
+ color: #598edd;
+ text-align: left;
+ padding-left: 2px;
+ padding-right: 20px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ vertical-align: text-top;
+ border-top: 1px;
+ border-bottom: 1px;
+ border-left: 0px;
+ border-right: 0px;
+ border-style: solid;
+ border-top-color: #a2bae7;
+ border-bottom-color: #d1d3d4
+}
+
+td {
+ padding-left: 2px;
+ padding-top: 2px;
+ padding-right: 20px;
+ white-space: nowrap;
+ vertical-align: text-top
+}
+
+input {
+ vertical-align: middle
+}
+
+a:link {
+ color: blue
+}
+
+a:visited {
+ color: blue
+}
+
+.tdw {
+ padding-left: 2px;
+ padding-top: 2px;
+ padding-right: 20px;
+ white-space: normal;
+ vertical-align: text-top
+}
+
+.hd1 {
+ font-size: 150%;
+ font-weight: bold
+}
+
+.tbar {
+ margin: 0px;
+ padding-top: 0px;
+ padding-left: 0px;
+ padding-right: 0px;
+ padding-bottom: 3px;
+ border-bottom: 1px solid #a2bae7
+}
+
+.ltbar {
+ padding-left: 0px;
+ padding-top: 0px;
+ padding-right: 20px;
+ white-space: nowrap;
+ vertical-align: top
+}
+
+.rtbar {
+ padding-left: 0px;
+ padding-right: 0px;
+ padding-top: 0px;
+ white-space: nowrap;
+ vertical-align: top;
+ text-align: right
+}
+
+.suggest {
+ background-color: #e5ecf9;
+ color: #598edd;
+ border-top: 1px;
+ border-bottom: 1px;
+ border-left: 1px;
+ border-right: 1px;
+ border-style: solid;
+ border-top-color: #a2bae7;
+ border-bottom-color: #d1d3d4;
+ border-left-color: #d1d3d4;
+ border-right-color: #d1d3d4;
+ position: absolute;
+ overflow: auto;
+ overflow-x: hidden;
+ cursor: default;
+ padding: 0px;
+ margin: 0px;
+}
+
+suggestTable {
+ border: 0px;
+ border-collapse: separate;
+ padding-left: 5px;
+ padding-right: 5px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ margin: 0px;
+}
+
+.suggestItem {
+ padding-left: 2px;
+ padding-top: 0px;
+ padding-bottom: 0px;
+ padding-right: 2px;
+ white-space: nowrap;
+ vertical-align: text-top;
+ background-color: #e5ecf9;
+ color: #598edd;
+}
+
+.suggestHilighted {
+ padding-left: 2px;
+ padding-top: 0px;
+ padding-bottom: 0px;
+ padding-right: 2px;
+ white-space: nowrap;
+ vertical-align: text-top;
+ background-color: #598edd;
+ color: #e5ecf9;
+}
diff --git a/sandbox/thilina/geronimo_ACE/src/test/java/org/apache/tuscany/geronimoace/AppTest.java b/sandbox/thilina/geronimo_ACE/src/test/java/org/apache/tuscany/geronimoace/AppTest.java
index fe66243097..d16f7ff55d 100644
--- a/sandbox/thilina/geronimo_ACE/src/test/java/org/apache/tuscany/geronimoace/AppTest.java
+++ b/sandbox/thilina/geronimo_ACE/src/test/java/org/apache/tuscany/geronimoace/AppTest.java
@@ -7,32 +7,28 @@ import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
-public class AppTest
- extends TestCase
-{
+public class AppTest
+ extends TestCase {
/**
* Create the test case
*
* @param testName name of the test case
*/
- public AppTest( String testName )
- {
- super( testName );
+ public AppTest(String testName) {
+ super(testName);
}
/**
* @return the suite of tests being tested
*/
- public static Test suite()
- {
- return new TestSuite( AppTest.class );
+ public static Test suite() {
+ return new TestSuite(AppTest.class);
}
/**
* Rigourous Test :-)
*/
- public void testApp()
- {
- assertTrue( true );
+ public void testApp() {
+ assertTrue(true);
}
}