Skip to content
Snippets Groups Projects
Commit 0fc16b9a authored by Bjoern Weissenfels's avatar Bjoern Weissenfels
Browse files

added layouts and modified style

parent 5d02fdb9
No related branches found
No related tags found
No related merge requests found
Showing
with 599 additions and 98 deletions
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/java-7-openjdk-i386">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="owner.project.facets" value="java"/>
</attributes>
......
/* This file is automatically managed and will be overwritten from time to time. */
/* Do not manually edit this file. */
/* Import and include this mixin into your project theme to include the addon themes */
@mixin addons {
}
kieker.live.demo.vaadin/WebContent/VAADIN/themes/kieker_live_demo_vaadin/favicon.ico

1.12 KiB

/* Import the reindeer theme.*/
/* This only allows us to use the mixins defined in it and does not add any styles by itself. */
@import "../reindeer/reindeer.scss";
/* This contains all of your theme.*/
/* If somebody wants to extend the theme she will include this mixin. */
@mixin kieker_live_demo_vaadin {
/* Include all the styles from the reindeer theme */
@include reindeer;
/* Insert your theme rules here */
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta charset="UTF-8"/>
<title>Kieker Live Demo</title>
<link rel="stylesheet" type="text/css" media="all" href="../css/style.css" />
<link rel="shortcut icon" type="image/x-icon" href="../img/favicon.ico" />
</head>
<body>
<div class="page">
<div>
<img src="../img/header_image_small.jpg" width="960" height="125" border="0" usemap="#kiekermenumap" />
<map name="kiekermenumap">
<area shape="rect" coords="70,3,350,93" href="http://kieker-monitoring.net" alt="home" title="home" />
</map>
</div>
<div class="menu-header">
<ul class="menu">
<li class="menu-item current-menu-item"><a href="#!main">Main Menu</a></li>
<li class="menu-item"><a href="#!recordList">Record List</a></li>
<li class="menu-item"><a href="#!methodResponsetime">Method Response Times</a></li>
<li class="menu-item"><a href="#!main">System Model</a></li>
<li class="menu-item"><a href="#!main">CPU and MemSwap</a></li>
</ul>
</div>
<div location="main">
</div>
<div id="footer">
<div id="footernav" class="nav">
<ul class="menu">
<li class="menu-item"><a href="http://kieker-monitoring.net/contact/">Contact</a></li>
<li class="menu-item"><a href="http://kieker-monitoring.net/legal-notice/">Legal Notice</a></li>
<li class="menu-item" style="font-size:x-small">v12012014</li>
</ul>
</div>
</div>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<body>
<div class="page">
<div>
<img src="../img/header_image_small.jpg" width="960" height="125" border="0" usemap="#kiekermenumap" />
<map name="kiekermenumap">
<area shape="rect" coords="70,3,350,93" href="http://kieker-monitoring.net" alt="home" title="home" />
</map>
</div>
<div class="menu-header">
<ul class="menu">
<li class="menu-item"><a href="#!main">Main Menu</a></li>
<li class="menu-item"><a href="#!recordList">Record List</a></li>
<li class="menu-item current-menu-item"><a href="#!methodResponsetime">Method Response Times</a></li>
<li class="menu-item"><a href="#!main">System Model</a></li>
<li class="menu-item"><a href="#!main">CPU and MemSwap</a></li>
</ul>
</div>
<div location="main"></div>
<div id="footer">
<div id="footernav" class="nav">
<ul class="menu">
<li class="menu-item"><a href="http://kieker-monitoring.net/contact/">Contact</a></li>
<li class="menu-item"><a href="http://kieker-monitoring.net/legal-notice/">Legal Notice</a></li>
</ul>
</div>
</div>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<body>
<div class="page">
<div>
<img src="../img/header_image_small.jpg" width="960" height="125" border="0" usemap="#kiekermenumap" />
<map name="kiekermenumap">
<area shape="rect" coords="70,3,350,93" href="http://kieker-monitoring.net" alt="home" title="home" />
</map>
</div>
<div class="menu-header">
<ul class="menu">
<li class="menu-item"><a href="#!main">Main Menu</a></li>
<li class="menu-item current-menu-item"><a href="#!recordList">Record List</a></li>
<li class="menu-item"><a href="#!methodResponsetime">Method Response Times</a></li>
<li class="menu-item"><a href="#!main">System Model</a></li>
<li class="menu-item"><a href="#!main">CPU and MemSwap</a></li>
</ul>
</div>
<div location="main"></div>
<div id="footer">
<div id="footernav" class="nav">
<ul class="menu">
<li class="menu-item"><a href="http://kieker-monitoring.net/contact/">Contact</a></li>
<li class="menu-item"><a href="http://kieker-monitoring.net/legal-notice/">Legal Notice</a></li>
</ul>
</div>
</div>
</div>
</body>
</html>
\ No newline at end of file
/*
Theme Name: Kieker Theme
*/
@import "../reindeer/legacy-styles.css";
.embedded {
border:2px solid #3257A7;
border-radius:20px;
width:150px;
height:150px;
margin:0.2cm 2cm 0.5cm 2cm;
color:black;
}
.centered {
text-align:center;
}
.p {
margin:0.2cm 2cm 1cm 2cm;
text-align:justify;
color:black
}
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
border: 0;
font-family: inherit;
font-size: 100%;
font-style: inherit;
font-weight: inherit;
margin: 0;
outline: 0;
padding: 0;
vertical-align: baseline;
}
:focus {/* remember to define focus styles! */
outline: 0;
}
table {/* tables still need 'cellspacing="0"' in the markup */
border-collapse: separate;
border-spacing: 0;
}
caption, th, td {
font-weight: normal;
text-align: left;
}
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
/* =Global
----------------------------------------------- */
body, input, textarea {
color: #373737;
font: 15px "Helvetica Neue", Helvetica, Arial, sans-serif;
font-weight: 300;
line-height: 1.625;
}
body {
background: #e2e2e2;
}
#page {
background: #fff;
}
/* Headings */
h1,h2,h3,h4,h5,h6 {
clear: both;
}
hr {
background-color: #ccc;
border: 0;
height: 1px;
margin-bottom: 1.625em;
}
/* Text elements */
p {
margin-bottom: 1.625em;
}
strong {
font-weight: bold;
}
/* Links */
a {
color: #2456A1;
text-decoration: none;
}
a:link,
a:focus,
a:hover,
a:active {
text-decoration: underline;
color: #000000;
}
div.page {
margin: 0px auto;
padding: 0px;
max-width: 960px;
min-width: 960px;
background: none repeat scroll 0% 0% rgb(255, 255, 255);
position: relative;
}
div#main, div#mainnav {
margin: 0 2em 0 2em;
}
div#footer {
padding: 0;
margin: 2em 0px 1em 0px;
clear: both;
clear: both;
height: 30px;
border-top: 1px solid rgb(221, 221, 221);
}
#footernav {
text-align: center;
}
#footernav ul {
display: inline;
font: 300 15px/1.625 "Helvetica Neue",Helvetica,Arial,sans-serif;
}
#footernav li {
border: 0px none;
}
#footernav li a {
vertical-align: middle;
font-weight: bold;
text-decoration: none;
border: 0px none;
color: #2456A1;
font-size: 13px;
}
#footernav a:link, #footernav a:visited, #footernav a:active, #footernav a:hover {
color: #2456A1;
}
#footernav a:active, #footernav a:hover {
text-decoration: underline;
background-color: inherit;
}
/* Navigation */
.nav h2, .nav hr { display: none }
.nav ul {
font-size: 10px;
list-style: none;
margin: 0;
padding: 0;
text-align: right;
}
.nav li {
border-right: 1px solid #d7d7d7;
display: inline-block;
padding: 0 .75em;
white-space: nowrap;
/* IE7 hack to make inline-block effective on block element */
zoom: 1;
*display: inline;
}
.nav li.last { border-right: none }
/* Hide some stuff */
#site-generator, footer.entry-meta {
display: none;
}
#branding {
border-top: none;
}
.hentry, .no-results {
border-bottom-width: 0px;
}
.ddsg-wrapper div {
display: none;
}
/* page layout is usually the page-template-sidebar-page-php layout*/
.page-template-default .commentlist {
width: 100%;
}
.page-template-default .commentlist > li.comment,
.page-template-default.commentlist .pingback {
margin-left: 102px;
width: auto;
}
.page-template-default #respond {
width: auto;
}
/* reduce font-size, change color and spacing */
body, input, textarea {
font-size: 13px;
}
.entry-title, .entry-title a {
color: #2456a1;
font-size: 20px;
padding-top: 0px;
}
#main {
padding-top: 0px;
color: #000000;
text-align:justify;
}
#page {
margin-top: 0;
margin-bottom: 0;
max-width: 960px;
min-width: 960px;
}
.entry-content img, .comment-content img {
max-width: 100%;
}
.entry-content p, .entry-content ul, .entry-content ol,
.entry-content img.alignleft, .entry-content img.alignright, .entry-content img.aligncenter {
margin-bottom: 0.625em;
}
.entry-content .widget ul {
margin-left: 1.1em;
}
.entry-content {
margin-left: 1.1em;
padding: 0;
}
.error404 #main #searchform {
margin: 0;
}
.error404 #main .widget_tag_cloud {
display: none;
}
.entry-content td,.comment-content td {
vertical-align: middle;
text-align:justify;
}
/* Style of headings */
.entry-content h3 {
font-size: 10px;
color: #666666;
margin-left: -1.1em;
}
.entry-content h2 {
font-size: 12px;
color: #666666;
text-transform: uppercase;
font-weight: normal;
margin: 0 0 .8125em -0.6em;
}
.entry-content h1 {
font-size: 13px;
color: #666666;
text-transform: uppercase;
font-weight: normal;
margin: 0 0 .8125em -1.1em;
}
/* Headermenu */
.menu-header {
margin: 0;
padding: 0;
width: 100%;
height: 40px;
text-align: center;
}
.menu-header ul {
list-style: none;
margin: 0;
padding: 0;
height: 20px;
}
.menu-header li {
display: inline-block;
}
.menu-header a {
padding: 0 5px;
font-size: 13px;
font-weight: bold;
text-decoration: none;
text-transform: uppercase;
}
.menu-header ul ul {
display: none;
position: absolute;
left: 0px;
height: 20px;
width: 100%;
z-index: 99999;
background-color: #e9f5f9;
}
.menu-header ul ul a {
text-transform: none;
}
.menu-header ul li.current_page_item > a,
.menu-header ul li.current-menu-ancestor > a,
.menu-header ul li.current-menu-item > a,
.menu-header ul li.current-menu-parent > a {
color: #000000;
}
.menu-header ul li.current_page_item > ul,
.menu-header ul li.current-menu-ancestor > ul,
.menu-header ul li.current-menu-item > ul,
.menu-header ul li.current-menu-parent > ul,
.menu-header ul li:hover > ul {
display: block;
}
/* Footmenu */
div.footer-edit-link, div.footer-admin-link {
height: 30px;
float: left;
border-top: 1px solid #ddd;
text-align: center;
}
div.footer-edit-link div, div.footer-admin-link div {
visibility: hidden;
}
#supplementary {
padding: 0;
}
#supplementary .widget {
margin: 0;
clear: none;
}
div.menu-footer_menu-container {
text-align: center;
}
div.menu-footer_menu-container a {
vertical-align: middle;
}
.widget_nav_menu ul#menu-footer_menu ul, .widget_nav_menu ul#menu-footer_menu li {
list-style-type: none;
list-style-image: none;
list-style-position: outside;
}
.widget_nav_menu ul#menu-footer_menu li {
display: inline;
padding-left: 1em;
padding-right: 1em;
}
\ No newline at end of file
@import "addons.scss";
@import "kieker_live_demo_vaadin.scss";
/* This file prefixes all rules with the theme name to avoid causing conflicts with other themes. */
/* The actual styles should be defined in kieker_live_demo_vaadin.scss */
.kieker_live_demo_vaadin {
@include addons;
@include kieker_live_demo_vaadin;
.embedded {
border:2px solid #3257A7;
border-radius:20px;
width:150px;
height:150px;
margin:0.2cm 2cm 1cm 2cm;
color:black;
}
.centered {
text-align:center;
}
}
......@@ -14,17 +14,18 @@ import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.UI;
@SuppressWarnings("serial")
@Theme("kieker_live_demo_vaadin")
@Title("Kieker Live Demo #Vaadin")
@Widgetset(value = "kieker.live.demo.widgetset.Kieker_live_demo_vaadinWidgetset")
public class KiekerLiveDemoUI extends UI {
private static final long serialVersionUID = -1874617742953933358L;
private static Navigator navigator;
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = KiekerLiveDemoUI.class, widgetset = "kieker.live.demo.widgetset.Kieker_live_demo_vaadinWidgetset")
public static class YourServlet extends VaadinServlet {
private static final long serialVersionUID = 1216852994048811901L;
}
@Override
......
......@@ -7,18 +7,31 @@ import com.vaadin.event.MouseEvents.ClickEvent;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.server.ThemeResource;
import com.vaadin.shared.ui.label.ContentMode;
import com.vaadin.ui.CustomLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Image;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
@SuppressWarnings("serial")
public class MainView extends Panel implements View {
private static final long serialVersionUID = -2729802936884562140L;
public MainView() {
final HorizontalLayout hLayout1 = new HorizontalLayout();
final HorizontalLayout hLayout2 = new HorizontalLayout();
final HorizontalLayout hLayout3 = new HorizontalLayout();
CustomLayout layout = new CustomLayout("layout");
setContent(layout);
final VerticalLayout topLayout = new VerticalLayout();
final VerticalLayout middleLeftLayout = new VerticalLayout();
final VerticalLayout middleRightLayout = new VerticalLayout();
final HorizontalLayout middleLayout = new HorizontalLayout(middleLeftLayout, middleRightLayout);
final VerticalLayout bottomLeftLayout = new VerticalLayout();
final VerticalLayout bottomRightLayout = new VerticalLayout();
final HorizontalLayout bottomLayout = new HorizontalLayout(bottomLeftLayout, bottomRightLayout);
// Create the embedded images
final Image imgJPetStore = new Image(null, new ThemeResource("img/petstore.png"));
......@@ -36,6 +49,8 @@ public class MainView extends Panel implements View {
imgRecordList.addClickListener(new MouseEvents.ClickListener() {
private static final long serialVersionUID = -9070082253323241075L;
@Override
public void click(final ClickEvent event) {
KiekerLiveDemoUI.navigateToRecordList();
......@@ -44,6 +59,8 @@ public class MainView extends Panel implements View {
imgMethodResponseTimes.addClickListener(new MouseEvents.ClickListener() {
private static final long serialVersionUID = 4309933761220689655L;
@Override
public void click(final ClickEvent event) {
KiekerLiveDemoUI.navigateToMethodResponsetime();
......@@ -51,26 +68,65 @@ public class MainView extends Panel implements View {
});
// Add the images to the layout
hLayout1.addComponent(imgJPetStore);
hLayout2.addComponent(imgRecordList);
hLayout2.addComponent(imgMethodResponseTimes);
hLayout3.addComponent(imgSystemModel);
hLayout3.addComponent(imgCPUMemSwap);
hLayout1.setSizeFull();
hLayout2.setSizeFull();
hLayout3.setSizeFull();
hLayout1.addStyleName("centered");
hLayout2.addStyleName("centered");
hLayout3.addStyleName("centered");
final VerticalLayout vLayout = new VerticalLayout(hLayout1, hLayout2, hLayout3);
// Add the images and the text to the layout
topLayout.addComponent(imgJPetStore);
Label topLabel = new Label("<p><strong><a href='/jpetstore' target='_blank'>JPETSTORE</a>"
+ "</strong> provides an exemplary online shop that has been instrumented with "
+ "<strong>Kieker</strong> for the analyses presented in this demo.</p>");
topLabel.setContentMode(ContentMode.HTML);
topLabel.addStyleName("p");
topLayout.addComponent(topLabel);
middleLeftLayout.addComponent(imgRecordList);
Label middleLeftLabel = new Label("<strong><a href='#!recordList'>RECORD LIST</a></strong>"
+ " shows the session id, the trace id, a part of the method signature and the method "
+ "response time of the last 100 called methods of the JPetStore. There is a freeze "
+ "button to stop updating the site, so that you can look at the details. A mouseover "
+ "on trace id shows the whole record which is generated by Kieker and a mouseover on "
+ "signature shows the whole method signature.");
middleLeftLabel.setContentMode(ContentMode.HTML);
middleLeftLabel.addStyleName("p");
middleLeftLayout.addComponent(middleLeftLabel);
middleRightLayout.addComponent(imgMethodResponseTimes);
Label middleRightLabel = new Label("<strong><a href='#!methodResponsetime'>METHOD RESPONSE TIMES"
+ "</a></strong> shows a line chart with the number of method calls and a bar chart with"
+ " the response times of these methods.");
middleRightLabel.setContentMode(ContentMode.HTML);
middleRightLabel.addStyleName("p");
middleRightLayout.addComponent(middleRightLabel);
bottomLeftLayout.addComponent(imgSystemModel);
Label bottomLeftLabel = new Label("<strong><a href='#!main'>SYSTEM MODEL</a></strong> shows the "
+ "runtime collected components, operations, etc of the JPetStore.");
bottomLeftLabel.setContentMode(ContentMode.HTML);
bottomLeftLabel.addStyleName("p");
bottomLeftLayout.addComponent(bottomLeftLabel);
bottomRightLayout.addComponent(imgCPUMemSwap);
Label bottomRightLabel = new Label("<strong><a href='#!main'>CPU AND MEMSWAP</a></strong> shows the"
+ " CPU and memory utilization of the available cores.");
bottomRightLabel.setContentMode(ContentMode.HTML);
bottomRightLabel.addStyleName("p");
bottomRightLabel.setSizeFull();
bottomRightLayout.addComponent(bottomRightLabel);
topLayout.setSizeFull();
middleLayout.setSizeFull();
middleLeftLayout.setSizeFull();
middleRightLayout.setSizeFull();
bottomLayout.setSizeFull();
topLayout.addStyleName("centered");
middleLeftLayout.addStyleName("centered");
middleRightLayout.addStyleName("centered");
bottomLeftLayout.addStyleName("centered");
bottomRightLayout.addStyleName("centered");
bottomLayout.addStyleName("centered");
final VerticalLayout vLayout = new VerticalLayout(topLayout, middleLayout, bottomLayout);
vLayout.setSizeFull();
setContent(vLayout);
layout.addComponent(vLayout, "main");
}
@Override
......
package kieker.live.demo;
import java.util.Arrays;
import java.util.LinkedList;
import org.dussan.vaadin.dcharts.DCharts;
import org.dussan.vaadin.dcharts.data.DataSeries;
import org.dussan.vaadin.dcharts.metadata.renderers.SeriesRenderers;
import org.dussan.vaadin.dcharts.options.Options;
import org.dussan.vaadin.dcharts.options.SeriesDefaults;
import com.google.gwt.user.client.Random;
import java.util.Random;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Button;
import com.vaadin.ui.Label;
import com.vaadin.ui.CustomLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.VerticalLayout;
@SuppressWarnings("serial")
public class MethodResponsetimeView extends Panel implements View {
private static final long serialVersionUID = -2313861106966236721L;
final DCharts chart = new DCharts();
LinkedList<Integer> list = new LinkedList<Integer>();
LinkedList<Integer> list2 = new LinkedList<Integer>();
public MethodResponsetimeView(){
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
CustomLayout layout = new CustomLayout("methodResponsetimeView");
setContent(layout);
SeriesDefaults seriesDefaults = new SeriesDefaults().setRenderer(SeriesRenderers.LINE);
Options options = new Options().setSeriesDefaults(seriesDefaults);
chart.setOptions(options);
initLists();
DataSeries dataSeries = new DataSeries();
dataSeries.add(list.toArray());
dataSeries.add(list2.toArray());
chart.setDataSeries(dataSeries).show();
Button button = new Button("Main");
button.addClickListener(new Button.ClickListener() {
private static final long serialVersionUID = 1351548194600430027L;
public void buttonClick(ClickEvent event) {
KiekerLiveDemoUI.navigateToMain();
}
});
layout.addComponent(button);
Button button2 = new Button("new Data");
button2.addClickListener(new Button.ClickListener() {
private static final long serialVersionUID = -6517719076274910305L;
public void buttonClick(ClickEvent event) {
chart.setDataSeries(
new DataSeries()
.add( 7, 9, 1, 4, 6, 8, 2, 5, 11))
.show();
newData();
DataSeries dataSeries = new DataSeries();
dataSeries.add(list.toArray());
dataSeries.add(list2.toArray());
chart.setDataSeries(dataSeries).show();
}
});
layout.addComponent(button2);
chart.setEnableChartDataClickEvent(true);
chart.setEnableChartDataRightClickEvent(true);
HorizontalLayout hlayout = new HorizontalLayout();
hlayout.addComponent(button);
hlayout.addComponent(button2);
VerticalLayout vlayout = new VerticalLayout();
vlayout.addComponent(hlayout);
vlayout.addComponent(chart);
SeriesDefaults seriesDefaults = new SeriesDefaults()
.setRenderer(SeriesRenderers.PIE);
Options options = new Options()
.setSeriesDefaults(seriesDefaults);
layout.addComponent(vlayout, "main");
}
chart.setOptions(options);
private void initLists(){
list.addAll(Arrays.asList(0,1,2,3,4,5,6,7,8));
list2.addAll(Arrays.asList(29,28,27,26,25,24,23,22,21));
}
chart.setDataSeries(
new DataSeries()
.add(3, 7, 9, 1, 4, 6, 8, 2, 5))
.show();
layout.addComponent(chart);
public void newData(){
Integer i = new Random().nextInt(30);
Integer j = new Random().nextInt(30);
list.remove();
list2.remove();
list.add(i);
list2.add(j);
}
@Override
......
......@@ -3,21 +3,28 @@ package kieker.live.demo;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Button;
import com.vaadin.ui.CustomLayout;
import com.vaadin.ui.Panel;
@SuppressWarnings("serial")
public class RecordView extends Panel implements View {
private static final long serialVersionUID = -2628616342439990109L;
public RecordView() {
CustomLayout layout = new CustomLayout("recordView");
final Button button = new Button("Hallo, Welt!");
button.addClickListener(new Button.ClickListener() {
private static final long serialVersionUID = -303825246905314764L;
@Override
public void buttonClick(final com.vaadin.ui.Button.ClickEvent event) {
KiekerLiveDemoUI.navigateToMain();
}
});
setContent(button);
layout.addComponent(button, "main");
setContent(layout);
}
@Override
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment