Author: gnodet
Date: Thu Oct 26 03:00:43 2006
New Revision: 467942
URL: http://svn.apache.org/viewvc?view=rev&rev=467942
Log:
Add audit and view pages, allow display of endpoints' wsdls, fix actions ...
Added:
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/Auditor.java
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/controller/DotViewController.java
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/view/
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/view/DotView.java
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/audit.jsp
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/view.jsp
Modified:
incubator/servicemix/trunk/servicemix-web-console/pom.xml
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/EndpointFactoryBean.java
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Component.java
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Endpoint.java
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Registry.java
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/ServiceAssembly.java
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/ServiceUnit.java
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/SharedLibrary.java
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/applicationContext.xml
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/dispatcher-servlet.xml
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/web.xml
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/component.jsp
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/decorators/main.jsp
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/endpoint.jsp
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/endpoints.jsp
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-assemblies.jsp
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-assembly.jsp
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-units.jsp
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/shared-libraries.jsp
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/shared-library.jsp
Modified: incubator/servicemix/trunk/servicemix-web-console/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/pom.xml?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
--- incubator/servicemix/trunk/servicemix-web-console/pom.xml (original)
+++ incubator/servicemix/trunk/servicemix-web-console/pom.xml Thu Oct 26
03:00:43 2006
@@ -99,6 +99,13 @@
</configuration>
</plugin>
<plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <configuration>
+ <warSourceDirectory>src/main/webapp/</warSourceDirectory>
+ </configuration>
+ </plugin>
+ <plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
Added:
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/Auditor.java
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/Auditor.java?view=auto&rev=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/Auditor.java
(added)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/Auditor.java
Thu Oct 26 03:00:43 2006
@@ -0,0 +1,134 @@
+package org.apache.servicemix.web;
+
+import java.net.URI;
+import java.text.DateFormat;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import javax.jbi.messaging.MessageExchange;
+
+import org.apache.servicemix.JbiConstants;
+import org.apache.servicemix.jbi.audit.AuditorException;
+import org.apache.servicemix.jbi.audit.AuditorMBean;
+import org.apache.servicemix.jbi.messaging.MessageExchangeSupport;
+
+public class Auditor {
+
+ private AuditorMBean mbean;
+ private int page;
+
+ public Auditor(AuditorMBean mbean) {
+ this.mbean = mbean;
+ }
+
+ public int getPage() {
+ return page;
+ }
+
+ public void setPage(int page) {
+ this.page = page;
+ }
+
+ public int getCount() throws AuditorException {
+ int count = mbean.getExchangeCount();
+ System.err.println(count);
+ return count;
+ }
+
+ public List<ExchangeInfo> getExchanges() throws AuditorException {
+ MessageExchange[] exchanges = mbean.getExchanges(page * 10,
Math.min((page + 1) * 10, getCount()));
+ ExchangeInfo[] infos = prepare(exchanges);
+ return Arrays.asList(infos);
+ }
+
+ private ExchangeInfo[] prepare(MessageExchange[] exchanges) {
+ ExchangeInfo[] infos = new ExchangeInfo[exchanges.length];
+ for (int i = 0; i < infos.length; i++) {
+ infos[i] = new ExchangeInfo();
+ infos[i].id = exchanges[i].getExchangeId();
+ infos[i].mep = getMep(exchanges[i]);
+ infos[i].status = exchanges[i].getStatus().toString();
+ Object c =
exchanges[i].getProperty(JbiConstants.DATESTAMP_PROPERTY_NAME);
+ if (c instanceof Calendar) {
+ infos[i].date =
DateFormat.getDateTimeInstance().format(((Calendar) c).getTime());
+ } else if (c instanceof Date) {
+ infos[i].date = DateFormat.getDateTimeInstance().format((Date)
c);
+ }
+ }
+ return infos;
+ }
+
+ private String getMep(MessageExchange exchange) {
+ URI uri = exchange.getPattern();
+ if (MessageExchangeSupport.IN_ONLY.equals(uri)) {
+ return "In Only";
+ } else if (MessageExchangeSupport.IN_OPTIONAL_OUT.equals(uri)) {
+ return "In Opt Out";
+ } else if (MessageExchangeSupport.IN_OUT.equals(uri)) {
+ return "In Out";
+ } else if (MessageExchangeSupport.ROBUST_IN_ONLY.equals(uri)) {
+ return "Robust In Only";
+ } else {
+ return uri.toString();
+ }
+ }
+
+ public static class ExchangeInfo {
+ private String id;
+ private String date;
+ private String mep;
+ private String status;
+
+ /**
+ * @return Returns the dateStamp.
+ */
+ public String getDate() {
+ return date;
+ }
+ /**
+ * @param dateStamp The dateStamp to set.
+ */
+ public void setDate(String dateStamp) {
+ this.date = dateStamp;
+ }
+ /**
+ * @return Returns the status.
+ */
+ public String getStatus() {
+ return status;
+ }
+ /**
+ * @param status The status to set.
+ */
+ public void setStatus(String status) {
+ this.status = status;
+ }
+ /**
+ * @return Returns the id.
+ */
+ public String getId() {
+ return id;
+ }
+ /**
+ * @param id The id to set.
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+ /**
+ * @return Returns the mep.
+ */
+ public String getMep() {
+ return mep;
+ }
+ /**
+ * @param mep The mep to set.
+ */
+ public void setMep(String mep) {
+ this.mep = mep;
+ }
+ }
+
+}
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/EndpointFactoryBean.java
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/EndpointFactoryBean.java?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/EndpointFactoryBean.java
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/EndpointFactoryBean.java
Thu Oct 26 03:00:43 2006
@@ -16,9 +16,13 @@
*/
package org.apache.servicemix.web;
+import javax.management.MalformedObjectNameException;
+
import org.apache.servicemix.web.filter.Factory;
+import org.apache.servicemix.web.model.Endpoint;
import org.apache.servicemix.web.model.Registry;
import org.springframework.beans.factory.FactoryBean;
+import org.springframework.jmx.support.ObjectNameManager;
public class EndpointFactoryBean implements FactoryBean {
@@ -26,13 +30,24 @@
public Object getObject() throws Exception {
return new Factory() {
- private String name;
+ private String objectName;
+ private boolean showWsdl;
+ public Object getBean() {
+ try {
+ Endpoint ep =
registry.getEndpoint(ObjectNameManager.getInstance(objectName));
+ ep.setShowWsdl(showWsdl);
+ return ep;
+ } catch (MalformedObjectNameException e) {
+ return null;
+ }
+ }
@SuppressWarnings("unused")
- public void setName(String name) {
- this.name = name;
+ public void setObjectName(String objectName) {
+ this.objectName = objectName;
}
- public Object getBean() {
- return registry.getEndpoint(name);
+ @SuppressWarnings("unused")
+ public void setShowWsdl(boolean showWsdl) {
+ this.showWsdl = showWsdl;
}
};
}
Added:
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/controller/DotViewController.java
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/controller/DotViewController.java?view=auto&rev=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/controller/DotViewController.java
(added)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/controller/DotViewController.java
Thu Oct 26 03:00:43 2006
@@ -0,0 +1,72 @@
+/*
+ * 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.servicemix.web.controller;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.servicemix.jbi.view.DotViewServiceMBean;
+import org.apache.servicemix.web.view.DotView;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.mvc.Controller;
+
+public class DotViewController implements Controller {
+
+ public static final String TYPE_FLOW = "flow";
+ public static final String TYPE_ENDPOINTS = "endpoints";
+
+ private DotViewServiceMBean mbean;
+ private String type;
+ private DotView view;
+
+ public DotViewController(DotViewServiceMBean mbean) {
+ this.mbean = mbean;
+ }
+
+ public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
+ String dotSrc;
+ if (TYPE_FLOW.equals(getType())) {
+ dotSrc = mbean.createFlowGraph();
+ } else if (TYPE_ENDPOINTS.equals(getType())) {
+ dotSrc = mbean.createEndpointGraph();
+ } else {
+ throw new IllegalStateException("Unknown type: " + getType());
+ }
+ Map<String,Object> model = new HashMap<String,Object>();
+ model.put(view.getDotModelSource(), dotSrc);
+ return new ModelAndView(getView(), model);
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public DotView getView() {
+ return view;
+ }
+
+ public void setView(DotView view) {
+ this.view = view;
+ }
+}
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Component.java
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Component.java?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Component.java
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Component.java
Thu Oct 26 03:00:43 2006
@@ -39,7 +39,7 @@
}
public String getName() {
- return mbean.getName();
+ return objectName.getKeyProperty("Name");
}
public String getType() {
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Endpoint.java
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Endpoint.java?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Endpoint.java
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Endpoint.java
Thu Oct 26 03:00:43 2006
@@ -16,7 +16,12 @@
*/
package org.apache.servicemix.web.model;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
import javax.management.ObjectName;
+import javax.xml.namespace.QName;
import org.apache.servicemix.jbi.framework.EndpointMBean;
@@ -27,6 +32,8 @@
private EndpointMBean mbean;
private ObjectName objectName;
+
+ private boolean showWsdl;
public Endpoint(Registry registry, EndpointMBean mbean, ObjectName
objectName) {
this.registry = registry;
@@ -60,6 +67,27 @@
public int hashCode() {
return objectName.hashCode();
+ }
+
+ public boolean isShowWsdl() {
+ return showWsdl;
+ }
+
+ public void setShowWsdl(boolean showWsdl) {
+ this.showWsdl = showWsdl;
+ }
+
+ public String getWsdl() {
+ return mbean.loadWSDL().replace("<", "<");
+ }
+
+ public List<QName> getInterfaces() {
+ QName[] names = mbean.getInterfaces();
+ if (names != null) {
+ return Arrays.asList(names);
+ } else {
+ return Collections.emptyList();
+ }
}
}
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Registry.java
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Registry.java?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Registry.java
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/Registry.java
Thu Oct 26 03:00:43 2006
@@ -77,9 +77,9 @@
return endpoints;
}
- public Endpoint getEndpoint(String name) {
+ public Endpoint getEndpoint(ObjectName objectName) {
for (Endpoint endpoint : getEndpoints()) {
- if (endpoint.getName().equals(name)) {
+ if (endpoint.getObjectName().equals(objectName)) {
return endpoint;
}
}
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/ServiceAssembly.java
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/ServiceAssembly.java?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/ServiceAssembly.java
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/ServiceAssembly.java
Thu Oct 26 03:00:43 2006
@@ -39,7 +39,7 @@
}
public String getName() {
- return mbean.getName();
+ return objectName.getKeyProperty("Name");
}
public String getDescription() {
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/ServiceUnit.java
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/ServiceUnit.java?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/ServiceUnit.java
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/ServiceUnit.java
Thu Oct 26 03:00:43 2006
@@ -39,7 +39,7 @@
}
public String getName() {
- return mbean.getName();
+ return objectName.getKeyProperty("Name");
}
public Component getComponent() {
@@ -48,6 +48,10 @@
public ServiceAssembly getServiceAssembly() {
return registry.getServiceAssembly(mbean.getServiceAssembly());
+ }
+
+ public String getStatus() {
+ return mbean.getCurrentState();
}
public boolean equals(Object o) {
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/SharedLibrary.java
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/SharedLibrary.java?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/SharedLibrary.java
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/model/SharedLibrary.java
Thu Oct 26 03:00:43 2006
@@ -39,7 +39,7 @@
}
public String getName() {
- return mbean.getName();
+ return objectName.getKeyProperty("Name");
}
public String getDescription() {
Added:
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/view/DotView.java
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/view/DotView.java?view=auto&rev=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/view/DotView.java
(added)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/java/org/apache/servicemix/web/view/DotView.java
Thu Oct 26 03:00:43 2006
@@ -0,0 +1,122 @@
+/*
+ * 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.servicemix.web.view;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileWriter;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.servicemix.jbi.util.FileUtil;
+import org.springframework.web.servlet.view.AbstractView;
+
+public class DotView extends AbstractView {
+
+ public static final String DEFAULT_DOT_PATH = "dot";
+ public static final String DEFAULT_DOT_FORMAT = "svg";
+ public static final String MODEL_SOURCE = "dotSource";
+ public static final String MODEL_FORMAT = "dotFormat";
+
+ private String dotPath = DEFAULT_DOT_PATH;
+ private String dotModelSource = MODEL_SOURCE;
+ private String dotFormat = DEFAULT_DOT_FORMAT;
+
+ private static final Map<String, String> FORMATS;
+
+ static {
+ FORMATS = new HashMap<String, String>();
+ FORMATS.put("svg", "image/svg+xml");
+ FORMATS.put("gif", "image/gif");
+ FORMATS.put("jpg", "image/jpeg");
+ }
+
+ @Override
+ protected void renderMergedOutputModel(Map model, HttpServletRequest
request, HttpServletResponse response) throws Exception {
+ Object o = model.get(getDotModelSource());
+ if (o == null) {
+ throw new IllegalStateException("Dot model source not found in '"
+ getDotModelSource() + "'");
+ }
+ if (FORMATS.get(getDotFormat()) == null) {
+ throw new IllegalStateException("Unknown format: '" +
getDotFormat() + "'");
+ }
+ File dotSrc = null;
+ File dotImg = null;
+ try {
+ dotSrc = File.createTempFile("smx_", ".dot");
+ FileWriter w = new FileWriter(dotSrc);
+ w.write(o.toString());
+ w.close();
+ dotImg = File.createTempFile("smx_", ".dot." + getDotFormat());
+
+ String cmd = getDotPath() + " -T" + getDotFormat() + " \"" +
dotSrc.getCanonicalPath() + "\" -o\"" + dotImg.getAbsolutePath() + "\"";
+ System.err.println("Executing: " + cmd);
+ Process p = Runtime.getRuntime().exec(cmd);
+ p.waitFor();
+ FileUtil.copyInputStream(p.getErrorStream(), System.err);
+ FileUtil.copyInputStream(p.getInputStream(), System.out);
+
+ InputStream is = new FileInputStream(dotImg);
+ if (is.available() == 0) {
+ throw new Exception("Error while rendering dot file");
+ }
+ response.setContentType(getContentType());
+ response.setContentLength(is.available());
+ FileUtil.copyInputStream(is, response.getOutputStream());
+ } finally {
+ if (dotSrc != null) {
+ dotSrc.delete();
+ }
+ if (dotImg != null) {
+ dotImg.delete();
+ }
+ }
+ }
+
+ public String getContentType() {
+ return FORMATS.get(getDotFormat());
+ }
+
+ public String getDotPath() {
+ return dotPath;
+ }
+
+ public void setDotPath(String dotPath) {
+ this.dotPath = dotPath;
+ }
+
+ public String getDotFormat() {
+ return dotFormat;
+ }
+
+ public void setDotFormat(String dotFormat) {
+ this.dotFormat = dotFormat;
+ }
+
+ public String getDotModelSource() {
+ return dotModelSource;
+ }
+
+ public void setDotModelSource(String dotModelSource) {
+ this.dotModelSource = dotModelSource;
+ }
+
+}
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/applicationContext.xml
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/applicationContext.xml?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/applicationContext.xml
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/applicationContext.xml
Thu Oct 26 03:00:43 2006
@@ -36,6 +36,13 @@
</property>
</bean>
+ <bean id="jdbcAuditorMBean"
class="org.springframework.jmx.access.MBeanProxyFactoryBean">
+ <property name="objectName"
value="org.apache.servicemix:ContainerName=ServiceMix,Type=SystemService,Name=JdbcAuditor"
/>
+ <property name="proxyInterface"
value="org.apache.servicemix.jbi.audit.AuditorMBean" />
+ <property name="server" ref="server"/>
+ <property name="useStrictCasing" value="false" />
+ </bean>
+
<bean id="adminCommandsServiceMBean"
class="org.springframework.jmx.access.MBeanProxyFactoryBean">
<property name="objectName"
value="org.apache.servicemix:ContainerName=ServiceMix,Type=SystemService,Name=AdminCommandsService"
/>
<property name="proxyInterface"
value="org.apache.servicemix.jbi.framework.AdminCommandsServiceMBean" />
@@ -50,6 +57,13 @@
<property name="useStrictCasing" value="false" />
</bean>
+ <bean id="dotViewServiceMBean"
class="org.springframework.jmx.access.MBeanProxyFactoryBean">
+ <property name="objectName"
value="org.apache.servicemix:ContainerName=ServiceMix,Type=SystemService,Name=DotViewService"
/>
+ <property name="proxyInterface"
value="org.apache.servicemix.jbi.view.DotViewServiceMBean" />
+ <property name="server" ref="server"/>
+ <property name="useStrictCasing" value="false" />
+ </bean>
+
<bean id="proxyManager" class="org.apache.servicemix.web.model.ProxyManager">
<constructor-arg ref="server" />
</bean>
@@ -59,6 +73,9 @@
<constructor-arg ref="registryMBean" />
</bean>
+ <bean id="auditor" class="org.apache.servicemix.web.Auditor"
singleton="false">
+ <constructor-arg ref="jdbcAuditorMBean" />
+ </bean>
<bean id="components" factory-bean="registry" factory-method="getComponents"
singleton="false" />
<bean id="endpoints" factory-bean="registry" factory-method="getEndpoints"
singleton="false" />
<bean id="serviceAssemblies" factory-bean="registry"
factory-method="getServiceAssemblies" singleton="false" />
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/dispatcher-servlet.xml
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/dispatcher-servlet.xml?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/dispatcher-servlet.xml
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/dispatcher-servlet.xml
Thu Oct 26 03:00:43 2006
@@ -78,6 +78,18 @@
<property name="view" value="redirect:/service-assemblies.jsp" />
</bean>
+ <bean name="/dot-flow.svg"
class="org.apache.servicemix.web.controller.DotViewController"
singleton="false">
+ <constructor-arg ref="dotViewServiceMBean" />
+ <property name="type" value="flow" />
+ <property name="view" ref="dotView" />
+ </bean>
+
+ <bean name="/dot-endpoints.svg"
class="org.apache.servicemix.web.controller.DotViewController"
singleton="false">
+ <constructor-arg ref="dotViewServiceMBean" />
+ <property name="type" value="endpoints" />
+ <property name="view" ref="dotView" />
+ </bean>
+
<!--
- This bean resolves specific types of exception to corresponding error
views.
- The default behaviour of DispatcherServlet is to propagate all
exceptions to the
@@ -87,6 +99,10 @@
<property name="exceptionMappings">
<props><!-- <prop
key="org.springframework.dao.DataAccessException">dataAccessFailure</prop>
--></props>
</property>
+ </bean>
+
+ <bean id="dotView" class="org.apache.servicemix.web.view.DotView">
+ <property name="dotFormat" value="svg" />
</bean>
</beans>
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/web.xml
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/web.xml?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/web.xml
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/WEB-INF/web.xml
Thu Oct 26 03:00:43 2006
@@ -77,6 +77,7 @@
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.action</url-pattern>
+ <url-pattern>*.svg</url-pattern>
</servlet-mapping>
<welcome-file-list>
Added:
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/audit.jsp
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/audit.jsp?view=auto&rev=467942
==============================================================================
--- incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/audit.jsp
(added)
+++ incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/audit.jsp
Thu Oct 26 03:00:43 2006
@@ -0,0 +1,65 @@
+<%--
+ 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>Audit</title>
+</head>
+<body>
+
+<h2>Audit</h2>
+
+<table class="autostripe">
+ <thead>
+ <tr>
+ <th>Id</th>
+ <th>Date</th>
+ <th>Status</th>
+ <th>MEP</th>
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="exchange" items="${requestContext.auditor.exchanges}">
+ <tr>
+ <td>${exchange.id}</td>
+ <td>${exchange.date}</td>
+ <td>${exchange.status}</td>
+ <td>${exchange.mep}</td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ <tfooter>
+ <tr>
+ <td colspan="4">
+ <c:forEach var="i" begin="0" end="${requestContext.auditor.count /
10}">
+ <c:choose>
+ <c:when test="${i == requestContext.auditor.page}">
+ ${i}
+ </c:when>
+ <c:otherwise>
+ <a href="audit.jsp?page=${i}">${i}</a>
+ </c:otherwise>
+ </c:choose>
+
+ </c:forEach>
+ </td>
+ </tr>
+ </tfooter>
+</table>
+
+</body>
+</html>
+
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/component.jsp
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/component.jsp?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/component.jsp
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/component.jsp
Thu Oct 26 03:00:43 2006
@@ -41,14 +41,20 @@
<tr>
<th>Action</th>
<td>
- <!--
- <form method="post" action=${componentAction}>
- <input type="hidden" name="componentObjectName"
value="${model.component.objectName}" />
- <input type="hidden" name="componentName"
value="${model.component.name}" />
- <input type="hidden" name="command" value="executecomponentaction"
/>
- <web:actions actions="${model.component.actions}"
bundle="jbicomponents" />
- </form>
- -->
+ <table class="align"><tr>
+ <c:if test="${requestContext.component.status != 'Started'}">
+ <td class="align"><form method="post"
action="startComponent.action?view=redirect:/component.jsp?name=${requestContext.component.name}"><input
type="hidden" name="name" value="${requestContext.component.name}"/><input
type="submit" value="Start"/></form></td>
+ </c:if>
+ <c:if test="${requestContext.component.status == 'Started'}">
+ <td class="align"><form method="post"
action="stopComponent.action?view=redirect:/component.jsp?name=${requestContext.component.name}"><input
type="hidden" name="name" value="${requestContext.component.name}"/><input
type="submit" value="Stop"/></form></td>
+ </c:if>
+ <c:if test="${requestContext.component.status == 'Stopped'}">
+ <td class="align"><form method="post"
action="shutdownComponent.action?view=redirect:/component.jsp?name=${requestContext.component.name}"><input
type="hidden" name="name" value="${requestContext.component.name}"/><input
type="submit" value="Shutdown"/></form></td>
+ </c:if>
+ <c:if test="${requestContext.component.status == 'Shutdown'}">
+ <td class="align"><form method="post"
action="uninstallComponent.action?view=redirect:/component.jsp?name=${requestContext.component.name}"><input
type="hidden" name="name" value="${requestContext.component.name}"/><input
type="submit" value="Uninstall"/></form></td>
+ </c:if>
+ </tr></table>
</td>
</tr>
</tbody>
@@ -91,7 +97,7 @@
<c:forEach items="${requestContext.component.endpoints}" var="row">
<tr>
<td>
- <a href="endpoint.jsp?name=${row.name}">${row.name}</a>
+ <a href="endpoint.jsp?objectName=${row.objectName}">${row.name}</a>
</td>
</tr>
</c:forEach>
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/decorators/main.jsp
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/decorators/main.jsp?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/decorators/main.jsp
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/decorators/main.jsp
Thu Oct 26 03:00:43 2006
@@ -58,14 +58,16 @@
<div id="menu-page">
<ul>
<li><a href="<c:url value='/index.jsp'/>"
title="Home<"><span>Home</span></a></li>
- <li><a href="<c:url value='/services.jsp'/>"
title="Services"><span>Services</span></a></li>
<li><a href="<c:url value='/components.jsp'/>"
title="Components"><span>Components</span></a></li>
<li><a href="<c:url value='/shared-libraries.jsp'/>"
title="Shared Libraries"><span>Shared Libraries</span></a></li>
<li><a href="<c:url value='/service-assemblies.jsp'/>"
title="Service Assemblies"><span>Service Assemblies</span></a></li>
<li><a href="<c:url value='/service-units.jsp'/>" title="Service
Units"><span>Service Units</span></a></li>
<li><a href="<c:url value='/endpoints.jsp'/>"
title="Endpoints"><span>Endpoints</span></a></li>
<li><a href="<c:url value='/audit.jsp'/>"
title="Audit"><span>Audit</span></a></li>
+ <li><a href="<c:url value='/view.jsp'/>"
title="View"><span>View</span></a></li>
</ul>
+ <br/>
+ <br/>
<br/>
<br/>
<br/>
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/endpoint.jsp
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/endpoint.jsp?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/endpoint.jsp
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/endpoint.jsp
Thu Oct 26 03:00:43 2006
@@ -27,19 +27,39 @@
<table>
<tbody>
<tr>
- <td>Name</td>
+ <th>Name</td>
<td><div class="field">${requestContext.endpoint.name}</div></td>
</tr>
<tr>
- <td>Type</td>
+ <th>Type</td>
<td><div class="field">${requestContext.endpoint.type}</div></td>
</tr>
<tr>
- <td>Component</td>
+ <th>Component</td>
<td><div class="field"><a
href="component.jsp?name=${requestContext.endpoint.component.name}">${requestContext.endpoint.component.name}</a></div></td>
</tr>
+ <tr>
+ <th>Interfaces</th>
+ <td><div class="field">
+ <c:forEach items="${requestContext.endpoint.interfaces}" var="row">
+ ${row}
+ </c:forEach>
+ </div></td>
+ </tr>
</tbody>
</table>
+</fieldset>
+
+<fieldset>
+ <legend> WSDL
+ <small>
+ <c:if test="${requestContext.endpoint.showWsdl}">(<a
href="endpoint.jsp?objectName=${requestContext.endpoint.objectName}&showWsdl=false">hide</a>)</c:if>
+ <c:if test="${!requestContext.endpoint.showWsdl}">(<a
href="endpoint.jsp?objectName=${requestContext.endpoint.objectName}&showWsdl=true">show</a>)</c:if>
+ </small>
+ </legend>
+ <c:if test="${requestContext.endpoint.showWsdl}">
+ <div id="error" style="height:
25em;"><pre>${requestContext.endpoint.wsdl}</pre></div>
+ </c:if>
</fieldset>
</body>
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/endpoints.jsp
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/endpoints.jsp?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/endpoints.jsp
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/endpoints.jsp
Thu Oct 26 03:00:43 2006
@@ -32,7 +32,7 @@
<tbody>
<c:forEach items="${requestContext.endpoints}" var="row">
<tr>
- <td><a href="endpoint.jsp?name=${row.name}">${row.name}</a></td>
+ <td><a
href="endpoint.jsp?objectName=${row.objectName}">${row.name}</a></td>
<td>${row.type}</td>
<td><a
href="component.jsp?name=${row.component.name}">${row.component.name}</a></td>
</tr>
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-assemblies.jsp
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-assemblies.jsp?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-assemblies.jsp
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-assemblies.jsp
Thu Oct 26 03:00:43 2006
@@ -39,7 +39,7 @@
<tbody>
<c:forEach items="${requestContext.serviceAssemblies}" var="row">
<tr>
- <td><a
href="service-assembly.jsp?objectName=${row.objectName}">${row.name}</a></td>
+ <td><a
href="service-assembly.jsp?name=${row.name}">${row.name}</a></td>
<td>${row.status}</td>
<td>
<table class="align"><tr>
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-assembly.jsp
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-assembly.jsp?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-assembly.jsp
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-assembly.jsp
Thu Oct 26 03:00:43 2006
@@ -38,6 +38,25 @@
<th>Status</th>
<td><div
class="field">${requestContext.serviceAssembly.status}</div></td>
</tr>
+ <tr>
+ <th>Actions</th>
+ <td>
+ <table class="align"><tr>
+ <c:if test="${requestContext.serviceAssembly.status != 'Started'}">
+ <td class="align"><form method="post"
action="startServiceAssembly.action?view=redirect:/service-assembly.jsp?name=${requestContext.serviceAssembly.name}"><input
type="hidden" name="name"
value="${requestContext.serviceAssembly.name}"/><input type="submit"
value="Start"/></form></td>
+ </c:if>
+ <c:if test="${requestContext.serviceAssembly.status == 'Started'}">
+ <td class="align"><form method="post"
action="stopServiceAssembly.action?view=redirect:/service-assembly.jsp?name=${requestContext.serviceAssembly.name}"><input
type="hidden" name="name"
value="${requestContext.serviceAssembly.name}"/><input type="submit"
value="Stop"/></form></td>
+ </c:if>
+ <c:if test="${requestContext.serviceAssembly.status == 'Stopped'}">
+ <td class="align"><form method="post"
action="shutdownServiceAssembly.action?view=redirect:/service-assembly.jsp?name=${requestContext.serviceAssembly.name}"><input
type="hidden" name="name"
value="${requestContext.serviceAssembly.name}"/><input type="submit"
value="Shutdown"/></form></td>
+ </c:if>
+ <c:if test="${requestContext.serviceAssembly.status == 'Shutdown'}">
+ <td class="align"><form method="post"
action="uninstallServiceAssembly.action?view=redirect:/service-assembly.jsp?name=${requestContext.serviceAssembly.name}"><input
type="hidden" name="name"
value="${requestContext.serviceAssembly.name}"/><input type="submit"
value="Uninstall"/></form></td>
+ </c:if>
+ </tr></table>
+ </td>
+ </tr>
</tbody>
</table>
</fieldset>
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-units.jsp
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-units.jsp?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-units.jsp
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/service-units.jsp
Thu Oct 26 03:00:43 2006
@@ -25,14 +25,18 @@
<thead>
<tr>
<th>Name</th>
+ <th>Status</th>
<th>Component</th>
+ <th>Service Assembly</th>
</tr>
</thead>
<tbody>
<c:forEach items="${requestContext.serviceUnits}" var="row">
<tr>
- <td><a
href="service-unit.jsp?objectName=${row.objectName}">${row.name}</a></td>
- <td><a
href="component.jsp?objectName=${row.component.objectName}">${row.component.name}</a></td>
+ <td><a href="service-unit.jsp?name=${row.name}">${row.name}</a></td>
+ <td>${row.status}</td>
+ <td><a
href="component.jsp?name=${row.component.name}">${row.component.name}</a></td>
+ <td><a
href="service-assembly.jsp?name=${row.serviceAssembly.name}">${row.serviceAssembly.name}</a></td>
</tr>
</c:forEach>
</tbody>
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/shared-libraries.jsp
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/shared-libraries.jsp?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/shared-libraries.jsp
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/shared-libraries.jsp
Thu Oct 26 03:00:43 2006
@@ -32,12 +32,14 @@
<thead>
<tr>
<th>Name</th>
+ <th>Version</th>
</tr>
</thead>
<tbody>
<c:forEach items="${requestContext.sharedLibraries}" var="row">
<tr>
<td><a href="shared-library.jsp?name=${row.name}">${row.name}</a></td>
+ <td>${row.version}</td>
</tr>
</c:forEach>
</tbody>
Modified:
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/shared-library.jsp
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/shared-library.jsp?view=diff&rev=467942&r1=467941&r2=467942
==============================================================================
---
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/shared-library.jsp
(original)
+++
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/shared-library.jsp
Thu Oct 26 03:00:43 2006
@@ -36,7 +36,7 @@
</tr>
<tr>
<th>Version</th>
- <td><div class="field">TODO</div></td>
+ <td><div
class="field">${requestContext.sharedLibrary.version}</div></td>
</tr>
</tbody>
</table>
Added:
incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/view.jsp
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/view.jsp?view=auto&rev=467942
==============================================================================
--- incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/view.jsp
(added)
+++ incubator/servicemix/trunk/servicemix-web-console/src/main/webapp/view.jsp
Thu Oct 26 03:00:43 2006
@@ -0,0 +1,53 @@
+<%--
+ 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>View</title>
+</head>
+<body>
+
+<h2>View</h2>
+
+<fieldset style="height:15em">
+ <legend>Endpoints <small>(<a href="dot-endpoints.svg">full
page</a>)</small></legend>
+ <object width="100%" height="90%" type="image/svg+xml"
codetype="image/svg+xml" data="dot-endpoints.svg">
+ <span style="background-color:#FFFF20;padding-top:1pt;padding-bottom:1pt;">
+ This browser can't display the SVG file <a
href="dot-endpoints.svg">dot-endpoints.svg</a>.
+ <br/>
+ Please use newer versions of <a
href="http://www.mozilla.com/firefox/">Firefox</a> or install
+ the <a href="http://www.adobe.com/svg/viewer/install/main.html">Adobe
SVG Viewer</a> for your
+ browser.
+ </span>
+ </object>
+</fieldset>
+
+<fieldset style="height:15em">
+ <legend>Flow <small>(<a href="dot-flow.svg">full
page</a>)</small></legend>
+ <object width="100%" height="90%" type="image/svg+xml"
codetype="image/svg+xml" data="dot-flow.svg">
+ <span style="background-color:#FFFF20;padding-top:1pt;padding-bottom:1pt;">
+ This browser can't display the SVG file <a
href="dot-flow.svg">dot-flow.svg</a>.
+ <br/>
+ Please use newer versions of <a
href="http://www.mozilla.com/firefox/">Firefox</a> or install
+ the <a href="http://www.adobe.com/svg/viewer/install/main.html">Adobe
SVG Viewer</a> for your
+ browser.
+ </span>
+ </object>
+</fieldset>
+
+</body>
+</html>
+