Bug 549074: Add UI builder examples

Change-Id: Ieaf39b97e93bb331782d1c00b7f4d874df709a43
diff --git a/Demos/UI Builder Examples/.project b/Demos/UI Builder Examples/.project
new file mode 100644
index 0000000..14d63ba
--- /dev/null
+++ b/Demos/UI Builder Examples/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>UI Builder Examples</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/Demos/UI Builder Examples/AddressBook/Address Input.js b/Demos/UI Builder Examples/AddressBook/Address Input.js
new file mode 100644
index 0000000..dcbf2a5
--- /dev/null
+++ b/Demos/UI Builder Examples/AddressBook/Address Input.js
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Christian Pontesegger and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * Contributors:
+ *     Christian Pontesegger - initial API and implementation
+ *******************************************************************************/
+loadModule("/System/UI Builder", false);
+loadModule("/System/UI");
+loadModule('/System/Resources');
+
+createView("Create Contact");
+
+createLabel("First Name:", "1/1 >x");
+var txtFirstName = createText("2-4/1 o!");
+createLabel("Last Name:", "1/2 >x");
+var txtLastName = createText("2-4/2 o!");
+
+createLabel("Phone:", "1/3 >x");
+var txtPhone = createText("2-4/3 o!");
+
+createLabel("ZIP Code:", "1/4 >x");
+var txtZipCode = createText("2/4 o");
+
+createLabel("Country:", "3/4 >x");
+var cmbCountry = createComboViewer([ "Austria", "Germany", "India", "USA" ],
+		null, "4/4 o")
+
+createSeparator(true, "1-4/5 o")
+createButton("Save", saveAddress, "4/6 >")
+
+function saveAddress() {
+
+	var address = new Object();
+	address.lastName = executeUI("txtLastName.getText();") + "";
+	address.firstName = executeUI("txtFirstName.getText();") + "";
+	address.phone = executeUI("txtPhone.getText();") + "";
+	address.zipCode = executeUI("txtZipCode.getText();") + "";
+	address.country = executeUI("cmbCountry.getSelection().getFirstElement();")
+			+ "";
+	var data = JSON.stringify(address);
+
+	writeFile("workspace://UI Builder/AddressBook/data/" + address.lastName + " "
+			+ address.firstName + ".address", data);
+}
\ No newline at end of file
diff --git a/Demos/UI Builder Examples/AddressBook/List.js b/Demos/UI Builder Examples/AddressBook/List.js
new file mode 100644
index 0000000..7bea137
--- /dev/null
+++ b/Demos/UI Builder Examples/AddressBook/List.js
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Christian Pontesegger and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * Contributors:
+ *     Christian Pontesegger - initial API and implementation
+ *******************************************************************************/
+loadModule('/System/Resources');
+loadModule('/System/UI Builder');
+loadModule('/System/UI');
+
+createView("Phone Numbers")
+
+var tableViewer = createTableViewer(readAddresses())
+createViewerColumn(tableViewer, "Name", createLabelProvider("getProviderElement().firstName + ' ' + getProviderElement().lastName"))
+createViewerColumn(tableViewer, "Phone", createLabelProvider("getProviderElement().phone"))
+
+executeUI("tableViewer.setInput(readAddresses())");
+
+
+function readAddresses() {
+	var addresses = new Array();
+	
+	var files = findFiles("*.address");
+	for (index in files) {
+		var data = readFile(files[index]);
+		var address = JSON.parse(data);
+		addresses.push(address);
+	}
+	
+	return addresses;
+}
\ No newline at end of file
diff --git a/Demos/UI Builder Examples/Plot function.js b/Demos/UI Builder Examples/Plot function.js
new file mode 100644
index 0000000..9eb31e1
--- /dev/null
+++ b/Demos/UI Builder Examples/Plot function.js
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Christian Pontesegger and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * Contributors:
+ *     Christian Pontesegger - initial API and implementation
+ *******************************************************************************/
+loadModule("/System/UI Builder");
+loadModule("/System/UI");
+loadModule("/Charting");
+
+createView("Function Plot")
+
+createLabel("Function:", "1/1 > x");
+var txtFunction = createText("2-6/1 o!");
+createButton("Plot", plotFunction, "7/1 o")
+
+createLabel("Range:", "1/2 > x")
+var txtRangeFrom = createText("2/2")
+createLabel("to", "3/2 < x")
+var txtRangeTo = createText("4/2")
+createLabel("Step size", "5/2 < x")
+var txtRangeStep = createText("6/2")
+createButton("Clear", "clear()", "7/2 o")
+
+executeUI("txtRangeFrom.setText('-10')")
+executeUI("txtRangeTo.setText('10')")
+executeUI("txtRangeStep.setText('1')")
+
+chart = createChart(getComposite());
+chartComposite = addControl(chart, "1-7/3 o! o!")
+
+function plotFunction() {
+	var formula = executeUI("txtFunction.getText()");
+	var rangeFrom = parseFloat(executeUI("txtRangeFrom.getText()"))
+	var rangeTo = parseFloat(executeUI("txtRangeTo.getText()"))
+	var rangeStep = parseFloat(executeUI("txtRangeStep.getText()"))
+
+	series(formula);
+	for (var x = rangeFrom; x <= rangeTo; x += rangeStep) {
+		print("from " + x)
+		y = eval("x=" + x + ";\n" + formula);
+		plotPoint(x, y);
+	}
+}
\ No newline at end of file
diff --git a/Demos/UI Builder Examples/Project Info Viewer.js b/Demos/UI Builder Examples/Project Info Viewer.js
new file mode 100644
index 0000000..f48c83b
--- /dev/null
+++ b/Demos/UI Builder Examples/Project Info Viewer.js
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Christian Pontesegger and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * Contributors:
+ *     Christian Pontesegger - initial API and implementation
+ *******************************************************************************/
+loadModule("/System/UI Builder", false);
+loadModule("/System/Resources", false);
+
+createView("Project Info")
+var viewer = createTreeViewer(getWorkspace().getProjects(), getChildren);
+createViewerColumn(viewer, "Resource", new org.eclipse.ui.model.WorkbenchLabelProvider(), 4);
+createViewerColumn(viewer, "Size", createLabelProvider(getResourceSize), 1);
+
+createComparator(viewer, "return (getProviderElement() instanceof org.eclipse.core.resources.IContainer) ? 1: 2;")
+
+function getChildren() {
+	if (getProviderElement() instanceof org.eclipse.core.resources.IContainer)
+		return getProviderElement().members();
+	
+	return null;
+}
+
+function getResourceSize() {
+	print(getProviderElement())
+	if (getProviderElement() instanceof org.eclipse.core.resources.IContainer)
+		return getProviderElement().members().length;
+	
+	return getProviderElement().getRawLocation().toFile().length() + " bytes";
+}
+
+
+