Bug 269312 Support @Out annotations
Instead of the ugly "outputContext" idea. Using JavaBeans style change notification.
examples/org.eclipse.e4.demo.e4photo/src/org/eclipse/e4/demo/e4photo/ExifTable.java
| SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
		viewer.getTable().setHeaderVisible(true);
		viewer.getTable().setLinesVisible(true);
		viewer.getTable().setData("org.eclipse.e4.ui.css.id", "exif");
		viewer.getTable().setData("org.eclipse.e4.ui.css.CssClassName", "properties");
		final JSONObject state = persistedState == null ? new JSONObject() : JSONObject
				.deserialize(persistedState);
		String[] columnNames = new String[] { "name", "make", "model", "orientation",
				"software", "timestamp", "gpsLatitude", "gpsLongitude", "exposure",
				"iso", "aperture", "exposureComp", "flash", "width", "height",
				"focalLength", "whiteBalance", "lightSource", "exposureProgram" };
		for (int i = 0; i < columnNames.length; i++) {
			TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
			final TableColumn c = column.getColumn();
			final String name = columnNames[i];
			c.setText(name);
			String width = state.getString(name);
			if (width != null) {
				c.setWidth(Integer.parseInt(width));
			} else {
				c.pack();
			}
			c.addControlListener(new ControlAdapter() {
				@Override
				public void controlResized(ControlEvent e) {
					state.set(name, c.getWidth() + "");
					outputContext.set(IServiceConstants.PERSISTED_STATE, state
							.serialize());
				}
			});